package mil.nga.giat.geowave.core.store.config; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import mil.nga.giat.geowave.core.cli.prefix.JCommanderPrefixTranslator; import mil.nga.giat.geowave.core.cli.prefix.JCommanderPropertiesTransformer; import mil.nga.giat.geowave.core.cli.prefix.JCommanderTranslationMap; import mil.nga.giat.geowave.core.cli.prefix.TranslationEntry; import mil.nga.giat.geowave.core.store.GeoWaveStoreFinder; import mil.nga.giat.geowave.core.store.StoreFactoryOptions; public class ConfigUtils { public static String cleanOptionName( String name ) { name = name.trim().toLowerCase( Locale.ENGLISH).replaceAll( " ", "_"); name = name.replaceAll( ",", ""); return name; } public static StringBuilder getOptions( final Collection<String> strs, final String prefixStr ) { final StringBuilder builder = new StringBuilder(); for (final String str : strs) { if (builder.length() > 0) { builder.append(","); } else { builder.append(prefixStr); } builder.append( "'").append( cleanOptionName(str)).append( "'"); } return builder; } public static StringBuilder getOptions( final Collection<String> strs ) { return getOptions( strs, "Options include: "); } /** * This method will use the parameter descriptions from JCommander to * create/populate an AbstractConfigOptions map. */ public static ConfigOption[] createConfigOptionsFromJCommander( final Object createOptionsInstance, boolean includeHidden ) { ConfigOption[] opts = null; if (createOptionsInstance != null) { final JCommanderPrefixTranslator translator = new JCommanderPrefixTranslator(); translator.addObject(createOptionsInstance); final JCommanderTranslationMap map = translator.translate(); final Collection<TranslationEntry> entries = map.getEntries().values(); final List<ConfigOption> options = new ArrayList<ConfigOption>(); for (final TranslationEntry entry : entries) { if (includeHidden || !entry.isHidden()) { final ConfigOption opt = new ConfigOption( entry.getAsPropertyName(), entry.getDescription(), !entry.isRequired(), entry.getParam().getType()); opt.setPassword(entry.isPassword()); options.add(opt); } } opts = options.toArray(new ConfigOption[options.size()]); } else { opts = new ConfigOption[0]; } return opts; } /** * Take the given options and populate the given options list. This is * JCommander specific. */ public static <T extends StoreFactoryOptions> T populateOptionsFromList( final T optionsObject, final Map<String, String> optionList ) { if (optionsObject != null) { final JCommanderPropertiesTransformer translator = new JCommanderPropertiesTransformer(); translator.addObject(optionsObject); translator.transformFromMap(optionList); } return optionsObject; } /** * Take the given options and populate the given options list. This is * JCommander specific. */ public static Map<String, String> populateListFromOptions( final StoreFactoryOptions optionsObject ) { final Map<String, String> mapOptions = new HashMap<String, String>(); if (optionsObject != null) { final JCommanderPropertiesTransformer translator = new JCommanderPropertiesTransformer(); translator.addObject(optionsObject); translator.transformToMap(mapOptions); mapOptions.put( GeoWaveStoreFinder.STORE_HINT_KEY, optionsObject.getStoreFactory().getType()); } return mapOptions; } }