Skip to content

Commit 6d4c785

Browse files
committed
Merge pull request #163 from scijava/script-values
Add default value support for module items and script parameters
2 parents 0abf0ec + 3fdc5df commit 6d4c785

File tree

7 files changed

+105
-1
lines changed

7 files changed

+105
-1
lines changed

src/main/java/org/scijava/module/AbstractModuleItem.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,11 @@ public String toString() {
7474
sm.append("persistKey", getPersistKey());
7575
sm.append("callback", getCallback());
7676
sm.append("widgetStyle", getWidgetStyle());
77+
sm.append("default", getDefaultValue());
7778
sm.append("min", getMinimumValue());
7879
sm.append("max", getMaximumValue());
80+
sm.append("softMin", getSoftMinimum());
81+
sm.append("softMax", getSoftMaximum());
7982
sm.append("stepSize", getStepSize(), NumberUtils.toNumber("1", getType()));
8083
sm.append("columnCount", getColumnCount(), 6);
8184
sm.append("choices", getChoices());
@@ -215,6 +218,11 @@ public String getWidgetStyle() {
215218
return null;
216219
}
217220

221+
@Override
222+
public T getDefaultValue() {
223+
return null;
224+
}
225+
218226
@Override
219227
public T getMinimumValue() {
220228
return null;

src/main/java/org/scijava/module/DefaultModuleService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,8 @@ public <T> T load(final ModuleItem<T> item) {
302302

303303
@Override
304304
public <T> T getDefaultValue(final ModuleItem<T> item) {
305+
final T defaultValue = item.getDefaultValue();
306+
if (defaultValue != null) return defaultValue;
305307
final T min = item.getMinimumValue();
306308
if (min != null) return min;
307309
final T softMin = item.getSoftMinimum();

src/main/java/org/scijava/module/DefaultMutableModuleItem.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public class DefaultMutableModuleItem<T> extends AbstractModuleItem<T>
5959
private String initializer;
6060
private String callback;
6161
private String widgetStyle;
62+
private T defaultValue;
6263
private T minimumValue;
6364
private T maximumValue;
6465
private T softMinimum;
@@ -171,6 +172,11 @@ public void setWidgetStyle(final String widgetStyle) {
171172
this.widgetStyle = widgetStyle;
172173
}
173174

175+
@Override
176+
public void setDefaultValue(final T defaultValue) {
177+
this.defaultValue = defaultValue;
178+
}
179+
174180
@Override
175181
public void setMinimumValue(final T minimumValue) {
176182
this.minimumValue = minimumValue;
@@ -259,6 +265,11 @@ public String getWidgetStyle() {
259265
return widgetStyle;
260266
}
261267

268+
@Override
269+
public T getDefaultValue() {
270+
return defaultValue;
271+
}
272+
262273
@Override
263274
public T getMinimumValue() {
264275
return minimumValue;

src/main/java/org/scijava/module/ModuleItem.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@ public interface ModuleItem<T> extends BasicDetails {
146146
*/
147147
String getWidgetStyle();
148148

149+
/** Gets the default value. */
150+
T getDefaultValue();
151+
149152
/** Gets the minimum allowed value (if applicable). */
150153
T getMinimumValue();
151154

src/main/java/org/scijava/module/MutableModuleItem.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ public interface MutableModuleItem<T> extends ModuleItem<T> {
6060

6161
void setWidgetStyle(String widgetStyle);
6262

63+
void setDefaultValue(T defaultValue);
64+
6365
void setMinimumValue(T minimumValue);
6466

6567
void setMaximumValue(T maximumValue);
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* #%L
3+
* SciJava Common shared library for SciJava software.
4+
* %%
5+
* Copyright (C) 2009 - 2015 Board of Regents of the University of
6+
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
7+
* Institute of Molecular Cell Biology and Genetics.
8+
* %%
9+
* Redistribution and use in source and binary forms, with or without
10+
* modification, are permitted provided that the following conditions are met:
11+
*
12+
* 1. Redistributions of source code must retain the above copyright notice,
13+
* this list of conditions and the following disclaimer.
14+
* 2. Redistributions in binary form must reproduce the above copyright notice,
15+
* this list of conditions and the following disclaimer in the documentation
16+
* and/or other materials provided with the distribution.
17+
*
18+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
22+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28+
* POSSIBILITY OF SUCH DAMAGE.
29+
* #L%
30+
*/
31+
32+
package org.scijava.module.process;
33+
34+
import org.scijava.Priority;
35+
import org.scijava.module.Module;
36+
import org.scijava.module.ModuleItem;
37+
import org.scijava.module.ModuleService;
38+
import org.scijava.plugin.Parameter;
39+
import org.scijava.plugin.Plugin;
40+
41+
/**
42+
* A preprocessor plugin that populates default parameter values.
43+
* <p>
44+
* Default values are determined using {@link ModuleService#getDefaultValue}.
45+
* </p>
46+
*
47+
* @author Curtis Rueden
48+
*/
49+
@Plugin(type = PreprocessorPlugin.class, priority = Priority.VERY_HIGH_PRIORITY)
50+
public class DefaultValuePreprocessor extends AbstractPreprocessorPlugin {
51+
52+
@Parameter
53+
private ModuleService moduleService;
54+
55+
// -- ModuleProcessor methods --
56+
57+
@Override
58+
public void process(final Module module) {
59+
for (final ModuleItem<?> input : module.getInfo().inputs()) {
60+
assignDefaultValue(module, input);
61+
}
62+
for (final ModuleItem<?> output : module.getInfo().outputs()) {
63+
assignDefaultValue(module, output);
64+
}
65+
}
66+
67+
// -- Helper methods --
68+
69+
private <T> void assignDefaultValue(final Module module,
70+
final ModuleItem<T> item)
71+
{
72+
if (module.isResolved(item.getName())) return;
73+
final T defaultValue = moduleService.getDefaultValue(item);
74+
if (defaultValue == null) return;
75+
item.setValue(module, defaultValue);
76+
}
77+
78+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ else if ("visibility".equalsIgnoreCase(key)) {
461461
item.setVisibility(convertService.convert(value, ItemVisibility.class));
462462
}
463463
else if ("value".equalsIgnoreCase(key)) {
464-
item.setWidgetStyle(value);
464+
item.setDefaultValue(convertService.convert(value, item.getType()));
465465
}
466466
else {
467467
throw new ScriptException("Invalid attribute name: " + key);

0 commit comments

Comments
 (0)