001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/model/feature/AbstractFeatureCollection.java $
002: /*---------------- FILE HEADER ------------------------------------------
003:
004: This file is part of deegree.
005: Copyright (C) 2001-2008 by:
006: EXSE, Department of Geography, University of Bonn
007: http://www.giub.uni-bonn.de/deegree/
008: lat/lon GmbH
009: http://www.lat-lon.de
010:
011: This library is free software; you can redistribute it and/or
012: modify it under the terms of the GNU Lesser General Public
013: License as published by the Free Software Foundation; either
014: version 2.1 of the License, or (at your option) any later version.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: Contact:
026:
027: Andreas Poth
028: lat/lon GmbH
029: Aennchenstr. 19
030: 53115 Bonn
031: Germany
032: E-Mail: poth@lat-lon.de
033:
034: Prof. Dr. Klaus Greve
035: Department of Geography
036: University of Bonn
037: Meckenheimer Allee 166
038: 53115 Bonn
039: Germany
040: E-Mail: greve@giub.uni-bonn.de
041:
042: ---------------------------------------------------------------------------*/
043: package org.deegree.model.feature;
044:
045: import org.deegree.datatypes.QualifiedName;
046: import org.deegree.datatypes.Types;
047: import org.deegree.datatypes.UnknownTypeException;
048: import org.deegree.framework.log.ILogger;
049: import org.deegree.framework.log.LoggerFactory;
050: import org.deegree.model.feature.schema.PropertyType;
051: import org.deegree.model.spatialschema.Geometry;
052: import org.deegree.model.spatialschema.GeometryFactory;
053: import org.deegree.ogcbase.CommonNamespaces;
054:
055: /**
056: * @author <a href="mailto:poth@lat-lon.de">Andreas Poth </a>
057: * @author last edited by: $Author: rbezema $
058: *
059: * @version $Revision: 10397 $, $Date: 2008-03-04 08:18:07 -0800 (Tue, 04 Mar 2008) $
060: */
061: public abstract class AbstractFeatureCollection extends AbstractFeature
062: implements FeatureCollection {
063:
064: private static final ILogger LOG = LoggerFactory
065: .getLogger(AbstractFeatureCollection.class);
066:
067: /**
068: * @param id
069: */
070: public AbstractFeatureCollection(String id) {
071: this (id, null);
072: }
073:
074: /**
075: * @param id
076: * @param name of the feature collection if <code>null</code> it will be set to wfs:FeatureCollection
077: */
078: public AbstractFeatureCollection(String id, QualifiedName name) {
079: super (id, null);
080:
081: PropertyType[] ftp = new PropertyType[1];
082: if (name == null) {
083: name = new QualifiedName(CommonNamespaces.WFS_PREFIX,
084: "FeatureCollection", CommonNamespaces.WFSNS);
085: }
086: try {
087: ftp[0] = FeatureFactory.createPropertyType(
088: new QualifiedName("features"),
089: Types.FEATURE_ARRAY_PROPERTY_NAME, true);
090: } catch (UnknownTypeException e) {
091: LOG.logError("Unreachable point reached.", e);
092: }
093: this .featureType = FeatureFactory.createFeatureType(name,
094: false, ftp);
095:
096: }
097:
098: /**
099: * returns a Point with position 0/0 and no CRS
100: *
101: * @return a geometry
102: */
103: public Geometry getDefaultGeometryPropertyValue() {
104: return GeometryFactory.createPoint(0, 0, null);
105: }
106:
107: /**
108: * returns the value of a feature collection geometry properties
109: *
110: * @return array of all geometry property values
111: */
112: public Geometry[] getGeometryPropertyValues() {
113: return new Geometry[0];
114: }
115:
116: /**
117: * returns all properties of a feature collection
118: *
119: * @return all properties of a feature
120: */
121: public FeatureProperty[] getProperties() {
122: return new FeatureProperty[0];
123: }
124:
125: /**
126: * returns the properties of a feature collection at the passed index position
127: *
128: * @param index
129: * @return properties at the passed index position
130: */
131: public FeatureProperty[] getProperties(int index) {
132: // TODO
133: // a FeatureCollection may also have properties?
134: return null;
135: }
136:
137: /**
138: * returns the default property of a feature collection with the passed name
139: *
140: * @param name
141: * @return named default property
142: */
143: public FeatureProperty getDefaultProperty(QualifiedName name) {
144: // TODO
145: // a FeatureCollection may also have properties?
146: return null;
147: }
148:
149: /**
150: * returns the named properties of a feature collection
151: *
152: * @param name
153: * @return named properties
154: */
155: public FeatureProperty[] getProperties(QualifiedName name) {
156: // TODO
157: // a FeatureCollection may also have properties?
158: return null;
159: }
160:
161: /**
162: * sets a property of a feature collection.<br>
163: * !!! this method is not implemented yet !!!
164: *
165: * @param property
166: */
167: public void setProperty(FeatureProperty property) {
168: // TODO
169: // a FeatureCollection may also have properties?
170: }
171:
172: /**
173: * @see org.deegree.model.feature.FeatureCollection#addAll(org.deegree.model.feature.Feature[])
174: */
175: public void addAll(Feature[] feature) {
176: for (int i = 0; i < feature.length; i++) {
177: add(feature[i]);
178: }
179: }
180:
181: /**
182: * @see org.deegree.model.feature.FeatureCollection#addAll(org.deegree.model.feature.FeatureCollection)
183: */
184: public void addAll(FeatureCollection fc) {
185: int size = fc.size();
186: for (int i = 0; i < size; i++) {
187: add(fc.getFeature(i));
188: }
189: }
190:
191: /**
192: * removes a feature identified by its ID from the feature collection. If no feature with the
193: * passed ID is available nothing happens and <tt>null</tt> will be returned
194: *
195: * @param id
196: * @return
197: */
198: public Feature remove(String id) {
199: Feature feat = getFeature(id);
200: return remove(feat);
201: }
202:
203: }
|