Skip to content

Commit 1cf0e29

Browse files
committed
ConsoleUtils: attempt to match singleton params
It is not practical to require users to know the names of script parameters to call the script. If script params are mapped with =, great. If not, we can try to match them with the parameters of the script. NB: this requires that script parameters be written in a reasonable ordering, such that user-supplied params come before system-supplied params.
1 parent 88775ec commit 1cf0e29

File tree

3 files changed

+27
-5
lines changed

3 files changed

+27
-5
lines changed

src/main/java/org/scijava/command/console/RunArgument.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ private void run(final String commandToRun, final String optionString) {
100100
return;
101101

102102
// TODO: parse the optionString a la ImageJ1
103-
final Map<String, Object> inputMap = ConsoleUtils.parseParameterString(optionString, logService);
103+
final Map<String, Object> inputMap = ConsoleUtils.parseParameterString(optionString, info, logService);
104104

105105
try {
106106
commandService.run(info, true, inputMap).get();

src/main/java/org/scijava/console/ConsoleUtils.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,13 @@
3131
package org.scijava.console;
3232

3333
import java.util.HashMap;
34+
import java.util.Iterator;
3435
import java.util.Map;
3536

37+
import org.scijava.command.CommandInfo;
3638
import org.scijava.log.LogService;
39+
import org.scijava.module.ModuleInfo;
40+
import org.scijava.module.ModuleItem;
3741

3842
/**
3943
* Helper class for {@link ConsoleArgument}s.
@@ -43,24 +47,40 @@
4347
public final class ConsoleUtils {
4448

4549
public static Map<String, Object> parseParameterString(final String parameterString) {
46-
return parseParameterString(parameterString, null);
50+
return parseParameterString(parameterString, (CommandInfo)null);
51+
}
52+
53+
public static Map<String, Object> parseParameterString(final String parameterString, final ModuleInfo info) {
54+
return parseParameterString(parameterString, info, null);
4755
}
4856

4957
public static Map<String, Object> parseParameterString(final String parameterString, final LogService logService) {
58+
return parseParameterString(parameterString, null, logService);
59+
}
60+
61+
public static Map<String, Object> parseParameterString(final String parameterString, final ModuleInfo info, final LogService logService) {
5062
final Map<String, Object> inputMap = new HashMap<String, Object>();
5163

5264
if (!parameterString.isEmpty()) {
65+
Iterator<ModuleItem<?>> inputs = null;
66+
if (info != null) {
67+
inputs = info.inputs().iterator();
68+
}
5369
final String[] pairs = parameterString.split(",");
5470
for (final String pair : pairs) {
5571
final String[] split = pair.split("=");
5672
if (split.length == 2)
5773
inputMap.put(split[0], split[1]);
74+
else if (inputs != null && inputs.hasNext() && split.length == 1) {
75+
inputMap.put(inputs.next().getName(), split[0]);
76+
}
5877
else if (logService != null)
5978
logService.error("Parameters must be formatted as a comma-separated list of key=value pairs");
6079

6180
}
6281
}
6382

6483
return inputMap;
84+
6585
}
6686
}

src/main/java/org/scijava/script/console/RunScriptArgument.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.scijava.log.LogService;
4141
import org.scijava.plugin.Parameter;
4242
import org.scijava.plugin.Plugin;
43+
import org.scijava.script.ScriptInfo;
4344
import org.scijava.script.ScriptService;
4445

4546
/**
@@ -97,11 +98,12 @@ private void run(final String scriptToRun, final String paramString) {
9798
if (script == null)
9899
return;
99100

100-
// TODO: parse the optionString a la ImageJ1
101-
final Map<String, Object> inputMap = ConsoleUtils.parseParameterString(paramString, logService);
101+
final ScriptInfo info = scriptService.getScript(script);
102+
103+
final Map<String, Object> inputMap = ConsoleUtils.parseParameterString(paramString, info, logService);
102104

103105
try {
104-
scriptService.run(script, true, inputMap).get();
106+
scriptService.run(info, true, inputMap).get();
105107
} catch (final Exception exc) {
106108
logService.error(exc);
107109
}

0 commit comments

Comments
 (0)