Skip to content

Commit d94e0b8

Browse files
committed
ScriptInfo: lean on the new ParseService
1 parent 5f82f77 commit d94e0b8

File tree

2 files changed

+12
-41
lines changed

2 files changed

+12
-41
lines changed

src/main/java/org/scijava/script/DefaultScriptService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import org.scijava.module.Module;
6161
import org.scijava.module.ModuleService;
6262
import org.scijava.object.LazyObjects;
63+
import org.scijava.parse.ParseService;
6364
import org.scijava.plugin.AbstractSingletonService;
6465
import org.scijava.plugin.Parameter;
6566
import org.scijava.plugin.Plugin;
@@ -92,6 +93,9 @@ public class DefaultScriptService extends
9293
@Parameter
9394
private CommandService commandService;
9495

96+
@Parameter
97+
private ParseService parser;
98+
9599
@Parameter
96100
private LogService log;
97101

src/main/java/org/scijava/script/ScriptInfo.java

Lines changed: 8 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import java.io.StringReader;
4040
import java.text.SimpleDateFormat;
4141
import java.util.ArrayList;
42-
import java.util.Collections;
4342
import java.util.Date;
4443
import java.util.HashMap;
4544
import java.util.List;
@@ -58,9 +57,8 @@
5857
import org.scijava.module.AbstractModuleInfo;
5958
import org.scijava.module.DefaultMutableModuleItem;
6059
import org.scijava.module.ModuleException;
60+
import org.scijava.parse.ParseService;
6161
import org.scijava.plugin.Parameter;
62-
import org.scijava.sjep.Variable;
63-
import org.scijava.sjep.eval.DefaultEvaluator;
6462
import org.scijava.util.DigestUtils;
6563
import org.scijava.util.FileUtils;
6664

@@ -90,6 +88,9 @@ public class ScriptInfo extends AbstractModuleInfo implements Contextual {
9088
@Parameter
9189
private ScriptService scriptService;
9290

91+
@Parameter
92+
private ParseService parser;
93+
9394
@Parameter
9495
private ConvertService convertService;
9596

@@ -346,13 +347,13 @@ private void parseParam(final String param) throws ScriptException {
346347
else {
347348
final String cutParam =
348349
param.substring(0, lParen) + param.substring(rParen + 1);
349-
final String attrs = param.substring(lParen, rParen + 1);
350+
final String attrs = param.substring(lParen + 1, rParen);
350351
parseParam(cutParam, parseAttrs(attrs));
351352
}
352353
}
353354

354355
private void parseParam(final String param,
355-
final HashMap<String, Object> attrs) throws ScriptException
356+
final Map<String, Object> attrs) throws ScriptException
356357
{
357358
final String[] tokens = param.trim().split("[ \t\n]+");
358359
checkValid(tokens.length >= 1, param);
@@ -376,42 +377,8 @@ private void parseParam(final String param,
376377
}
377378

378379
/** Parses a comma-delimited list of {@code key=value} pairs into a map. */
379-
private HashMap<String, Object> parseAttrs(final String attrs)
380-
throws ScriptException
381-
{
382-
// NB: Parse the attributes using the SciJava Expression Parser.
383-
final DefaultEvaluator e = new DefaultEvaluator();
384-
try {
385-
final Object result = e.evaluate(attrs);
386-
if (result == null) throw new ScriptException("Unparseable attributes");
387-
final List<?> list;
388-
if (result instanceof List) list = (List<?>) result;
389-
else if (result instanceof Variable) {
390-
list = Collections.singletonList(result);
391-
}
392-
else {
393-
throw new ScriptException("Unexpected attributes type: " +
394-
result.getClass().getName());
395-
}
396-
397-
final HashMap<String, Object> attrsMap = new HashMap<String, Object>();
398-
for (final Object o : list) {
399-
if (o instanceof Variable) {
400-
final Variable v = (Variable) o;
401-
attrsMap.put(v.getToken(), e.value(v));
402-
}
403-
else {
404-
throw new ScriptException("Invalid attribute: " + o);
405-
}
406-
}
407-
return attrsMap;
408-
}
409-
catch (final IllegalArgumentException exc) {
410-
final ScriptException se = new ScriptException(
411-
"Error parsing attributes");
412-
se.initCause(exc);
413-
throw se;
414-
}
380+
private Map<String, Object> parseAttrs(final String attrs) {
381+
return parser.parse(attrs).asMap();
415382
}
416383

417384
private boolean isIOType(final String token) {

0 commit comments

Comments
 (0)