package mil.nga.giat.geowave.core.store.operations.config;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.ParameterException;
import com.beust.jcommander.Parameters;
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.ConfigSection;
import mil.nga.giat.geowave.core.cli.operations.config.options.ConfigOptions;
import mil.nga.giat.geowave.core.store.operations.remote.options.IndexGroupPluginOptions;
import mil.nga.giat.geowave.core.store.operations.remote.options.IndexPluginOptions;
@GeowaveOperation(name = "addindexgrp", parentOperation = ConfigSection.class)
@Parameters(commandDescription = "Create an index group for usage in GeoWave")
public class AddIndexGroupCommand extends
DefaultOperation implements
Command
{
@Parameter(description = "<name> <comma separated list of indexes>")
private List<String> parameters = new ArrayList<String>();
@Override
public void execute(
OperationParams params ) {
Properties existingProps = getGeoWaveConfigProperties(params);
if (parameters.size() < 2) {
throw new ParameterException(
"Must specify index group name and index names (comma separated)");
}
// New index group name
String newGroupName = parameters.get(0);
String[] indexes = parameters.get(
1).split(
",");
// Make sure the existing group doesn't exist.
IndexGroupPluginOptions groupOptions = new IndexGroupPluginOptions();
if (groupOptions.load(
existingProps,
getNamespace())) {
throw new ParameterException(
"That index group already exists: " + newGroupName);
}
// Make sure all the indexes exist, and add them to the group options.
for (int i = 0; i < indexes.length; i++) {
indexes[i] = indexes[i].trim();
IndexPluginOptions options = new IndexPluginOptions();
if (!options.load(
existingProps,
IndexPluginOptions.getIndexNamespace(indexes[i]))) {
throw new ParameterException(
"That index does not exist: " + indexes[i]);
}
groupOptions.getDimensionalityPlugins().put(
indexes[i],
options);
}
// Save the group
groupOptions.save(
existingProps,
getNamespace());
// Write to disk.
ConfigOptions.writeProperties(
getGeoWaveConfigFile(params),
existingProps);
}
public String getPluginName() {
return parameters.get(0);
}
public String getNamespace() {
return IndexGroupPluginOptions.getIndexGroupNamespace(getPluginName());
}
public List<String> getParameters() {
return parameters;
}
public void setParameters(
String name,
String commaSeparatedIndexes ) {
this.parameters = new ArrayList<String>();
this.parameters.add(name);
this.parameters.add(commaSeparatedIndexes);
}
}