}
protected TransferSettings createTransferSettingsFromOptions(OptionSet options, OptionSpec<String> optionPlugin,
OptionSpec<String> optionPluginOpts) throws Exception {
TransferPlugin plugin;
TransferSettings transferSettings;
// Parse --plugin and --plugin-option values
List<String> pluginOptionStrings = options.valuesOf(optionPluginOpts);
Map<String, String> knownPluginSettings = parsePluginSettingsFromOptions(pluginOptionStrings);
// Validation of some constraints
if (!options.has(optionPlugin) && knownPluginSettings.size() > 0) {
throw new IllegalArgumentException("Provided plugin settings without a plugin name.");
}
plugin = options.has(optionPlugin) ? initPlugin(options.valueOf(optionPlugin)) : askPlugin();
transferSettings = askPluginSettings(plugin.createEmptySettings(), knownPluginSettings);
return transferSettings;
}