package mil.nga.giat.geowave.mapreduce.input;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.mapreduce.JobContext;
import java.util.Map;
import mil.nga.giat.geowave.core.index.ByteArrayUtils;
import mil.nga.giat.geowave.core.index.PersistenceUtils;
import mil.nga.giat.geowave.core.store.index.PrimaryIndex;
import mil.nga.giat.geowave.core.store.query.DistributableQuery;
import mil.nga.giat.geowave.core.store.query.QueryOptions;
import mil.nga.giat.geowave.mapreduce.GeoWaveConfiguratorBase;
/**
* This class provides utility methods for accessing job context configuration
* parameters that are specific to the GeoWaveInputFormat.
*/
public class GeoWaveInputConfigurator extends
GeoWaveConfiguratorBase
{
protected static enum InputConfig {
QUERY,
QUERY_OPTIONS,
MIN_SPLITS,
MAX_SPLITS,
OUTPUT_WRITABLE, // used to inform the input format to output a Writable
// from the HadoopDataAdapter
AUTHORIZATION
}
private static DistributableQuery getQueryInternal(
final Class<?> implementingClass,
final Configuration configuration ) {
final String queryStr = configuration.get(
enumToConfKey(
implementingClass,
InputConfig.QUERY),
"");
if ((queryStr != null) && !queryStr.isEmpty()) {
final byte[] queryBytes = ByteArrayUtils.byteArrayFromString(queryStr);
return PersistenceUtils.fromBinary(
queryBytes,
DistributableQuery.class);
}
return null;
}
private static QueryOptions getQueryOptionsInternal(
final Class<?> implementingClass,
final Configuration configuration ) {
final String queryStr = configuration.get(
enumToConfKey(
implementingClass,
InputConfig.QUERY_OPTIONS),
"");
if ((queryStr != null) && !queryStr.isEmpty()) {
final byte[] queryBytes = ByteArrayUtils.byteArrayFromString(queryStr);
return PersistenceUtils.fromBinary(
queryBytes,
QueryOptions.class);
}
return null;
}
private static Integer getMinimumSplitCountInternal(
final Class<?> implementingClass,
final Configuration configuration ) {
return getIntegerConfigInternal(
implementingClass,
configuration,
InputConfig.MIN_SPLITS);
}
private static Integer getMaximumSplitCountInternal(
final Class<?> implementingClass,
final Configuration configuration ) {
return getIntegerConfigInternal(
implementingClass,
configuration,
InputConfig.MAX_SPLITS);
}
private static Integer getIntegerConfigInternal(
final Class<?> implementingClass,
final Configuration configuration,
final InputConfig inputConfig ) {
final String str = configuration.get(
enumToConfKey(
implementingClass,
inputConfig),
"");
if ((str != null) && !str.isEmpty()) {
final Integer retVal = Integer.parseInt(str);
return retVal;
}
return null;
}
public static PrimaryIndex getIndex(
final Class<?> implementingClass,
final Configuration config ) {
final String input = config.get(enumToConfKey(
implementingClass,
GeoWaveConfg.INDEX));
if (input != null) {
final byte[] indexBytes = ByteArrayUtils.byteArrayFromString(input);
return PersistenceUtils.fromBinary(
indexBytes,
PrimaryIndex.class);
}
return null;
}
public static DistributableQuery getQuery(
final Class<?> implementingClass,
final JobContext context ) {
return getQueryInternal(
implementingClass,
getConfiguration(context));
}
public static void setQuery(
final Class<?> implementingClass,
final Configuration config,
final DistributableQuery query ) {
if (query != null) {
config.set(
enumToConfKey(
implementingClass,
InputConfig.QUERY),
ByteArrayUtils.byteArrayToString(PersistenceUtils.toBinary(query)));
}
else {
config.unset(enumToConfKey(
implementingClass,
InputConfig.QUERY));
}
}
public static QueryOptions getQueryOptions(
final Class<?> implementingClass,
final JobContext context ) {
return getQueryOptionsInternal(
implementingClass,
getConfiguration(context));
}
public static void setQueryOptions(
final Class<?> implementingClass,
final Configuration config,
final QueryOptions queryOptions ) {
if (queryOptions != null) {
config.set(
enumToConfKey(
implementingClass,
InputConfig.QUERY_OPTIONS),
ByteArrayUtils.byteArrayToString(PersistenceUtils.toBinary(queryOptions)));
}
else {
config.unset(enumToConfKey(
implementingClass,
InputConfig.QUERY_OPTIONS));
}
}
public static Integer getMinimumSplitCount(
final Class<?> implementingClass,
final JobContext context ) {
return getMinimumSplitCountInternal(
implementingClass,
getConfiguration(context));
}
public static void setMinimumSplitCount(
final Class<?> implementingClass,
final Configuration config,
final Integer minSplits ) {
if (minSplits != null) {
config.set(
enumToConfKey(
implementingClass,
InputConfig.MIN_SPLITS),
minSplits.toString());
}
else {
config.unset(enumToConfKey(
implementingClass,
InputConfig.MIN_SPLITS));
}
}
public static Integer getMaximumSplitCount(
final Class<?> implementingClass,
final JobContext context ) {
return getMaximumSplitCountInternal(
implementingClass,
getConfiguration(context));
}
public static void setMaximumSplitCount(
final Class<?> implementingClass,
final Configuration config,
final Integer maxSplits ) {
if (maxSplits != null) {
config.set(
enumToConfKey(
implementingClass,
InputConfig.MAX_SPLITS),
maxSplits.toString());
}
else {
config.unset(enumToConfKey(
implementingClass,
InputConfig.MAX_SPLITS));
}
}
}