From 17133851cf041c375f7ebbca40cf4b541a5ba9e6 Mon Sep 17 00:00:00 2001 From: Jan Eglinger Date: Wed, 20 Jun 2018 08:12:38 +0200 Subject: [PATCH 1/3] Remove outputFolder parameter as it is not used currently --- .../java/org/scijava/batch/FileScriptBatchProcessor.java | 6 +++--- .../java/org/scijava/batch/MenuScriptBatchProcessor.java | 6 +++--- src/main/java/org/scijava/batch/ModuleBatchProcessor.java | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/scijava/batch/FileScriptBatchProcessor.java b/src/main/java/org/scijava/batch/FileScriptBatchProcessor.java index 7285de7..7df758c 100644 --- a/src/main/java/org/scijava/batch/FileScriptBatchProcessor.java +++ b/src/main/java/org/scijava/batch/FileScriptBatchProcessor.java @@ -59,8 +59,8 @@ public class FileScriptBatchProcessor extends DynamicCommand { @Parameter(visibility = ItemVisibility.MESSAGE, persist = false) private String message = " "; // Placeholder message - @Parameter(label = "Output directory", style = FileWidget.DIRECTORY_STYLE, required = false) - private File outputFolder; +// @Parameter(label = "Output directory", style = FileWidget.DIRECTORY_STYLE, required = false) +// private File outputFolder; private List fileList; private ModuleInfo moduleInfo; @@ -80,7 +80,7 @@ public void run() { inputMap.put("moduleInfo", moduleInfo); File[] fileArray = fileList.toArray(new File[fileList.size()]); inputMap.put("inputFileList", fileArray); - inputMap.put("outputFolder", outputFolder); +// inputMap.put("outputFolder", outputFolder); commands.run(ModuleBatchProcessor.class, true, inputMap); } diff --git a/src/main/java/org/scijava/batch/MenuScriptBatchProcessor.java b/src/main/java/org/scijava/batch/MenuScriptBatchProcessor.java index 5669343..79c2dc6 100644 --- a/src/main/java/org/scijava/batch/MenuScriptBatchProcessor.java +++ b/src/main/java/org/scijava/batch/MenuScriptBatchProcessor.java @@ -47,8 +47,8 @@ public class MenuScriptBatchProcessor extends DynamicCommand { @Parameter(visibility = ItemVisibility.MESSAGE, persist = false) private String message = " "; // Placeholder message - @Parameter(label = "Output directory", style = FileWidget.DIRECTORY_STYLE, required = false) - private File outputFolder; +// @Parameter(label = "Output directory", style = FileWidget.DIRECTORY_STYLE, required = false) +// private File outputFolder; private List fileList; @@ -58,7 +58,7 @@ public void run() { inputMap.put("moduleInfo", scriptInfo); File[] fileArray = fileList.toArray(new File[fileList.size()]); inputMap.put("inputFileList", fileArray); - inputMap.put("outputFolder", outputFolder); +// inputMap.put("outputFolder", outputFolder); commands.run(ModuleBatchProcessor.class, true, inputMap); } diff --git a/src/main/java/org/scijava/batch/ModuleBatchProcessor.java b/src/main/java/org/scijava/batch/ModuleBatchProcessor.java index 493b566..38edce9 100644 --- a/src/main/java/org/scijava/batch/ModuleBatchProcessor.java +++ b/src/main/java/org/scijava/batch/ModuleBatchProcessor.java @@ -46,8 +46,8 @@ public class ModuleBatchProcessor extends DynamicCommand { @Parameter(label = "Input files") private File[] inputFileList; - @Parameter(label = "Output directory", style = FileWidget.DIRECTORY_STYLE, required = false) - private File outputFolder; +// @Parameter(label = "Output directory", style = FileWidget.DIRECTORY_STYLE, required = false) +// private File outputFolder; @SuppressWarnings("rawtypes") @Parameter(type = ItemIO.OUTPUT) From f350235a3c44a74f0a96148540ffbb64e6a9b411 Mon Sep 17 00:00:00 2001 From: Jan Eglinger Date: Tue, 26 Jun 2018 15:39:55 +0200 Subject: [PATCH 2/3] Handle invalid folder locations in callback This prevents a NullPointerException being thrown when the inputFolder parameter is undefined or invalid during callback --- src/main/java/org/scijava/batch/FileScriptBatchProcessor.java | 2 ++ src/main/java/org/scijava/batch/MenuScriptBatchProcessor.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/main/java/org/scijava/batch/FileScriptBatchProcessor.java b/src/main/java/org/scijava/batch/FileScriptBatchProcessor.java index 7df758c..a917a75 100644 --- a/src/main/java/org/scijava/batch/FileScriptBatchProcessor.java +++ b/src/main/java/org/scijava/batch/FileScriptBatchProcessor.java @@ -105,6 +105,8 @@ private List populateFileList(File folder, FilenameFilter filter, boolean * Count all applicable files and display them in the dialog message */ protected void directoryCallback() { + if (inputFolder == null || !inputFolder.exists()) return; + // get list of all applicable files FilenameFilter inputFilter; try { diff --git a/src/main/java/org/scijava/batch/MenuScriptBatchProcessor.java b/src/main/java/org/scijava/batch/MenuScriptBatchProcessor.java index 79c2dc6..336c19c 100644 --- a/src/main/java/org/scijava/batch/MenuScriptBatchProcessor.java +++ b/src/main/java/org/scijava/batch/MenuScriptBatchProcessor.java @@ -85,6 +85,8 @@ private List populateFileList(File folder, FilenameFilter filter, * Count all applicable files and display them in the dialog message */ protected void directoryCallback() { + if (inputFolder == null || !inputFolder.exists()) return; + // get list of all applicable files FilenameFilter inputFilter; try { From 27ee2858c471b55fa82ae6b6e318fdef56b8df7a Mon Sep 17 00:00:00 2001 From: Jan Eglinger Date: Tue, 26 Jun 2018 15:40:38 +0200 Subject: [PATCH 3/3] Use BatchService to retrieve compatible inputs in ScriptInfo widget --- .../scijava/batch/SwingScriptInfoWidget.java | 42 ++++--------------- 1 file changed, 9 insertions(+), 33 deletions(-) diff --git a/src/main/java/org/scijava/batch/SwingScriptInfoWidget.java b/src/main/java/org/scijava/batch/SwingScriptInfoWidget.java index ef277e7..0f3ed09 100644 --- a/src/main/java/org/scijava/batch/SwingScriptInfoWidget.java +++ b/src/main/java/org/scijava/batch/SwingScriptInfoWidget.java @@ -2,18 +2,16 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.io.File; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.swing.JComboBox; import javax.swing.JPanel; import org.scijava.Priority; -import org.scijava.convert.ConvertService; import org.scijava.log.LogService; -import org.scijava.module.Module; -import org.scijava.module.ModuleService; +import org.scijava.module.ModuleItem; import org.scijava.plugin.Parameter; import org.scijava.plugin.Plugin; import org.scijava.script.ScriptInfo; @@ -22,18 +20,15 @@ import org.scijava.widget.InputWidget; import org.scijava.widget.WidgetModel; -@Plugin(type = InputWidget.class, priority = Priority.NORMAL_PRIORITY) +@Plugin(type = InputWidget.class, priority = Priority.NORMAL) public class SwingScriptInfoWidget extends SwingInputWidget implements ActionListener, ScriptInfoWidget { @Parameter - private ScriptService scripts; + private ScriptService scriptService; @Parameter - private ModuleService modules; - - @Parameter - private ConvertService convert; + private BatchService batchService; @Parameter private LogService log; @@ -55,30 +50,11 @@ public void actionPerformed(final ActionEvent e) { public void set(final WidgetModel model) { super.set(model); - // get required class from style attribute - String style = model.getItem().getWidgetStyle(); - if (style == null) { - style = "java.io.File"; // default to File - } - Class inputType; - try { - inputType = Class.forName(style); - } catch (ClassNotFoundException exc) { - log.warn("Wrong style attribute: ", exc); - inputType = File.class; - } - // create script map - for (ScriptInfo script : scripts.getScripts()) { - Module scriptModule = modules.createModule(script); - for (String inputItem : scriptModule.getInputs().keySet()) { - // TODO consider replacing by isAssignableFrom - if (convert.supports(inputType, script.getInput(inputItem).getType())) { - //if (script.getInput(inputItem).getType().isAssignableFrom(inputType)) { - log.info("Support conversion from " + inputType + " to " + script.getInput(inputItem).getType()); - scriptMap.put(script.getMenuPath().getMenuString(), script); - break; - } + for (ScriptInfo script : scriptService.getScripts()) { + List> compatibleInputs = batchService.batchableInputs(script); + if (!compatibleInputs.isEmpty()) { + scriptMap.put(script.getMenuPath().getMenuString(), script); } }