package mil.nga.giat.geowave.test;
import java.util.HashMap;
import java.util.Map;
import mil.nga.giat.geowave.core.store.DataStore;
import mil.nga.giat.geowave.core.store.GenericStoreFactory;
import mil.nga.giat.geowave.core.store.StoreFactoryOptions;
import mil.nga.giat.geowave.core.store.config.ConfigUtils;
import mil.nga.giat.geowave.core.store.operations.remote.options.DataStorePluginOptions;
import mil.nga.giat.geowave.test.annotation.GeoWaveTestStore;
import mil.nga.giat.geowave.test.annotation.GeoWaveTestStore.GeoWaveStoreType;
public abstract class StoreTestEnvironment implements
TestEnvironment
{
protected abstract GenericStoreFactory<DataStore> getDataStoreFactory();
protected abstract GeoWaveStoreType getStoreType();
protected abstract void initOptions(
StoreFactoryOptions options );
public DataStorePluginOptions getDataStoreOptions(
final GeoWaveTestStore store ) {
final DataStorePluginOptions pluginOptions = new TestDataStoreOptions(
getStoreType());
final GenericStoreFactory<DataStore> factory = getDataStoreFactory();
StoreFactoryOptions opts = factory.createOptionsInstance();
initOptions(opts);
opts.setGeowaveNamespace(store.namespace());
final Map<String, String> optionOverrides = new HashMap<>();
// now allow for overrides to take precedence
for (final String optionOverride : store.options()) {
if (optionOverride.contains("=")) {
final String[] kv = optionOverride.split("=");
optionOverrides.put(
kv[0],
kv[1]);
}
}
if (!optionOverrides.isEmpty()) {
opts = ConfigUtils.populateOptionsFromList(
opts,
optionOverrides);
}
pluginOptions.selectPlugin(factory.getType());
pluginOptions.setFactoryOptions(opts);
return pluginOptions;
}
}