package mil.nga.giat.geowave.analytic; import org.apache.hadoop.conf.Configuration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import mil.nga.giat.geowave.core.index.ByteArrayUtils; import mil.nga.giat.geowave.mapreduce.GeoWaveConfiguratorBase; public class ScopedJobConfiguration { protected static final Logger LOGGER = LoggerFactory.getLogger(ScopedJobConfiguration.class); private final Configuration jobConfiguration; private final Class<?> scope; private Logger logger = LOGGER; public ScopedJobConfiguration( final Configuration jobConfiguration, final Class<?> scope ) { super(); this.jobConfiguration = jobConfiguration; this.scope = scope; } public ScopedJobConfiguration( final Configuration jobConfiguration, final Class<?> scope, final Logger logger ) { super(); this.jobConfiguration = jobConfiguration; this.scope = scope; this.logger = logger; } public int getInt( final Enum<?> property, final int defaultValue ) { final String propName = GeoWaveConfiguratorBase.enumToConfKey( scope, property); if (jobConfiguration.getRaw(propName) == null) { logger.warn("Using default for property " + propName); } final int v = jobConfiguration.getInt( propName, defaultValue); return v; } public String getString( final Enum<?> property, final String defaultValue ) { final String propName = GeoWaveConfiguratorBase.enumToConfKey( scope, property); if (jobConfiguration.getRaw(propName) == null) { logger.warn("Using default for property " + propName); } return jobConfiguration.get( propName, defaultValue); } public <T> T getInstance( final Enum<?> property, final Class<T> iface, final Class<? extends T> defaultValue ) throws InstantiationException, IllegalAccessException { try { final String propName = GeoWaveConfiguratorBase.enumToConfKey( scope, property); if (jobConfiguration.getRaw(propName) == null) { if (defaultValue == null) { return null; } logger.warn("Using default for property " + propName); } return jobConfiguration.getClass( GeoWaveConfiguratorBase.enumToConfKey( scope, property), defaultValue, iface).newInstance(); } catch (final Exception ex) { logger.error("Cannot instantiate " + GeoWaveConfiguratorBase.enumToConfKey( scope, property)); throw ex; } } public double getDouble( final Enum<?> property, final double defaultValue ) { final String propName = GeoWaveConfiguratorBase.enumToConfKey( scope, property); if (jobConfiguration.getRaw(propName) == null) { logger.warn("Using default for property " + propName); } return jobConfiguration.getDouble( propName, defaultValue); } public byte[] getBytes( final Enum<?> property ) { final String propName = GeoWaveConfiguratorBase.enumToConfKey( scope, property); final String data = jobConfiguration.getRaw(propName); if (data == null) { logger.error(propName + " not found "); } return ByteArrayUtils.byteArrayFromString(data); } }