protected <T> ModuleItem<T> asType(final ModuleItem<?> item, final Class<T> type) { if (!type.isAssignableFrom(item.getType())) { return null; } @SuppressWarnings("unchecked") final ModuleItem<T> typedItem = (ModuleItem<T>) item; return typedItem; }
@Override public boolean canProvide(ModuleItem<?> item) { // we can't provide inputs for saving files return item.getType() == File.class && !hasStyle(item, FileWidget.SAVE_STYLE); }
/** Converts the given object to a number matching the input type. */ private Number toNumber(final Object value) { final Class<?> type = item.getType(); final Class<?> saneType = Types.box(type); return NumberUtils.toNumber(value, saneType); }
/** Converts the given object to a number matching the input type. */ private Number toNumber(final Object value) { final Class<?> type = item.getType(); final Class<?> saneType = Types.box(type); return NumberUtils.toNumber(value, saneType); }
protected void scriptFileCallback() { if (scriptFile != null) { moduleInfo = scripts.getScript(scriptFile); int nCompatibleInputs = 0; for (ModuleItem<?> input : moduleInfo.inputs()) { if (convert.supports(new File(""), input.getType())) { nCompatibleInputs++; } } scriptMessage = "This script contains " + nCompatibleInputs + " compatible inputs."; } } }
@Override public Number getMax() { final Number max = toNumber(item.getMaximumValue()); if (max != null) return max; return NumberUtils.getMaximumNumber(item.getType()); }
@Override public Number getStepSize() { final Number stepSize = toNumber(item.getStepSize()); if (stepSize != null) return stepSize; return NumberUtils.toNumber("1", item.getType()); }
@Override public Number getMin() { final Number min = toNumber(item.getMinimumValue()); if (min != null) return min; return NumberUtils.getMinimumNumber(item.getType()); }
@Override public Number getMax() { final Number max = toNumber(item.getMaximumValue()); if (max != null) return max; return NumberUtils.getMaximumNumber(item.getType()); }
private boolean isSimple(final Module m, final ModuleItem<?> item) { final Class<?> type = item.getType(); return isSimpleType(type) || // // NB: The output is typed on Object -- maybe the default result output. // In this case, let's decide based on the actual value rather than type. type == Object.class && isSimpleValue(item.getValue(m)); }
@Override public Number getStepSize() { final Number stepSize = toNumber(item.getStepSize()); if (stepSize != null) return stepSize; return NumberUtils.toNumber("1", item.getType()); }
private <S extends Service> void setServiceValue(final Context context, final Module module, final ModuleItem<S> input) { final S service = context.getService(input.getType()); input.setValue(module, service); module.resolveInput(input.getName()); }
/** * Gets the given {@link ModuleInfo}'s list of inputs, excluding special ones * like {@link Service}s and {@link Context}s. */ public static List<ModuleItem<?>> inputs(final ModuleInfo info) { final List<ModuleItem<?>> inputs = asList(info.inputs()); return filter(inputs, input -> !isInjectable(input.getType())); }
private <S extends Service> void setServiceValue(final Context context, final Module module, final ModuleItem<S> input) { final S service = context.getService(input.getType()); input.setValue(module, service); module.resolveInput(input.getName()); }
private <T> void assignDefaultValue(final Module module, final ModuleItem<T> item) { if (module.isInputResolved(item.getName())) return; final T nullValue = Types.nullValue(item.getType()); if (!Objects.equals(item.getValue(module), nullValue)) return; final T defaultValue = moduleService.getDefaultValue(item); if (defaultValue == null) return; item.setValue(module, defaultValue); }
private <T> void assignDefaultValue(final Module module, final ModuleItem<T> item) { if (module.isInputResolved(item.getName())) return; final T nullValue = Types.nullValue(item.getType()); if (!Objects.equals(item.getValue(module), nullValue)) return; final T defaultValue = moduleService.getDefaultValue(item); if (defaultValue == null) return; item.setValue(module, defaultValue); }
@Override public <T> T load(final ModuleItem<T> item) { // if there is nothing to load from persistence return nothing if (!item.isPersisted()) return null; final String sValue = prefService.get(prefClass(item), prefKey(item)); // if persisted value has never been set before return null if (sValue == null) return null; return convertService.convert(sValue, item.getType()); }
@Override public <T> T load(final ModuleItem<T> item) { // if there is nothing to load from persistence return nothing if (!item.isPersisted()) return null; final String sValue = prefService.get(prefClass(item), prefKey(item)); // if persisted value has never been set before return null if (sValue == null) return null; return convertService.convert(sValue, item.getType()); }
/** Loads the value of the given module item from persistent storage. */ private <T> void loadValue(final Module module, final ModuleItem<T> item) { // skip input that has already been resolved if (module.isInputResolved(item.getName())) return; final T prefValue = moduleService.load(item); final Class<T> type = item.getType(); final T defaultValue = item.getValue(module); final T value = getBestValue(prefValue, defaultValue, type); item.setValue(module, value); }
private boolean inputTypesMatch(final OpCandidate candidate) { // check for assignment compatibility, including generics if (!matcher.typesMatch(candidate)) return false; // also check that raw types exactly match final Object[] paddedArgs = matcher.padArgs(candidate); int i = 0; for (final ModuleItem<?> input : candidate.inputs()) { final Object arg = paddedArgs[i++]; if (!typeMatches(arg, input.getType())) return false; } return true; }