package mil.nga.giat.geowave.core.store.operations.remote.options;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.lang3.StringUtils;
import com.beust.jcommander.ParametersDelegate;
import mil.nga.giat.geowave.core.cli.api.DefaultPluginOptions;
import mil.nga.giat.geowave.core.cli.api.PluginOptions;
/**
* Index group contains a list of indexes that are created from existing index
* configurations.
*/
public class IndexGroupPluginOptions extends
DefaultPluginOptions implements
PluginOptions
{
public final static String INDEXGROUP_PROPERTY_NAMESPACE = "indexgroup";
/**
* This is indexed by index name, instead of what you'd expect, which would
* be index type.
*/
@ParametersDelegate
private Map<String, IndexPluginOptions> dimensionalityPlugins = new HashMap<String, IndexPluginOptions>();
public IndexGroupPluginOptions() {
}
/**
* The name of this index group.
*/
@Override
public void selectPlugin(
String qualifier ) {
// This is specified as so: name=type,name=type,...
if (qualifier != null && qualifier.length() > 0) {
for (String name : qualifier.split(",")) {
String[] parts = name.split("=");
addIndex(
parts[0].trim(),
parts[1].trim());
}
}
}
@Override
public String getType() {
List<String> typeString = new ArrayList<String>();
for (Entry<String, IndexPluginOptions> entry : getDimensionalityPlugins().entrySet()) {
typeString.add(String.format(
"%s=%s",
entry.getKey(),
entry.getValue().getType()));
}
if (typeString.isEmpty()) {
return null;
}
return StringUtils.join(
typeString,
",");
}
public void addIndex(
String name,
String type ) {
if (name != null && type != null) {
IndexPluginOptions indexOptions = new IndexPluginOptions();
indexOptions.selectPlugin(type);
getDimensionalityPlugins().put(
name,
indexOptions);
}
}
public Map<String, IndexPluginOptions> getDimensionalityPlugins() {
return dimensionalityPlugins;
}
public static String getIndexGroupNamespace(
String groupName ) {
return String.format(
"%s.%s",
INDEXGROUP_PROPERTY_NAMESPACE,
groupName);
}
}