package mil.nga.giat.geowave.adapter.vector;
import mil.nga.giat.geowave.core.geotime.store.dimension.GeometryWrapper;
import mil.nga.giat.geowave.core.index.ByteArrayId;
import mil.nga.giat.geowave.core.store.adapter.IndexFieldHandler;
import mil.nga.giat.geowave.core.store.data.PersistentValue;
import mil.nga.giat.geowave.core.store.data.field.FieldVisibilityHandler;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.type.AttributeDescriptor;
import com.vividsolutions.jts.geom.Geometry;
/**
* This class handles the internal responsibility of persisting JTS geometry to
* and from a GeoWave common index field for SimpleFeature data.
*
*/
public class FeatureGeometryHandler implements
IndexFieldHandler<SimpleFeature, GeometryWrapper, Object>
{
private final FeatureAttributeHandler nativeGeometryHandler;
private final FieldVisibilityHandler<SimpleFeature, Object> visibilityHandler;
private final ByteArrayId[] nativeFieldIds;
public FeatureGeometryHandler(
final AttributeDescriptor geometryAttrDesc ) {
this(
geometryAttrDesc,
null);
}
public FeatureGeometryHandler(
final AttributeDescriptor geometryAttrDesc,
final FieldVisibilityHandler<SimpleFeature, Object> visibilityHandler ) {
nativeGeometryHandler = new FeatureAttributeHandler(
geometryAttrDesc);
this.visibilityHandler = visibilityHandler;
nativeFieldIds = new ByteArrayId[] {
nativeGeometryHandler.getFieldId()
};
}
@Override
public ByteArrayId[] getNativeFieldIds() {
return nativeFieldIds;
}
@Override
public GeometryWrapper toIndexValue(
final SimpleFeature row ) {
final Geometry geometry = (Geometry) nativeGeometryHandler.getFieldValue(row);
byte[] visibility;
if (visibilityHandler != null) {
visibility = visibilityHandler.getVisibility(
row,
nativeGeometryHandler.getFieldId(),
geometry);
}
else {
visibility = new byte[] {};
}
return new GeometryWrapper(
geometry,
visibility);
}
@SuppressWarnings("unchecked")
@Override
public PersistentValue<Object>[] toNativeValues(
final GeometryWrapper indexValue ) {
return new PersistentValue[] {
new PersistentValue<Geometry>(
nativeGeometryHandler.getFieldId(),
indexValue.getGeometry())
};
}
}