◐ Shell
reader mode source ↗
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
File filter
Conversations
Jump to
Diff view
Apply and reload
Show whitespace
Diff view
Apply and reload
53 changes: 52 additions & 1 deletion src/main/java/org/scijava/module/DefaultModuleService.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
import org.scijava.plugin.Parameter;
import org.scijava.plugin.Plugin;
import org.scijava.plugin.PluginService;
import org.scijava.service.AbstractService;
import org.scijava.service.Service;
import org.scijava.thread.ThreadService;
Expand Down Expand Up @@ -87,6 +88,9 @@ public class DefaultModuleService extends AbstractService implements
@Parameter
private ThreadService threadService;

/** Index of registered modules. */
private ModuleIndex moduleIndex;

Expand Down Expand Up @@ -255,6 +259,54 @@ public <T> ModuleItem<T> getSingleOutput(final Module module,
return getSingleItem(module, type, module.getInfo().outputs());
}

// -- Service methods --

@Override
Expand Down Expand Up @@ -383,5 +435,4 @@ private <T> ModuleItem<T> getSingleItem(final Module module,
}
return result;
}

}
8 changes: 8 additions & 0 deletions src/main/java/org/scijava/module/ModuleItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,21 @@ public interface ModuleItem<T> extends BasicDetails {
* Note that this is different than obtaining a module instance's current
* value for the input; see {@link #getValue(Module)} for that.
* </p>
*/
T loadValue();

/**
* Saves the given value to persistent storage. This allows later restoration
* of the value via {@link #loadValue()}, even from a different JVM.
*/
void saveValue(T value);

/** Gets the function that is called to initialize the item's value. */
Expand Down
12 changes: 12 additions & 0 deletions src/main/java/org/scijava/module/ModuleService.java
Original file line number Diff line number Diff line change
@@ -42,6 +42,7 @@
import org.scijava.module.process.ModulePreprocessor;
import org.scijava.module.process.PostprocessorPlugin;
import org.scijava.module.process.PreprocessorPlugin;
import org.scijava.service.SciJavaService;

/**
Expand Up @@ -273,4 +274,15 @@ <M extends Module> Future<M> run(M module,
*/
<T> ModuleItem<T> getSingleOutput(Module module, Class<T> type);

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
import org.scijava.Priority;
import org.scijava.module.Module;
import org.scijava.module.ModuleItem;
import org.scijava.plugin.Plugin;

/**
@@ -51,6 +53,9 @@
priority = Priority.VERY_LOW_PRIORITY - 1)
public class SaveInputsPreprocessor extends AbstractPreprocessorPlugin {

// -- ModuleProcessor methods --

@Override
Expand All @@ -66,7 +71,7 @@ public void process(final Module module) {
/** Saves the value of the given module item to persistent storage. */
private <T> void saveValue(final Module module, final ModuleItem<T> item) {
final T value = item.getValue(module);
item.saveValue(value);
}

}
15 changes: 11 additions & 4 deletions src/main/java/org/scijava/options/OptionsPlugin.java
Original file line number Diff line number Diff line change
@@ -34,10 +34,11 @@
import org.scijava.command.DynamicCommand;
import org.scijava.event.EventService;
import org.scijava.module.ModuleItem;
import org.scijava.options.event.OptionsEvent;
import org.scijava.plugin.Parameter;
import org.scijava.plugin.SingletonPlugin;
import org.scijava.util.Prefs;

// TODO - outline for how to address issues with options (initializing, aggregating into 1 dialog)

Expand Down @@ -77,6 +78,12 @@ public class OptionsPlugin extends DynamicCommand implements SingletonPlugin {
@Parameter
protected EventService eventService;

// -- OptionsPlugin methods --

/** Loads option values from persistent storage. */
Expand All @@ -95,7 +102,7 @@ public void save() {

/** Clears option values from persistent storage. */
public void reset() {
Prefs.clear(getClass());
}

// -- Runnable methods --
Expand All @@ -116,13 +123,13 @@ public void run() {
// -- Helper methods --

private <T> void loadInput(final ModuleItem<T> input) {
final T value = input.loadValue();
if (value != null) input.setValue(this, value);
}

private <T> void saveInput(final ModuleItem<T> input) {
final T value = input.getValue(this);
input.saveValue(value);
}

}
53 changes: 53 additions & 0 deletions src/main/java/org/scijava/prefs/AbstractPrefService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
Loading
Toggle all file notes Toggle all file annotations