From db09b5eafeb99e9065605b28b6c91c82812f8c0b Mon Sep 17 00:00:00 2001 From: torakiki Date: Tue, 21 Nov 2017 17:09:31 +0100 Subject: [PATCH] Open button should open the output file in case of directory output but single output file (ex a rotate of a single file) --- .../java/org/pdfsam/ui/module/OpenButton.java | 13 +++++-- .../org/pdfsam/ui/module/OpenButtonTest.java | 35 +++++++++++++++++-- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/pdfsam-fx/src/main/java/org/pdfsam/ui/module/OpenButton.java b/pdfsam-fx/src/main/java/org/pdfsam/ui/module/OpenButton.java index f483e1c06..9d534bd22 100644 --- a/pdfsam-fx/src/main/java/org/pdfsam/ui/module/OpenButton.java +++ b/pdfsam-fx/src/main/java/org/pdfsam/ui/module/OpenButton.java @@ -83,9 +83,10 @@ public OpenButton(String ownerModule, ModuleInputOutputType outputType) { setPrefHeight(Double.MAX_VALUE); setVisible(false); setOnAction(e -> { - if (destination != null && destination.exists()) { - eventStudio().broadcast(new OpenFileRequest(destination)); + if (latestOutput.size() != 1 || !openFile(latestOutput.get(0))) { + openFile(destination); } + }); eventStudio().add(TaskExecutionRequestEvent.class, e -> { if (e.getModuleId().equals(ownerModule)) { @@ -102,6 +103,14 @@ public OpenButton(String ownerModule, ModuleInputOutputType outputType) { eventStudio().addAnnotatedListeners(this); } + private boolean openFile(File file) { + if (file != null && file.exists()) { + eventStudio().broadcast(new OpenFileRequest(file)); + return true; + } + return false; + } + public void initModules(Collection modules) { modules.forEach(m -> { if (m.descriptor().hasInputType(outputType)) { diff --git a/pdfsam-fx/src/test/java/org/pdfsam/ui/module/OpenButtonTest.java b/pdfsam-fx/src/test/java/org/pdfsam/ui/module/OpenButtonTest.java index b50380dc7..3e021255a 100644 --- a/pdfsam-fx/src/test/java/org/pdfsam/ui/module/OpenButtonTest.java +++ b/pdfsam-fx/src/test/java/org/pdfsam/ui/module/OpenButtonTest.java @@ -77,7 +77,7 @@ protected Parent getRootNode() { } @Test - public void openClick() throws Exception { + public void openFileClick() throws Exception { File file = temp.newFile(); FileTaskOutput output = new FileTaskOutput(file); TestListener listener = new TestListener(file); @@ -86,6 +86,36 @@ public void openClick() throws Exception { FXTestUtils.invokeAndWait(() -> victim.dispatch(output), 1); click(victim); assertTrue(listener.isHit()); + assertTrue(listener.equal); + } + + @Test + public void openDirectoryClick() throws Exception { + File dir = temp.newFolder(); + DirectoryTaskOutput output = new DirectoryTaskOutput(dir); + TestListener listener = new TestListener(dir); + OpenButton victim = find(".footer-open-button"); + eventStudio().add(listener); + FXTestUtils.invokeAndWait(() -> victim.dispatch(output), 1); + click(victim); + assertTrue(listener.isHit()); + assertTrue(listener.equal); + } + + @Test + public void openSingleFileDirectoryDestinationClick() throws Exception { + File file = temp.newFile(); + DirectoryTaskOutput output = new DirectoryTaskOutput(file.getParentFile()); + TestListener listener = new TestListener(file); + OpenButton victim = find(".footer-open-button"); + eventStudio().add(listener); + NotifiableTaskMetadata taskMetadata = new NotifiableTaskMetadata(mock(Task.class)); + taskMetadata.addTaskOutput(file); + eventStudio().broadcast(new TaskExecutionCompletedEvent(12, taskMetadata), "moduleId"); + FXTestUtils.invokeAndWait(() -> victim.dispatch(output), 1); + click(victim); + assertTrue(listener.isHit()); + assertTrue(listener.equal); } @Test @@ -140,6 +170,7 @@ public void sendToModuleClick() throws Exception { private static class TestListener extends HitTestListener { private File destination; + boolean equal = false; private TestListener(File destination) { this.destination = destination; @@ -148,7 +179,7 @@ private TestListener(File destination) { @Override public void onEvent(OpenFileRequest event) { super.onEvent(event); - assertEquals(destination, event.getFile()); + equal = destination.equals(event.getFile()); } }