package mil.nga.giat.geowave.analytic.mapreduce.operations.options;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.ParametersDelegate;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import mil.nga.giat.geowave.analytic.param.CommonParameters;
import mil.nga.giat.geowave.analytic.param.ExtractParameters;
import mil.nga.giat.geowave.analytic.param.OutputParameters;
import mil.nga.giat.geowave.analytic.param.InputParameters;
import mil.nga.giat.geowave.analytic.param.MapReduceParameters;
import mil.nga.giat.geowave.analytic.param.annotations.CommonParameter;
import mil.nga.giat.geowave.analytic.param.annotations.ExtractParameter;
import mil.nga.giat.geowave.analytic.param.annotations.InputParameter;
import mil.nga.giat.geowave.analytic.param.annotations.MapReduceParameter;
import mil.nga.giat.geowave.analytic.param.annotations.OutputParameter;
import mil.nga.giat.geowave.core.cli.annotations.PrefixParameter;
import mil.nga.giat.geowave.core.index.ByteArrayId;
import mil.nga.giat.geowave.core.store.query.QueryOptions;
public class CommonOptions
{
@MapReduceParameter(MapReduceParameters.MRConfig.CONFIG_FILE)
@Parameter(names = {
"-conf",
"--mapReduceConfigFile"
}, description = "MapReduce Configuration")
private String mapReduceConfigFile;
@MapReduceParameter(MapReduceParameters.MRConfig.HDFS_BASE_DIR)
@Parameter(names = {
"-hdfsbase",
"--mapReduceHdfsBaseDir"
}, required = true, description = "Fully qualified path to the base directory in hdfs")
private String mapReduceHdfsBaseDir;
@MapReduceParameter(MapReduceParameters.MRConfig.HDFS_HOST_PORT)
@Parameter(names = {
"-hdfs",
"--mapReduceHdfsHostPort"
}, required = true, description = "HDFS hostname and port in the format hostname:port")
private String mapReduceHdfsHostPort;
@MapReduceParameter(MapReduceParameters.MRConfig.JOBTRACKER_HOST_PORT)
@Parameter(names = {
"-jobtracker",
"--mapReduceJobtrackerHostPort"
}, description = "[REQUIRED (or resourceman)] Hadoop job tracker hostname and port in the format hostname:port")
private String mapReduceJobtrackerHostPort;
@MapReduceParameter(MapReduceParameters.MRConfig.YARN_RESOURCE_MANAGER)
@Parameter(names = {
"-resourceman",
"--mapReduceYarnResourceManager"
}, description = "[REQUIRED (or jobtracker)] Yarn resource manager hostname and port in the format hostname:port")
private String mapReduceYarnResourceManager;
@CommonParameter(CommonParameters.Common.DISTANCE_FUNCTION_CLASS)
@Parameter(names = {
"-cdf",
"--commonDistanceFunctionClass"
}, description = "Distance Function Class implements mil.nga.giat.geowave.analytics.distance.DistanceFn")
private String commonDistanceFunctionClass;
@ParametersDelegate
@PrefixParameter(prefix = "query")
private QueryOptionsCommand queryOptions = new QueryOptionsCommand();
@ExtractParameter(ExtractParameters.Extract.MAX_INPUT_SPLIT)
@Parameter(names = {
"-emx",
"--extractMaxInputSplit"
}, required = true, description = "Maximum hdfs input split size")
private String extractMaxInputSplit;
@ExtractParameter(ExtractParameters.Extract.MIN_INPUT_SPLIT)
@Parameter(names = {
"-emn",
"--extractMinInputSplit"
}, required = true, description = "Minimum hdfs input split size")
private String extractMinInputSplit;
@ExtractParameter(ExtractParameters.Extract.QUERY)
@Parameter(names = {
"-eq",
"--extractQuery"
}, description = "Query")
private String extractQuery;
@OutputParameter(OutputParameters.Output.OUTPUT_FORMAT)
@Parameter(names = {
"-ofc",
"--outputOutputFormat"
}, description = "Output Format Class")
private String outputOutputFormat;
@InputParameter(InputParameters.Input.INPUT_FORMAT)
@Parameter(names = {
"-ifc",
"--inputFormatClass"
}, description = "Input Format Class")
private String inputFormatClass;
@InputParameter(InputParameters.Input.HDFS_INPUT_PATH)
@Parameter(names = {
"-iip",
"--inputHdfsPath"
}, hidden = true, description = "Input Path")
private String inputHdfsPath;
@OutputParameter(OutputParameters.Output.REDUCER_COUNT)
@Parameter(names = {
"-orc",
"--outputReducerCount"
}, description = "Number of Reducers For Output")
private String outputReducerCount;
public String getCommonDistanceFunctionClass() {
return commonDistanceFunctionClass;
}
public void setCommonDistanceFunctionClass(
String commonDistanceFunctionClass ) {
this.commonDistanceFunctionClass = commonDistanceFunctionClass;
}
public QueryOptionsCommand getQueryOptions() {
return queryOptions;
}
public void setQueryOptions(
QueryOptionsCommand extractQueryOptions ) {
this.queryOptions = extractQueryOptions;
}
public String getExtractMaxInputSplit() {
return extractMaxInputSplit;
}
public void setExtractMaxInputSplit(
String extractMaxInputSplit ) {
this.extractMaxInputSplit = extractMaxInputSplit;
}
public String getExtractMinInputSplit() {
return extractMinInputSplit;
}
public void setExtractMinInputSplit(
String extractMinInputSplit ) {
this.extractMinInputSplit = extractMinInputSplit;
}
public String getExtractQuery() {
return extractQuery;
}
public void setExtractQuery(
String extractQuery ) {
this.extractQuery = extractQuery;
}
public String getOutputOutputFormat() {
return outputOutputFormat;
}
public void setOutputOutputFormat(
String outputOutputFormat ) {
this.outputOutputFormat = outputOutputFormat;
}
public String getOutputReducerCount() {
return outputReducerCount;
}
public void setOutputReducerCount(
String outputReducerCount ) {
this.outputReducerCount = outputReducerCount;
}
public String getInputFormatClass() {
return inputFormatClass;
}
public void setInputFormatClass(
String inputFormatClass ) {
this.inputFormatClass = inputFormatClass;
}
public String getInputHdfsPath() {
return inputHdfsPath;
}
public void setInputHdfsPath(
String inputHdfsPath ) {
this.inputHdfsPath = inputHdfsPath;
}
/**
* Build the query options from the command line arguments.
*
* @return
*/
public QueryOptions buildQueryOptions() {
final QueryOptions options = new QueryOptions();
if (queryOptions.getAdapterIds() != null && queryOptions.getAdapterIds().size() > 0)
options.setAdapter(Lists.transform(
queryOptions.getAdapterIds(),
new Function<String, ByteArrayId>() {
@Override
public ByteArrayId apply(
String input ) {
return new ByteArrayId(
input);
}
}));
if (queryOptions.getAuthorizations() != null) {
options.setAuthorizations(this.queryOptions.getAuthorizations().toArray(
new String[this.queryOptions.getAuthorizations().size()]));
}
if (queryOptions.getIndexId() != null) {
options.setIndexId(new ByteArrayId(
queryOptions.getIndexId()));
}
return options;
}
public String getMapReduceConfigFile() {
return mapReduceConfigFile;
}
public void setMapReduceConfigFile(
String mapReduceConfigFile ) {
this.mapReduceConfigFile = mapReduceConfigFile;
}
public String getMapReduceHdfsBaseDir() {
return mapReduceHdfsBaseDir;
}
public void setMapReduceHdfsBaseDir(
String mapReduceHdfsBaseDir ) {
this.mapReduceHdfsBaseDir = mapReduceHdfsBaseDir;
}
public String getMapReduceHdfsHostPort() {
return mapReduceHdfsHostPort;
}
public void setMapReduceHdfsHostPort(
String mapReduceHdfsHostPort ) {
this.mapReduceHdfsHostPort = mapReduceHdfsHostPort;
}
public String getMapReduceJobtrackerHostPort() {
return mapReduceJobtrackerHostPort;
}
public void setMapReduceJobtrackerHostPort(
String mapReduceJobtrackerHostPort ) {
this.mapReduceJobtrackerHostPort = mapReduceJobtrackerHostPort;
}
public String getMapReduceYarnResourceManager() {
return mapReduceYarnResourceManager;
}
public void setMapReduceYarnResourceManager(
String mapReduceYarnResourceManager ) {
this.mapReduceYarnResourceManager = mapReduceYarnResourceManager;
}
}