diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/InputDocumentArgument.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/InputDocumentArgument.java index b636b825..a3d7cce5 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/InputDocumentArgument.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/cliarguments/InputDocumentArgument.java @@ -59,7 +59,11 @@ public int handleArgument(String[] args, int argOffset, throw new FileNotFoundException(signatureDocument); } - getStatus().document = signatureDocumentFile; + var status = getStatus(); + if (status.document == null) + status.document = signatureDocumentFile; + else + status.pendingDocuments.add(signatureDocumentFile); return argOffset + 1; } diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/DataSourceSelectComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/DataSourceSelectComposite.java index 852afecc..d9e61159 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/DataSourceSelectComposite.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/DataSourceSelectComposite.java @@ -17,6 +17,8 @@ // Imports import java.io.File; +import java.util.ArrayList; +import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.DND; @@ -54,19 +56,13 @@ public class DataSourceSelectComposite extends StateComposite { */ public void openFileDialog() { FileDialog dialog = new FileDialog( - DataSourceSelectComposite.this.getShell(), SWT.OPEN); + DataSourceSelectComposite.this.getShell(), SWT.OPEN | SWT.MULTI); dialog.setFilterExtensions(new String[] { "*.pdf", "*" }); dialog.setFilterNames(new String[] { Messages.getString("common.PDFExtension_Description"), Messages.getString("common.AllExtension_Description") }); - String fileName = dialog.open(); - File file = null; - if (fileName != null) { - file = new File(fileName); - if (file.exists()) { - DataSourceSelectComposite.this.setSelected(file); - } - } + dialog.open(); + this.setSelected(dialog.getFilterPath(), dialog.getFileNames()); } /** @@ -93,15 +89,18 @@ public void widgetSelected(SelectionEvent e) { /** * Set this value through the setter method!! */ - private File selected = null; - - /** - * Sets the selected file and calls update to the workflow - * - * @param selected - */ - protected void setSelected(File selected) { - this.selected = selected; + final private List selected = new ArrayList<>(); + + public void setSelected(String basePath, String[] fileNames) { + this.selected.clear(); + if (fileNames != null) { + for (String fileName : fileNames) { + File file = new File(basePath, fileName); + if (file.exists()) { + this.selected.add(file); + } + } + } this.state.updateStateMachine(); } @@ -110,7 +109,7 @@ protected void setSelected(File selected) { * * @return the selected file */ - public File getSelected() { + public List getSelected() { return this.selected; } @@ -200,16 +199,7 @@ public void drop(DropTargetEvent event) { log.error("Dropped file name was null"); return; } - String[] files = (String[]) event.data; - if (files.length > 0) { - // Only taking first file ... - File file = new File(files[0]); - if (!file.exists()) { - log.error(Messages.formatString("error.FileNotExist", files[0])); - return; - } - DataSourceSelectComposite.this.setSelected(file); - } + DataSourceSelectComposite.this.setSelected("", (String[])event.data); } } diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/OutputComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/OutputComposite.java index 96dc3982..20d2341e 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/OutputComposite.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/OutputComposite.java @@ -282,8 +282,6 @@ public void saveDocument() { * @param target the filename to save the document as * * @return saved File (or null if unsuccessful) - * @throws FileNotFoundException - * @throws IOException */ private File saveResultAsFile(File inputFolder, String target) { if (target == null) diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/Status.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/Status.java index ba5e5fd5..1060d329 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/Status.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/Status.java @@ -17,6 +17,8 @@ // Imports import java.io.File; +import java.util.ArrayDeque; +import java.util.Queue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,6 +34,7 @@ public class Status { private static final Logger log = LoggerFactory.getLogger(Status.class); public File document = null; + public Queue pendingDocuments = new ArrayDeque<>(); public SignaturePosition signaturePosition = 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 12b16da7..82fe0225 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,7 +88,14 @@ public void run() { if (!(status.getPreviousState() instanceof PrepareConfigurationState) && !(status.getPreviousState() instanceof OpenState)) { status.bku = config.getDefaultBKU(); - status.document = null; + + if (status.getPreviousState() instanceof OutputState) { + status.document = status.pendingDocuments.poll(); + } else { + status.document = null; + status.pendingDocuments.clear(); + } + status.signaturePosition = ((config.getSignatureProfile() == Profile.INVISIBLE) || config.getAutoPositionSignature()) ? (new SignaturePosition()) : null; /* ensure that files get closed */ @@ -104,7 +111,15 @@ public void run() { getStateMachine().display(selection); selection.layout(); - status.document = selection.getSelected(); + List selectedFiles = selection.getSelected(); + status.document = null; + status.pendingDocuments.clear(); + for (File file : selectedFiles) { + if (status.document == null) + status.document = file; + else + status.pendingDocuments.add(file); + } if (status.document == null) { // Not selected yet diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OutputState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OutputState.java index 308b7d5a..b8f5f8f1 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OutputState.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OutputState.java @@ -68,10 +68,6 @@ private OutputComposite getOutputComposite() { // Save signed document this.outputComposite.saveDocument(); - - if (config.getSkipFinish() && this.outputComposite.getSaveSuccessful()) { - getStateMachine().exit(); - } } return this.outputComposite; @@ -94,6 +90,14 @@ public void run() { OutputComposite outputComposite = this.getOutputComposite(); + if (outputComposite.getSaveSuccessful()) { + if (!getStateMachine().status.pendingDocuments.isEmpty()) { + this.setNextState(new OpenState(getStateMachine())); + return; + } + if (getConfig().getSkipFinish()) + getStateMachine().exit(); + } // Display dialog getStateMachine().display(outputComposite); }