001: package org.geotools.feature.iso.collection;
002:
003: import java.util.Collection;
004: import java.util.List;
005:
006: import org.opengis.feature.Feature;
007: import org.opengis.feature.FeatureCollection;
008: import org.opengis.feature.GeometryAttribute;
009: import org.opengis.feature.type.AttributeDescriptor;
010: import org.opengis.feature.type.AttributeType;
011: import org.opengis.feature.type.FeatureCollectionType;
012: import org.opengis.feature.type.Name;
013: import org.opengis.filter.Filter;
014: import org.opengis.geometry.BoundingBox;
015: import org.opengis.referencing.crs.CoordinateReferenceSystem;
016:
017: /**
018: * Abstract feature list to be used as base for FeatureList implementations.
019: * <br>
020: * <p>
021: * Subclasses must implement the following methods:
022:
023: * <ul>
024: * <li>{@link Collection#size()}
025: * <li>{@link org.opengis.feature.FeatureList#subList(Filter)}
026: * <li>{@link org.geotools.feature.collection.AbstractResourceList#get(int)}
027: * </ul>
028: * </p>
029: * <br>
030: * <p>
031: * This implementation of FeatureList uses a delegate to satisfy the
032: * methods of the {@link Feature} interface.
033: * </p>
034: *
035: * @author Justin Deoliveira, The Open Planning Project, jdeolive@openplans.org
036: *
037: */
038: public abstract class AbstractFeatureList extends AbstractResourceList
039: implements FeatureCollection {
040:
041: private FeatureState delegate;
042:
043: protected AbstractFeatureList(Collection values,
044: AttributeDescriptor descriptor, String id) {
045: this .delegate = new FeatureState(values, descriptor, id, this );
046: }
047:
048: protected AbstractFeatureList(Collection values,
049: FeatureCollectionType type, String id) {
050: this .delegate = new FeatureState(values, type, id, this );
051: }
052:
053: public FeatureCollection subCollection(
054: org.opengis.filter.Filter filter) {
055: //TODO: inject a filter factory
056: return new SubFeatureCollection(this , filter, null);
057: }
058:
059: public FeatureCollection sort(org.opengis.filter.sort.SortBy order) {
060: throw new UnsupportedOperationException();
061: }
062:
063: public Collection memberTypes() {
064: return ((FeatureCollectionType) getType()).getMembers();
065: }
066:
067: public void putUserData(Object key, Object value) {
068: delegate.putUserData(key, value);
069: }
070:
071: public Object getUserData(Object key) {
072: return delegate.getUserData(key);
073: }
074:
075: public AttributeType getType() {
076: return delegate.getType();
077: }
078:
079: public boolean nillable() {
080: return delegate.nillable();
081: }
082:
083: public String getID() {
084: return delegate.getID();
085: }
086:
087: public CoordinateReferenceSystem getCRS() {
088: return delegate.getCRS();
089: }
090:
091: public void setCRS(CoordinateReferenceSystem crs) {
092: delegate.setCRS(crs);
093: }
094:
095: public BoundingBox getBounds() {
096: return delegate.getBounds();
097: }
098:
099: public GeometryAttribute getDefaultGeometry() {
100: return delegate.getDefaultGeometry();
101: }
102:
103: public void setDefaultGeometry(GeometryAttribute geom) {
104: delegate.setDefaultGeometry(geom);
105: }
106:
107: public void setValue(List newValue) throws IllegalArgumentException {
108: delegate.setValue(newValue);
109: }
110:
111: public List getValue(Name name) {
112: return delegate.get(name);
113: }
114:
115: public AttributeDescriptor getDescriptor() {
116: return delegate.getDescriptor();
117: }
118:
119: public Name name() {
120: return delegate.name();
121: }
122:
123: public Object getValue() {
124: return delegate.getValue();
125: }
126:
127: public void setValue(Object newValue)
128: throws IllegalArgumentException {
129: delegate.setValue(newValue);
130: }
131:
132: }
|