package mil.nga.giat.geowave.core.ingest.operations; import java.util.ArrayList; import java.util.List; import java.util.Map; 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.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.ingest.kafka.KafkaProducerCommandLineOptions; import mil.nga.giat.geowave.core.ingest.kafka.StageToKafkaDriver; import mil.nga.giat.geowave.core.ingest.local.LocalFileIngestPlugin; import mil.nga.giat.geowave.core.ingest.local.LocalInputCommandLineOptions; import mil.nga.giat.geowave.core.ingest.operations.options.IngestFormatPluginOptions; @GeowaveOperation(name = "localToKafka", parentOperation = IngestSection.class) @Parameters(commandDescription = "Stage supported files in local file system to a Kafka topic") public class LocalToKafkaCommand extends DefaultOperation implements Command { @Parameter(description = "<file or directory>") private List<String> parameters = new ArrayList<String>(); @ParametersDelegate private KafkaProducerCommandLineOptions kafkaOptions = new KafkaProducerCommandLineOptions(); @ParametersDelegate private LocalInputCommandLineOptions localInputOptions = new LocalInputCommandLineOptions(); // This helper is used to load the list of format SPI plugins that will be // used @ParametersDelegate private IngestFormatPluginOptions pluginFormats = new IngestFormatPluginOptions(); @Override public boolean prepare( OperationParams params ) { // Based on the selected formats, select the format plugins pluginFormats.selectPlugin(localInputOptions.getFormats()); return true; } /** * Prep the driver & run the operation. */ @Override public void execute( OperationParams params ) { // Ensure we have all the required arguments if (parameters.size() != 1) { throw new ParameterException( "Requires arguments: <file or directory>"); } String inputPath = parameters.get(0); // Ingest Plugins Map<String, LocalFileIngestPlugin<?>> ingestPlugins = pluginFormats.createLocalIngestPlugins(); // Driver StageToKafkaDriver driver = new StageToKafkaDriver( kafkaOptions, ingestPlugins, localInputOptions); // Execute if (!driver.runOperation(inputPath)) { throw new RuntimeException( "Ingest failed to execute"); } } public List<String> getParameters() { return parameters; } public void setParameters( String fileOrDirectory ) { this.parameters = new ArrayList<String>(); this.parameters.add(fileOrDirectory); } public KafkaProducerCommandLineOptions getKafkaOptions() { return kafkaOptions; } public void setKafkaOptions( KafkaProducerCommandLineOptions kafkaOptions ) { this.kafkaOptions = kafkaOptions; } public LocalInputCommandLineOptions getLocalInputOptions() { return localInputOptions; } public void setLocalInputOptions( LocalInputCommandLineOptions localInputOptions ) { this.localInputOptions = localInputOptions; } public IngestFormatPluginOptions getPluginFormats() { return pluginFormats; } public void setPluginFormats( IngestFormatPluginOptions pluginFormats ) { this.pluginFormats = pluginFormats; } }