private void askNormalPluginSettings(TransferSettings settings, TransferPluginOption option, Map<String, String> knownPluginSettings, String nestPrefix) throws StorageException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { TransferPluginOptionCallback optionCallback = createOptionCallback(settings, option.getCallback()); TransferPluginOptionConverter optionConverter = createOptionConverter(settings, option.getConverter()); if (!isInteractive && !knownPluginSettings.containsKey(nestPrefix + option.getName())) { throw new IllegalArgumentException("Missing plugin option (" + nestPrefix + option.getName() + ") in non-interactive mode."); } else if (knownPluginSettings.containsKey(nestPrefix + option.getName())) { settings.setField(option.getField().getName(), knownPluginSettings.get(nestPrefix + option.getName())); } else if (!option.isVisible()) { // Do nothing. Invisible option! } else { callAndPrintPreQueryCallback(optionCallback); String optionValue = askPluginOption(settings, option); if (optionConverter != null) { optionValue = optionConverter.convert(optionValue); } settings.setField(option.getField().getName(), optionValue); callAndPrintPostQueryCallback(optionCallback, optionValue); } }
/** * Asks the user for all of the child plugin's settings. * * <p>This case is triggered by a field looking like this: * <tt>private LocalTransferSettings localChildPluginSettings;</tt> */ private void askConreteChildPluginSettings(TransferSettings settings, NestedTransferPluginOption option, Map<String, String> knownPluginSettings, String nestPrefix) throws StorageException, IllegalAccessException, InstantiationException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { TransferPluginOptionCallback optionCallback = createOptionCallback(settings, option.getCallback()); if (isInteractive) { callAndPrintPreQueryCallback(optionCallback); out.println(); out.println(option.getDescription() + ":"); } for (TransferPluginOption nestedPluginOption : option.getOptions()) { Class<?> nestedTransferSettingsClass = ReflectionUtil.getClassFromType(option.getType()); if (nestedTransferSettingsClass == null) { throw new RuntimeException("No class found for type: " + option.getType()); } TransferSettings nestedSettings = (TransferSettings) nestedTransferSettingsClass.newInstance(); settings.setField(option.getField().getName(), nestedSettings); nestPrefix = nestPrefix + option.getName() + NESTED_OPTIONS_SEPARATOR; askPluginSettings(nestedSettings, nestedPluginOption, knownPluginSettings, nestPrefix); } if (isInteractive) { callAndPrintPostQueryCallback(optionCallback, null); } }
settings.setField(option.getField().getName(), childSettings); nestPrefix = nestPrefix + option.getName() + NESTED_OPTIONS_SEPARATOR;