package mil.nga.giat.geowave.analytic.mapreduce;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import mil.nga.giat.geowave.analytic.PropertyManagement;
import mil.nga.giat.geowave.analytic.clustering.ClusteringUtils;
import mil.nga.giat.geowave.analytic.param.ExtractParameters;
import mil.nga.giat.geowave.analytic.param.FormatConfiguration;
import mil.nga.giat.geowave.analytic.param.ParameterEnum;
import mil.nga.giat.geowave.analytic.param.StoreParameters.StoreParam;
import mil.nga.giat.geowave.analytic.store.PersistableStore;
import mil.nga.giat.geowave.core.index.ByteArrayId;
import mil.nga.giat.geowave.core.index.StringUtils;
import mil.nga.giat.geowave.core.store.adapter.DataAdapter;
import mil.nga.giat.geowave.core.store.index.PrimaryIndex;
import mil.nga.giat.geowave.core.store.operations.remote.options.DataStorePluginOptions;
import mil.nga.giat.geowave.core.store.query.DistributableQuery;
import mil.nga.giat.geowave.core.store.query.QueryOptions;
import mil.nga.giat.geowave.mapreduce.input.GeoWaveInputFormat;
public class GeoWaveInputFormatConfiguration implements
FormatConfiguration
{
protected boolean isDataWritable = false;
protected List<DataAdapter<?>> adapters = new ArrayList<DataAdapter<?>>();
protected List<PrimaryIndex> indices = new ArrayList<PrimaryIndex>();
public GeoWaveInputFormatConfiguration() {
}
@Override
public void setup(
final PropertyManagement runTimeProperties,
final Configuration configuration )
throws Exception {
final DataStorePluginOptions dataStoreOptions = ((PersistableStore) runTimeProperties
.getProperty(StoreParam.INPUT_STORE)).getDataStoreOptions();
GeoWaveInputFormat.setStoreOptions(
configuration,
dataStoreOptions);
final DistributableQuery query = runTimeProperties.getPropertyAsQuery(ExtractParameters.Extract.QUERY);
if (query != null) {
GeoWaveInputFormat.setQuery(
configuration,
query);
}
final QueryOptions queryoptions = runTimeProperties
.getPropertyAsQueryOptions(ExtractParameters.Extract.QUERY_OPTIONS);
if (queryoptions != null) {
GeoWaveInputFormat.setQueryOptions(
configuration,
queryoptions);
}
final int minInputSplits = runTimeProperties.getPropertyAsInt(
ExtractParameters.Extract.MIN_INPUT_SPLIT,
-1);
if (minInputSplits > 0) {
GeoWaveInputFormat.setMinimumSplitCount(
configuration,
minInputSplits);
}
final int maxInputSplits = runTimeProperties.getPropertyAsInt(
ExtractParameters.Extract.MAX_INPUT_SPLIT,
-1);
if (maxInputSplits > 0) {
GeoWaveInputFormat.setMaximumSplitCount(
configuration,
maxInputSplits);
}
GeoWaveInputFormat.setIsOutputWritable(
configuration,
isDataWritable);
}
public void addDataAdapter(
final DataAdapter<?> adapter ) {
adapters.add(adapter);
}
public void addIndex(
final PrimaryIndex index ) {
indices.add(index);
}
@Override
public Class<?> getFormatClass() {
return GeoWaveInputFormat.class;
}
@Override
public boolean isDataWritable() {
return isDataWritable;
}
@Override
public void setDataIsWritable(
final boolean isWritable ) {
isDataWritable = isWritable;
}
@Override
public List<ParameterEnum<?>> getParameters() {
return Arrays.asList(new ParameterEnum<?>[] {
ExtractParameters.Extract.QUERY_OPTIONS,
ExtractParameters.Extract.QUERY,
ExtractParameters.Extract.MAX_INPUT_SPLIT,
ExtractParameters.Extract.MIN_INPUT_SPLIT,
StoreParam.INPUT_STORE
});
}
}