package mil.nga.giat.geowave.analytic.mapreduce.operations; 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.analytic.mapreduce.kde.KDECommandLineOptions; import mil.nga.giat.geowave.analytic.mapreduce.kde.KDEJobRunner; 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 = "kde", parentOperation = AnalyticSection.class) @Parameters(commandDescription = "Kernel Density Estimate") public class KdeCommand extends DefaultOperation implements Command { @Parameter(description = "<input storename> <output storename>") private List<String> parameters = new ArrayList<String>(); @ParametersDelegate private KDECommandLineOptions kdeOptions = new KDECommandLineOptions(); private DataStorePluginOptions inputStoreOptions = null; private DataStorePluginOptions outputStoreOptions = null; @Override public void execute( OperationParams params ) throws Exception { KDEJobRunner runner = createRunner(params); int status = runner.runJob(); if (status != 0) { throw new RuntimeException( "Failed to execute: " + status); } } public KDEJobRunner createRunner( OperationParams params ) { // Ensure we have all the required arguments if (parameters.size() != 2) { throw new ParameterException( "Requires arguments: <input storename> <output storename>"); } String inputStore = parameters.get(0); String outputStore = parameters.get(1); // Config file File configFile = (File) params.getContext().get( ConfigOptions.PROPERTIES_FILE_CONTEXT); // Attempt to load input store. if (inputStoreOptions == null) { StoreLoader inputStoreLoader = new StoreLoader( inputStore); if (!inputStoreLoader.loadFromConfig(configFile)) { throw new ParameterException( "Cannot find store name: " + inputStoreLoader.getStoreName()); } inputStoreOptions = inputStoreLoader.getDataStorePlugin(); } // Attempt to load output store. if (outputStoreOptions == null) { StoreLoader outputStoreLoader = new StoreLoader( outputStore); if (!outputStoreLoader.loadFromConfig(configFile)) { throw new ParameterException( "Cannot find store name: " + outputStoreLoader.getStoreName()); } outputStoreOptions = outputStoreLoader.getDataStorePlugin(); } KDEJobRunner runner = new KDEJobRunner( kdeOptions, inputStoreOptions, outputStoreOptions); return runner; } public List<String> getParameters() { return parameters; } public void setParameters( String inputStore, String outputStore ) { this.parameters = new ArrayList<String>(); this.parameters.add(inputStore); this.parameters.add(outputStore); } public KDECommandLineOptions getKdeOptions() { return kdeOptions; } public void setKdeOptions( KDECommandLineOptions kdeOptions ) { this.kdeOptions = kdeOptions; } public DataStorePluginOptions getInputStoreOptions() { return inputStoreOptions; } public void setInputStoreOptions( DataStorePluginOptions inputStoreOptions ) { this.inputStoreOptions = inputStoreOptions; } public DataStorePluginOptions getOutputStoreOptions() { return outputStoreOptions; } public void setOutputStoreOptions( DataStorePluginOptions outputStoreOptions ) { this.outputStoreOptions = outputStoreOptions; } }