package mil.nga.giat.geowave.format.geotools.vector;
import mil.nga.giat.geowave.format.geotools.vector.RetypingVectorDataPlugin.RetypingVectorDataSource;
import org.geoserver.feature.RetypingFeatureCollection;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.feature.type.AttributeDescriptor;
import org.opengis.feature.type.Name;
import org.opengis.filter.identity.FeatureId;
abstract public class AbstractFieldRetypingSource implements
RetypingVectorDataSource
{
abstract public String getFeatureId(
SimpleFeature original );
abstract public Object retypeAttributeValue(
Object value,
Name attributeName );
@Override
public SimpleFeature getRetypedSimpleFeature(
SimpleFeatureBuilder builder,
SimpleFeature original ) {
final SimpleFeatureType target = builder.getFeatureType();
for (int i = 0; i < target.getAttributeCount(); i++) {
final AttributeDescriptor attributeType = target.getDescriptor(i);
Object value = null;
if (original.getFeatureType().getDescriptor(
attributeType.getName()) != null) {
final Name name = attributeType.getName();
value = retypeAttributeValue(
original.getAttribute(name),
name);
}
builder.add(value);
}
String featureId = getFeatureId(original);
if (featureId == null) {
// a null ID will default to use the original
final FeatureId id = RetypingFeatureCollection.reTypeId(
original.getIdentifier(),
original.getFeatureType(),
target);
featureId = id.getID();
}
final SimpleFeature retyped = builder.buildFeature(featureId);
retyped.getUserData().putAll(
original.getUserData());
return retyped;
}
}