/* * Geotoolkit - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2010, Johann Sorel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotoolkit.data.memory; import java.util.AbstractCollection; import java.util.Collection; import java.util.List; import java.util.Map; import org.apache.sis.storage.DataStoreException; import org.geotoolkit.data.FeatureCollection; import org.geotoolkit.data.FeatureIterator; import org.geotoolkit.data.FeatureStoreRuntimeException; import org.geotoolkit.data.memory.mapping.DefaultFeatureMapper; import org.geotoolkit.data.memory.mapping.FeatureMapper; import org.geotoolkit.data.query.Query; import org.geotoolkit.data.query.Source; import org.geotoolkit.data.session.Session; import org.geotoolkit.factory.Hints; import org.geotoolkit.storage.StorageListener; import org.opengis.feature.Feature; import org.opengis.feature.FeatureType; import org.opengis.feature.PropertyType; import org.opengis.filter.Filter; import org.opengis.geometry.Envelope; /** * Basic support for a FeatureCollection that moves attributs to a new type definition * using a mapping objet. * * @author Johann Sorel (Puzzle-GIS) * @module */ public class GenericMappingFeatureCollection extends AbstractCollection<Feature> implements FeatureCollection { private final FeatureCollection original; private final FeatureType type; private final FeatureMapper mapper; public GenericMappingFeatureCollection(final FeatureCollection original, final FeatureType newType, final Map<PropertyType,List<PropertyType>> mapping, final Map<PropertyType,Object> defaults){ this(original, new DefaultFeatureMapper( original.getFeatureType(), newType, mapping, defaults) ); } public GenericMappingFeatureCollection(final FeatureCollection original, final FeatureMapper mapper){ this.original = original; this.mapper = mapper; this.type = mapper.getTargetType(); } @Override public String getID() { return original.getID(); } @Override public Session getSession() { return original.getSession(); } @Override public Source getSource() { return original.getSource(); } @Override public FeatureType getFeatureType() { return type; } @Override public Envelope getEnvelope() throws DataStoreException { return original.getEnvelope(); } @Override public boolean isWritable() { return false; } @Override public FeatureCollection subCollection(final Query query) throws DataStoreException { throw new UnsupportedOperationException("Mapping feature collection is not made to allow sub query."); } @Override public FeatureIterator iterator() throws FeatureStoreRuntimeException { return iterator(null); } @Override public FeatureIterator iterator(final Hints hints) throws FeatureStoreRuntimeException { return new GenericMappingFeatureIterator(original.iterator(), mapper); } @Override public void addStorageListener(final StorageListener listener) { throw new UnsupportedOperationException("Not supported yet."); } @Override public void removeStorageListener(final StorageListener listener) { throw new UnsupportedOperationException("Not supported yet."); } @Override public int size() { return original.size(); } @Override public boolean isEmpty() { return original.isEmpty(); } //////////////////////////////////////////////////////////////////////////// // not writable //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// @Override public void update(Feature feature) throws DataStoreException { throw new DataStoreException("Not writable"); } @Override public void update(final Filter filter, final Map<String, ?> values) throws DataStoreException { throw new DataStoreException("Not writable"); } @Override public void remove(final Filter filter) throws DataStoreException { throw new DataStoreException("Not writable"); } @Override public boolean add(final Feature e) { throw new FeatureStoreRuntimeException("Not writable"); } @Override public boolean remove(final Object o) { throw new FeatureStoreRuntimeException("Not writable"); } @Override public boolean addAll(final Collection<? extends Feature> clctn) { throw new FeatureStoreRuntimeException("Not writable"); } @Override public boolean removeAll(final Collection<?> clctn) { throw new FeatureStoreRuntimeException("Not writable"); } @Override public void clear() { throw new FeatureStoreRuntimeException("Not writable"); } }