package org.geotoolkit.pending.demo.datamodel.customdatastore; import com.vividsolutions.jts.geom.Point; import java.io.File; import java.io.FileNotFoundException; import java.net.URI; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.sis.feature.builder.AttributeRole; import org.apache.sis.feature.builder.FeatureTypeBuilder; import org.geotoolkit.data.AbstractFeatureStore; import org.geotoolkit.data.FeatureStoreFactory; import org.geotoolkit.data.FeatureReader; import org.geotoolkit.data.FeatureWriter; import org.geotoolkit.data.query.Query; import org.geotoolkit.data.query.QueryCapabilities; import org.geotoolkit.factory.Hints; import org.apache.sis.referencing.CommonCRS; import org.apache.sis.storage.DataStoreException; import org.opengis.util.GenericName; import org.geotoolkit.storage.DataStores; import org.opengis.feature.Feature; import org.opengis.feature.FeatureType; import org.opengis.filter.Filter; import org.opengis.filter.identity.FeatureId; import org.opengis.parameter.ParameterValueGroup; public class FishFeatureStore extends AbstractFeatureStore{ private final File storage; private final FeatureType type; public FishFeatureStore(ParameterValueGroup params) throws DataStoreException{ super(params); URI uri = (URI) params.parameter(FishDatastoreFactory.PATH.getName().toString()).getValue(); storage = new File(uri); final FeatureTypeBuilder ftb = new FeatureTypeBuilder(); ftb.setName(getDefaultNamespace(),"Fish"); ftb.addAttribute(String.class).setName("name"); ftb.addAttribute(Integer.class).setName("length"); ftb.addAttribute(Point.class).setName("position").setCRS(CommonCRS.WGS84.normalizedGeographic()).addRole(AttributeRole.DEFAULT_GEOMETRY); type = ftb.build(); } @Override public FeatureStoreFactory getFactory() { return (FeatureStoreFactory) DataStores.getFactoryById(FishDatastoreFactory.NAME); } @Override public Set<GenericName> getNames() throws DataStoreException { return Collections.singleton(type.getName()); } @Override public FeatureType getFeatureType(String typeName) throws DataStoreException { typeCheck(typeName); return type; } @Override public FeatureReader getFeatureReader(Query query) throws DataStoreException { typeCheck(query.getTypeName()); FeatureReader reader; try { reader = new FishReader(storage, type); } catch (FileNotFoundException ex) { throw new DataStoreException(ex); } //use the generic methode to take to care of everything for us. reader = handleRemaining(reader, query); return reader; } /////////////////////////////////////////////////////////////// // SCHEMA MANIPULATION //////////////////////////////////////// /////////////////////////////////////////////////////////////// @Override public void createFeatureType(FeatureType featureType) throws DataStoreException { throw new DataStoreException("Not supported."); } @Override public void updateFeatureType(FeatureType featureType) throws DataStoreException { throw new DataStoreException("Not supported."); } @Override public void deleteFeatureType(String typeName) throws DataStoreException { throw new DataStoreException("Not supported."); } @Override public QueryCapabilities getQueryCapabilities() { throw new UnsupportedOperationException("Not supported."); } /////////////////////////////////////////////////////////////// // WRITING //////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// @Override public List<FeatureId> addFeatures(String groupName, Collection<? extends Feature> newFeatures, final Hints hints) throws DataStoreException { return handleAddWithFeatureWriter(groupName, newFeatures, hints); } @Override public void updateFeatures(String groupName, Filter filter, Map<String, ? extends Object> values) throws DataStoreException { handleUpdateWithFeatureWriter(groupName, filter, values); } @Override public void removeFeatures(String groupName, Filter filter) throws DataStoreException { handleRemoveWithFeatureWriter(groupName, filter); } @Override public FeatureWriter getFeatureWriter(Query query) throws DataStoreException { throw new UnsupportedOperationException("Not supported yet."); } @Override public void refreshMetaModel() { } }