diff options
Diffstat (limited to 'pdf-over-gui/src/main')
| -rw-r--r-- | pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java | 37 | ||||
| -rw-r--r-- | pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java | 64 | 
2 files changed, 55 insertions, 46 deletions
| diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java index 8eb31752..327c8386 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java @@ -22,11 +22,6 @@ import java.awt.Frame;  import java.awt.Image;  import java.awt.event.MouseWheelEvent;  import java.awt.event.MouseWheelListener; -import java.io.File; -import java.io.IOException; -import java.io.RandomAccessFile; -import java.nio.ByteBuffer; -import java.nio.channels.FileChannel;  import org.eclipse.swt.SWT;  import org.eclipse.swt.awt.SWT_AWT; @@ -52,7 +47,6 @@ import at.asit.pdfover.gui.workflow.states.State;  import at.asit.pdfover.signator.SignaturePosition;  import com.sun.pdfview.PDFFile; -import com.sun.pdfview.decrypt.PDFAuthenticationFailureException;  /**   * Composite which allows to position the signature on a preview of the document @@ -66,8 +60,6 @@ public class PositioningComposite extends StateComposite {  	private SignaturePanel viewer = null; -	private PDFFile pdf = null; -  	private Frame frame = null;  	private Composite mainArea = null; @@ -167,39 +159,18 @@ public class PositioningComposite extends StateComposite {  	 *   	 * @param document  	 *            document to display -	 * @throws IOException -	 *             I/O Error  	 */ -	public void displayDocument(File document) throws IOException { -		RandomAccessFile rafile = new RandomAccessFile(document, "r"); //$NON-NLS-1$ -		FileChannel chan = rafile.getChannel(); -		ByteBuffer buf = chan -				.map(FileChannel.MapMode.READ_ONLY, 0, chan.size()); -		chan.close(); -		rafile.close(); -		try -		{ -			this.pdf = new PDFFile(buf); -		} -		catch (PDFAuthenticationFailureException e) { -			throw new IOException(Messages.getString("error.PDFPwdProtected"), e); //$NON-NLS-1$ -		} -		catch (IOException e) { -			throw new IOException(Messages.getString("error.MayNotBeAPDF"), e); //$NON-NLS-1$ -		} -		if (this.pdf.getDefaultDecrypter().isEncryptionPresent()) -			throw new IOException(Messages.getString("error.PDFProtected")); //$NON-NLS-1$ - +	public void displayDocument(PDFFile document) {  		if (this.viewer == null) { -			this.viewer = new SignaturePanel(this.pdf); +			this.viewer = new SignaturePanel(document);  			this.frame.add(this.viewer, BorderLayout.CENTER);  			this.viewer.setSignaturePlaceholderBorderColor(new Color(  					Constants.MAINBAR_ACTIVE_BACK_DARK.getRed(),  					Constants.MAINBAR_ACTIVE_BACK_DARK.getGreen(),  					Constants.MAINBAR_ACTIVE_BACK_DARK.getBlue()));  		} else -			this.viewer.setDocument(this.pdf); -		this.numPages = this.pdf.getNumPages(); +			this.viewer.setDocument(document); +		this.numPages = document.getNumPages();  		this.scrollbar.setValues(1, 1, this.numPages + 1, 1, 1, 1);  		showPage(this.numPages);  	} diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java index 8ba41059..b1f53c27 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java @@ -16,7 +16,11 @@  package at.asit.pdfover.gui.workflow.states;  //Imports +import java.io.File;  import java.io.IOException; +import java.io.RandomAccessFile; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel;  import org.eclipse.swt.SWT;  import org.slf4j.Logger; @@ -25,8 +29,8 @@ import org.slf4j.LoggerFactory;  import at.asit.pdfover.gui.MainWindow.Buttons;  import at.asit.pdfover.gui.MainWindowBehavior;  import at.asit.pdfover.gui.composites.PositioningComposite; -import at.asit.pdfover.gui.controls.ErrorDialog;  import at.asit.pdfover.gui.controls.Dialog.BUTTONS; +import at.asit.pdfover.gui.controls.ErrorDialog;  import at.asit.pdfover.gui.utils.Messages;  import at.asit.pdfover.gui.workflow.StateMachine;  import at.asit.pdfover.gui.workflow.Status; @@ -35,6 +39,9 @@ import at.asit.pdfover.signator.FileNameEmblem;  import at.asit.pdfover.signator.SignatureParameter;  import at.asit.pdfover.signator.SignaturePosition; +import com.sun.pdfview.PDFFile; +import com.sun.pdfview.decrypt.PDFAuthenticationFailureException; +  /**   * Decides where to position the signature block   */ @@ -57,12 +64,39 @@ public class PositioningState extends State {  	private SignaturePosition previousPosition = null; -	private PositioningComposite getPositioningComposite() throws IOException { +	private File previousDocument = null; + +	private PDFFile document = null; + +	private PDFFile getPDFDocument() throws IOException { +		PDFFile pdf = null; +		RandomAccessFile rafile = new RandomAccessFile(this.stateMachine.getStatus().getDocument(), "r"); //$NON-NLS-1$ +		FileChannel chan = rafile.getChannel(); +		ByteBuffer buf = chan +				.map(FileChannel.MapMode.READ_ONLY, 0, chan.size()); +		chan.close(); +		rafile.close(); +		try +		{ +			pdf = new PDFFile(buf); +		} +		catch (PDFAuthenticationFailureException e) { +			throw new IOException(Messages.getString("error.PDFPwdProtected"), e); //$NON-NLS-1$ +		} +		catch (IOException e) { +			throw new IOException(Messages.getString("error.MayNotBeAPDF"), e); //$NON-NLS-1$ +		} +		if (pdf.getDefaultDecrypter().isEncryptionPresent()) +			throw new IOException(Messages.getString("error.PDFProtected")); //$NON-NLS-1$ +		return pdf; +	} + +	private PositioningComposite getPositioningComposite(PDFFile document) {  		if (this.positionComposite == null) {  			this.positionComposite =  					this.stateMachine.getGUIProvider().createComposite(PositioningComposite.class, SWT.RESIZE, this);  			log.debug("Displaying " +  this.stateMachine.getStatus().getDocument()); //$NON-NLS-1$ -			this.positionComposite.displayDocument(this.stateMachine.getStatus().getDocument()); +			this.positionComposite.displayDocument(document);  		}  		// Update possibly changed values  		SignatureParameter param = this.stateMachine.getPDFSigner().getPDFSigner().newParameter(); @@ -98,10 +132,13 @@ public class PositioningState extends State {  			status.setSignaturePosition(null);  		} -		if(status.getSignaturePosition() == null) { -			PositioningComposite position = null; +		if ((this.document == null) || +				(this.previousDocument != this.stateMachine.getStatus().getDocument())) { +			this.document = null; +			log.debug("Checking PDF document for encryption"); //$NON-NLS-1$  			try { -				position = this.getPositioningComposite(); +				this.document = getPDFDocument(); +				this.previousDocument = this.stateMachine.getStatus().getDocument();  			} catch (IOException e) {   				this.positionComposite = null;  				log.error("Failed to display PDF document", e); //$NON-NLS-1$ @@ -112,9 +149,9 @@ public class PositioningState extends State {  						this.stateMachine.getGUIProvider().getMainShell(),   						message, BUTTONS.RETRY_CANCEL);  				if(dialog.open() == SWT.RETRY) { -					this.stateMachine.update(); +					run();  				} else { -					this.setNextState(new OpenState(this.stateMachine)); +					setNextState(new OpenState(this.stateMachine));  				}  				return;  			} catch(Exception ex) { @@ -123,14 +160,15 @@ public class PositioningState extends State {  						this.stateMachine.getGUIProvider().getMainShell(),   						Messages.getString("error.PositioningNotPossible"), BUTTONS.OK); //$NON-NLS-1$  				dialog.open(); -				  				status.setSignaturePosition(new SignaturePosition()); -				  				this.setNextState(new BKUSelectionState(this.stateMachine)); -				  				return;  			} -			 +		} + +		if (status.getSignaturePosition() == null) { +			PositioningComposite position = this.getPositioningComposite(this.document); +  			this.stateMachine.getGUIProvider().display(position);  			status.setSignaturePosition(position.getPosition()); @@ -168,7 +206,7 @@ public class PositioningState extends State {  	}  	@Override -	public String toString()  { +	public String toString() {  		return this.getClass().getName();  	}  } | 
