diff options
Diffstat (limited to 'pdf-over-gui/src')
4 files changed, 50 insertions, 16 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 09b310fe..40199301 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 @@ -176,16 +176,27 @@ public class PositioningComposite extends StateComposite {  					PositioningComposite.this.frame.add(PositioningComposite.this.viewer, BorderLayout.CENTER);  				}  			}); -		} else +		} else {  			EventQueue.invokeLater(new Runnable() {  				@Override  				public void run() {  					PositioningComposite.this.viewer.setDocument(document);  				}  			}); -		this.numPages = document.getNumPages(); -		this.scrollbar.setValues(1, 1, this.numPages + 1, 1, 1, 1); -		showPage(this.numPages); +		} + +		if (document != null) +		{ +			this.numPages = document.getNumPages(); +			PositioningComposite.this.scrollbar.setValues(1, 1, this.numPages + 1, 1, 1, 1); +			showPage(this.numPages); +		} +	} + +	@Override +	public void dispose() { +		this.viewer.setDocument(null); +		super.dispose();  	}  	/** diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SignaturePanel.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SignaturePanel.java index 34dd6c5e..1911ac67 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SignaturePanel.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SignaturePanel.java @@ -129,8 +129,17 @@ public class SignaturePanel extends JPanel {  	public void setDocument(PDFFile pdf) {
  		this.pdf = pdf;
  		this.sigPagePos = null;
 -		this.numPages = pdf.getNumPages();
 -		showPage(this.numPages);
 +		if (pdf != null)
 +		{
 +			this.numPages = pdf.getNumPages();
 +			showPage(this.numPages);
 +		}
 +		else
 +		{
 +			this.page = 0;
 +			this.numPages = 0;
 +			showPage(null);
 +		}
  	}
  	/**
 diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OpenState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OpenState.java index dab181af..9fca3d2c 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OpenState.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OpenState.java @@ -88,6 +88,9 @@ public class OpenState extends State {  			status.setBKU(config.getDefaultBKU());  			status.setDocument(null);  			status.setSignaturePosition(config.getDefaultSignaturePosition()); + +			/* ensure that files get closed */ +			status.getPreviousState().cleanUp();  		}  		if (status.getDocument() == null) { 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 9a881687..6aec43fe 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 @@ -66,16 +66,27 @@ public class PositioningState extends State {  	private SignaturePosition previousPosition = null; -	private File previousDocument = null; +	private File loadedDocumentPath = null;  	private PDFFile document = null; -	private PDFFile getPDFDocument() throws IOException { +	private void closePDFDocument() { +		 +		if (this.document != null) +		{ +			this.document = null; +			System.gc(); /* try to get Java to close the mapped file... */ +		} +		this.loadedDocumentPath = null; +	} + +	private void openPDFDocument() throws IOException { +		closePDFDocument(); +		File documentPath = getStateMachine().getStatus().getDocument();  		PDFFile pdf = null; -		RandomAccessFile rafile = new RandomAccessFile(getStateMachine().getStatus().getDocument(), "r"); +		RandomAccessFile rafile = new RandomAccessFile(documentPath, "r");  		FileChannel chan = rafile.getChannel(); -		ByteBuffer buf = chan -				.map(FileChannel.MapMode.READ_ONLY, 0, chan.size()); +		ByteBuffer buf = chan.map(FileChannel.MapMode.READ_ONLY, 0, chan.size());  		chan.close();  		rafile.close();  		try @@ -95,7 +106,8 @@ public class PositioningState extends State {  			else  				throw new IOException(Messages.getString("error.MayNotBeAPDF"), e);  		} -		return pdf; +		this.document = pdf; +		this.loadedDocumentPath = documentPath;  	}  	private PositioningComposite getPositioningComposite(PDFFile document) { @@ -143,12 +155,10 @@ public class PositioningState extends State {  		}  		if ((this.document == null) || -				(this.previousDocument != getStateMachine().getStatus().getDocument())) { -			this.document = null; +				(this.loadedDocumentPath != getStateMachine().getStatus().getDocument())) {  			log.debug("Checking PDF document for encryption"); //$NON-NLS-1$  			try { -				this.document = getPDFDocument(); -				this.previousDocument = getStateMachine().getStatus().getDocument(); +				openPDFDocument();  			} catch (IOException e) {   				this.positionComposite = null;  				log.error("Failed to display PDF document", e); //$NON-NLS-1$ @@ -203,6 +213,7 @@ public class PositioningState extends State {  	public void cleanUp() {  		if (this.positionComposite != null)  			this.positionComposite.dispose(); +		closePDFDocument();  	}  	/* (non-Javadoc) | 
