package mil.nga.giat.geowave.adapter.vector.export;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.ParameterException;
import com.beust.jcommander.Parameters;
import com.beust.jcommander.ParametersDelegate;
import mil.nga.giat.geowave.adapter.vector.cli.VectorSection;
import mil.nga.giat.geowave.core.cli.annotations.GeowaveOperation;
import mil.nga.giat.geowave.core.cli.api.Command;
import mil.nga.giat.geowave.core.cli.api.DefaultOperation;
import mil.nga.giat.geowave.core.cli.api.OperationParams;
import mil.nga.giat.geowave.core.cli.operations.config.options.ConfigOptions;
import mil.nga.giat.geowave.core.store.operations.remote.options.DataStorePluginOptions;
import mil.nga.giat.geowave.core.store.operations.remote.options.StoreLoader;
@GeowaveOperation(name = "mrexport", parentOperation = VectorSection.class)
@Parameters(commandDescription = "Export data using map-reduce")
public class VectorMRExportCommand extends
DefaultOperation implements
Command
{
@Parameter(description = "<hdfs host:port> <path to base directory to write to> <store name>")
private List<String> parameters = new ArrayList<String>();
@ParametersDelegate
private VectorMRExportOptions mrOptions = new VectorMRExportOptions();
private DataStorePluginOptions storeOptions = null;
@Override
public void execute(
OperationParams params )
throws Exception {
createRunner(
params).runJob();
}
public VectorMRExportJobRunner createRunner(
OperationParams params ) {
// Ensure we have all the required arguments
if (parameters.size() != 3) {
throw new ParameterException(
"Requires arguments: <hdfs host:port> <path to base directory to write to> <store name>");
}
String hdfsHostPort = parameters.get(0);
String hdfsPath = parameters.get(1);
String storeName = parameters.get(2);
if (!hdfsHostPort.contains("://")) {
hdfsHostPort = "hdfs://" + hdfsHostPort;
}
// Config file
File configFile = getGeoWaveConfigFile(params);
// Attempt to load store.
if (storeOptions == null) {
StoreLoader storeLoader = new StoreLoader(
storeName);
if (!storeLoader.loadFromConfig(configFile)) {
throw new ParameterException(
"Cannot find store name: " + storeLoader.getStoreName());
}
storeOptions = storeLoader.getDataStorePlugin();
}
VectorMRExportJobRunner vectorRunner = new VectorMRExportJobRunner(
storeOptions,
mrOptions,
hdfsHostPort,
hdfsPath);
return vectorRunner;
}
public List<String> getParameters() {
return parameters;
}
public void setParameters(
String hdfsHostPort,
String hdfsPath,
String storeName ) {
this.parameters = new ArrayList<String>();
this.parameters.add(hdfsHostPort);
this.parameters.add(hdfsPath);
this.parameters.add(storeName);
}
public VectorMRExportOptions getMrOptions() {
return mrOptions;
}
public void setMrOptions(
VectorMRExportOptions mrOptions ) {
this.mrOptions = mrOptions;
}
public DataStorePluginOptions getStoreOptions() {
return storeOptions;
}
public void setStoreOptions(
DataStorePluginOptions storeOptions ) {
this.storeOptions = storeOptions;
}
}