package mil.nga.giat.geowave.adapter.vector.stats;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import mil.nga.giat.geowave.adapter.vector.utils.SimpleFeatureUserDataConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.feature.type.AttributeDescriptor;
/**
* A collection of statistics configurations targeted to a specific attribute.
* Each configuration describes how to construct a statistic for an attribute.
*
*/
public class StatsConfigurationCollection implements
java.io.Serializable
{
private static final long serialVersionUID = -4983543525776889248L;
private final static Logger LOGGER = LoggerFactory.getLogger(StatsConfigurationCollection.class);
private List<StatsConfig<SimpleFeature>> configurationsForAttribute;
public StatsConfigurationCollection() {
}
public StatsConfigurationCollection(
final List<StatsConfig<SimpleFeature>> configurationsForAttribute ) {
this.configurationsForAttribute = configurationsForAttribute;
}
public List<StatsConfig<SimpleFeature>> getConfigurationsForAttribute() {
return configurationsForAttribute;
}
public void setConfigurationsForAttribute(
final List<StatsConfig<SimpleFeature>> configrationsForAttribute ) {
this.configurationsForAttribute = configrationsForAttribute;
}
public static class SimpleFeatureStatsConfigurationCollection implements
SimpleFeatureUserDataConfiguration
{
private static final long serialVersionUID = -9149753182284018327L;
private Map<String, StatsConfigurationCollection> attConfig = new HashMap<String, StatsConfigurationCollection>();
public SimpleFeatureStatsConfigurationCollection() {}
public SimpleFeatureStatsConfigurationCollection(
final SimpleFeatureType type ) {
super();
configureFromType(type);
}
public Map<String, StatsConfigurationCollection> getAttConfig() {
return attConfig;
}
public void setAttConfig(
final Map<String, StatsConfigurationCollection> attConfig ) {
this.attConfig = attConfig;
}
@Override
public void updateType(
final SimpleFeatureType type ) {
for (final Map.Entry<String, StatsConfigurationCollection> item : attConfig.entrySet()) {
final AttributeDescriptor desc = type.getDescriptor(item.getKey());
if (desc == null) {
LOGGER.error("Attribute " + item.getKey() + " not found for statistics configuration");
continue;
}
desc.getUserData().put(
"stats",
item.getValue());
}
}
@Override
public void configureFromType(
final SimpleFeatureType type ) {
for (final AttributeDescriptor descriptor : type.getAttributeDescriptors()) {
if (descriptor.getUserData().containsKey(
"stats")) {
final Object configObj = descriptor.getUserData().get(
"stats");
if (!(configObj instanceof StatsConfigurationCollection)) {
LOGGER.error("Invalid entry stats entry for " + descriptor.getLocalName());
continue;
}
attConfig.put(
descriptor.getLocalName(),
(StatsConfigurationCollection) configObj);
}
}
}
}
}