|
54 | 54 | import org.scijava.plugin.Parameter; |
55 | 55 | import org.scijava.plugin.Plugin; |
56 | 56 | import org.scijava.plugin.PluginService; |
| 57 | +import org.scijava.prefs.PrefService; |
57 | 58 | import org.scijava.service.AbstractService; |
58 | 59 | import org.scijava.service.Service; |
59 | 60 | import org.scijava.thread.ThreadService; |
@@ -87,6 +88,9 @@ public class DefaultModuleService extends AbstractService implements |
87 | 88 | @Parameter |
88 | 89 | private ThreadService threadService; |
89 | 90 |
|
| 91 | + @Parameter |
| 92 | + private PrefService prefService; |
| 93 | + |
90 | 94 | /** Index of registered modules. */ |
91 | 95 | private ModuleIndex moduleIndex; |
92 | 96 |
|
@@ -255,6 +259,54 @@ public <T> ModuleItem<T> getSingleOutput(final Module module, |
255 | 259 | return getSingleItem(module, type, module.getInfo().outputs()); |
256 | 260 | } |
257 | 261 |
|
| 262 | + @Override |
| 263 | + public <T> void save(final ModuleItem<T> item, final T value) { |
| 264 | + if (!item.isPersisted()) return; |
| 265 | + |
| 266 | + final String sValue = value == null ? "" : value.toString(); |
| 267 | + |
| 268 | + // do not persist if object cannot be converted back from a string |
| 269 | + if (!ConversionUtils.canConvert(sValue, item.getType())) return; |
| 270 | + |
| 271 | + final String persistKey = item.getPersistKey(); |
| 272 | + if (persistKey == null || persistKey.isEmpty()) { |
| 273 | + // Attempt to use prefService |
| 274 | + if (AbstractModuleItem.class.isAssignableFrom(item.getClass())) { |
| 275 | + final Class<?> prefClass = ((AbstractModuleItem<T>)item).getDelegateClass(); |
| 276 | + final String prefKey = item.getName(); |
| 277 | + prefService.put(prefClass, prefKey, sValue); |
| 278 | + } |
| 279 | + // Have to use ModuleItem#saveValue |
| 280 | + else item.saveValue(value); |
| 281 | + } |
| 282 | + else prefService.put(persistKey, sValue); |
| 283 | + } |
| 284 | + |
| 285 | + @Override |
| 286 | + public <T> T load(final ModuleItem<T> item) { |
| 287 | + // if there is nothing to load from persistence return nothing |
| 288 | + if (!item.isPersisted()) return null; |
| 289 | + |
| 290 | + final String sValue; |
| 291 | + final String persistKey = item.getPersistKey(); |
| 292 | + if (persistKey == null || persistKey.isEmpty()) { |
| 293 | + // Attempt to use prefService |
| 294 | + if (AbstractModuleItem.class.isAssignableFrom(item.getClass())) { |
| 295 | + final Class<?> prefClass = ((AbstractModuleItem<T>)item).getDelegateClass(); |
| 296 | + final String prefKey = item.getName(); |
| 297 | + sValue = prefService.get(prefClass, prefKey); |
| 298 | + } |
| 299 | + // Have to use ModuleItem#loadValue |
| 300 | + else return item.loadValue(); |
| 301 | + } |
| 302 | + else sValue = prefService.get(persistKey); |
| 303 | + |
| 304 | + // if persisted value has never been set before return null |
| 305 | + if (sValue == null) return null; |
| 306 | + |
| 307 | + return ConversionUtils.convert(sValue, item.getType()); |
| 308 | + } |
| 309 | + |
258 | 310 | // -- Service methods -- |
259 | 311 |
|
260 | 312 | @Override |
@@ -383,5 +435,4 @@ private <T> ModuleItem<T> getSingleItem(final Module module, |
383 | 435 | } |
384 | 436 | return result; |
385 | 437 | } |
386 | | - |
387 | 438 | } |
0 commit comments