diff --git a/src/main/java/org/scijava/module/AbstractModuleItem.java b/src/main/java/org/scijava/module/AbstractModuleItem.java index 6d451c40d..678c08b3e 100644 --- a/src/main/java/org/scijava/module/AbstractModuleItem.java +++ b/src/main/java/org/scijava/module/AbstractModuleItem.java @@ -74,8 +74,11 @@ public String toString() { sm.append("persistKey", getPersistKey()); sm.append("callback", getCallback()); sm.append("widgetStyle", getWidgetStyle()); + sm.append("default", getDefaultValue()); sm.append("min", getMinimumValue()); sm.append("max", getMaximumValue()); + sm.append("softMin", getSoftMinimum()); + sm.append("softMax", getSoftMaximum()); sm.append("stepSize", getStepSize(), NumberUtils.toNumber("1", getType())); sm.append("columnCount", getColumnCount(), 6); sm.append("choices", getChoices()); @@ -215,6 +218,11 @@ public String getWidgetStyle() { return null; } + @Override + public T getDefaultValue() { + return null; + } + @Override public T getMinimumValue() { return null; diff --git a/src/main/java/org/scijava/module/DefaultModuleService.java b/src/main/java/org/scijava/module/DefaultModuleService.java index c6a53ad5d..aa05cfd99 100644 --- a/src/main/java/org/scijava/module/DefaultModuleService.java +++ b/src/main/java/org/scijava/module/DefaultModuleService.java @@ -302,6 +302,8 @@ public T load(final ModuleItem item) { @Override public T getDefaultValue(final ModuleItem item) { + final T defaultValue = item.getDefaultValue(); + if (defaultValue != null) return defaultValue; final T min = item.getMinimumValue(); if (min != null) return min; final T softMin = item.getSoftMinimum(); diff --git a/src/main/java/org/scijava/module/DefaultMutableModuleItem.java b/src/main/java/org/scijava/module/DefaultMutableModuleItem.java index 129718afd..1ff2d6bbe 100644 --- a/src/main/java/org/scijava/module/DefaultMutableModuleItem.java +++ b/src/main/java/org/scijava/module/DefaultMutableModuleItem.java @@ -59,6 +59,7 @@ public class DefaultMutableModuleItem extends AbstractModuleItem private String initializer; private String callback; private String widgetStyle; + private T defaultValue; private T minimumValue; private T maximumValue; private T softMinimum; @@ -171,6 +172,11 @@ public void setWidgetStyle(final String widgetStyle) { this.widgetStyle = widgetStyle; } + @Override + public void setDefaultValue(final T defaultValue) { + this.defaultValue = defaultValue; + } + @Override public void setMinimumValue(final T minimumValue) { this.minimumValue = minimumValue; @@ -259,6 +265,11 @@ public String getWidgetStyle() { return widgetStyle; } + @Override + public T getDefaultValue() { + return defaultValue; + } + @Override public T getMinimumValue() { return minimumValue; diff --git a/src/main/java/org/scijava/module/ModuleItem.java b/src/main/java/org/scijava/module/ModuleItem.java index b3096668a..1016ce653 100644 --- a/src/main/java/org/scijava/module/ModuleItem.java +++ b/src/main/java/org/scijava/module/ModuleItem.java @@ -146,6 +146,9 @@ public interface ModuleItem extends BasicDetails { */ String getWidgetStyle(); + /** Gets the default value. */ + T getDefaultValue(); + /** Gets the minimum allowed value (if applicable). */ T getMinimumValue(); diff --git a/src/main/java/org/scijava/module/MutableModuleItem.java b/src/main/java/org/scijava/module/MutableModuleItem.java index 0d9a236c9..efd681ed5 100644 --- a/src/main/java/org/scijava/module/MutableModuleItem.java +++ b/src/main/java/org/scijava/module/MutableModuleItem.java @@ -60,6 +60,8 @@ public interface MutableModuleItem extends ModuleItem { void setWidgetStyle(String widgetStyle); + void setDefaultValue(T defaultValue); + void setMinimumValue(T minimumValue); void setMaximumValue(T maximumValue); diff --git a/src/main/java/org/scijava/module/process/DefaultValuePreprocessor.java b/src/main/java/org/scijava/module/process/DefaultValuePreprocessor.java new file mode 100644 index 000000000..a4ee85713 --- /dev/null +++ b/src/main/java/org/scijava/module/process/DefaultValuePreprocessor.java @@ -0,0 +1,78 @@ +/* + * #%L + * SciJava Common shared library for SciJava software. + * %% + * Copyright (C) 2009 - 2015 Board of Regents of the University of + * Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck + * Institute of Molecular Cell Biology and Genetics. + * %% + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * #L% + */ + +package org.scijava.module.process; + +import org.scijava.Priority; +import org.scijava.module.Module; +import org.scijava.module.ModuleItem; +import org.scijava.module.ModuleService; +import org.scijava.plugin.Parameter; +import org.scijava.plugin.Plugin; + +/** + * A preprocessor plugin that populates default parameter values. + *

+ * Default values are determined using {@link ModuleService#getDefaultValue}. + *

+ * + * @author Curtis Rueden + */ +@Plugin(type = PreprocessorPlugin.class, priority = Priority.VERY_HIGH_PRIORITY) +public class DefaultValuePreprocessor extends AbstractPreprocessorPlugin { + + @Parameter + private ModuleService moduleService; + + // -- ModuleProcessor methods -- + + @Override + public void process(final Module module) { + for (final ModuleItem input : module.getInfo().inputs()) { + assignDefaultValue(module, input); + } + for (final ModuleItem output : module.getInfo().outputs()) { + assignDefaultValue(module, output); + } + } + + // -- Helper methods -- + + private void assignDefaultValue(final Module module, + final ModuleItem item) + { + if (module.isResolved(item.getName())) return; + final T defaultValue = moduleService.getDefaultValue(item); + if (defaultValue == null) return; + item.setValue(module, defaultValue); + } + +} diff --git a/src/main/java/org/scijava/script/ScriptInfo.java b/src/main/java/org/scijava/script/ScriptInfo.java index 7f7cc7799..6f7da6f76 100644 --- a/src/main/java/org/scijava/script/ScriptInfo.java +++ b/src/main/java/org/scijava/script/ScriptInfo.java @@ -461,7 +461,7 @@ else if ("visibility".equalsIgnoreCase(key)) { item.setVisibility(convertService.convert(value, ItemVisibility.class)); } else if ("value".equalsIgnoreCase(key)) { - item.setWidgetStyle(value); + item.setDefaultValue(convertService.convert(value, item.getType())); } else { throw new ScriptException("Invalid attribute name: " + key);