001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/model/feature/Feature.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 Aennchenstraße 19
030 53177 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
044 package org.deegree.model.feature;
045
046 import java.util.Map;
047
048 import org.deegree.datatypes.QualifiedName;
049 import org.deegree.io.datastore.PropertyPathResolvingException;
050 import org.deegree.model.feature.schema.FeatureType;
051 import org.deegree.model.spatialschema.Envelope;
052 import org.deegree.model.spatialschema.Geometry;
053 import org.deegree.model.spatialschema.GeometryException;
054 import org.deegree.ogcbase.PropertyPath;
055
056 /**
057 * Features are, according to the Abstract Specification, digital representations of real world
058 * entities. Feature Identity thus refers to mechanisms to identify such representations: not to
059 * identify the real world entities that are the subject of a representation. Thus two different
060 * representations of a real world entity (say the Mississippi River) will be two different features
061 * with distinct identities. Real world identification systems, such as title numbers, while
062 * possibly forming a sound basis for an implementation of a feature identity mechanism, are not of
063 * themselves such a mechanism.
064 *
065 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
066 * @author <a href="mailto:mschneider@lat-lon.de">Markus Schneider</a>
067 * @version $Revision: 9343 $ $Date: 2007-12-27 14:30:32 +0100 (Do, 27 Dez 2007) $
068 */
069 public interface Feature {
070
071 /**
072 * Returns the qualified name of the feature.
073 *
074 * @return the qualified name of the feature
075 */
076 QualifiedName getName();
077
078 /**
079 * Returns the description of the feature.
080 *
081 * @return the description of the feature.
082 */
083 String getDescription();
084
085 /**
086 * Returns the id of the feature.
087 *
088 * @return the id of the feature
089 */
090 String getId();
091
092 /**
093 * Sets the id of the feature.
094 *
095 * @param fid
096 * the id of the feature to be set
097 */
098 void setId( String fid );
099
100 /**
101 * Returns the feature type of this feature.
102 *
103 * @return the feature type of this feature
104 */
105 FeatureType getFeatureType();
106
107 /**
108 * Sets the feature type of this feature.
109 *
110 * @param ft
111 * feature type to set
112 */
113 void setFeatureType( FeatureType ft );
114
115 /**
116 * Returns all properties of the feature in their original order.
117 *
118 * @return all properties of the feature
119 */
120 FeatureProperty[] getProperties();
121
122 /**
123 * Returns the first property of the feature with the given name.
124 *
125 * @param name
126 * name of the property to look up
127 * @return the first property of the feature with the given name or null if the feature has no
128 * such property
129 */
130 FeatureProperty getDefaultProperty( QualifiedName name );
131
132 /**
133 * Returns the property of the feature identified by the given {@link PropertyPath}.
134 *
135 * NOTE: Current implementation does not handle multiple properties (on the path) or index
136 * addressing in the path.
137 *
138 * @param path
139 * the path of the property to look up
140 * @return the property of the feature identified by the given PropertyPath
141 * @throws PropertyPathResolvingException
142 *
143 * @see PropertyPath
144 */
145 FeatureProperty getDefaultProperty( PropertyPath path )
146 throws PropertyPathResolvingException;
147
148 /**
149 * Returns the properties of the feature with the given name in their original order.
150 *
151 * @param name
152 * name of the properties to look up
153 * @return the properties of the feature with the given name or null if the feature has no
154 * property with that name
155 */
156 FeatureProperty[] getProperties( QualifiedName name );
157
158 /**
159 * Returns the properties of the feature at the submitted index of the feature type definition.
160 *
161 * @param index
162 * index of the properties to look up
163 * @return the properties of the feature at the submitted index
164 * @deprecated
165 */
166 @Deprecated
167 FeatureProperty[] getProperties( int index );
168
169 /**
170 * Returns the values of all geometry properties of the feature.
171 *
172 * @return the values of all geometry properties of the feature, or a zero-length array if the
173 * feature has no geometry properties
174 */
175 Geometry[] getGeometryPropertyValues();
176
177 /**
178 * Returns the value of the default geometry property of the feature. If the feature has no
179 * geometry property, this is a Point at the coordinates (0,0).
180 *
181 * @return default geometry or Point at (0,0) if feature has no geometry
182 */
183 Geometry getDefaultGeometryPropertyValue();
184
185 /**
186 * Sets the value for the given property. The index is needed to specify the occurences of the
187 * property that is to be replaced. Set to 0 for properties that may only occur once.
188 *
189 * @param property
190 * property name and the property's new value
191 * @param index
192 * position of the property that is to be replaced
193 */
194 void setProperty( FeatureProperty property, int index );
195
196 /**
197 * Adds the given property to the feature's properties. The position of the property is
198 * determined by the feature type. If the feature already has a property with this name, it is
199 * inserted behind it.
200 *
201 * @param property
202 * property to insert
203 */
204 void addProperty( FeatureProperty property );
205
206 /**
207 * Removes the properties with the given name.
208 *
209 * @param propertyName
210 * name of the properties to remove
211 */
212 void removeProperty( QualifiedName propertyName );
213
214 /**
215 * Replaces the given property with a new one.
216 *
217 * @param oldProperty
218 * property to be replaced
219 * @param newProperty
220 * new property
221 */
222 void replaceProperty( FeatureProperty oldProperty, FeatureProperty newProperty );
223
224 /**
225 * Returns the envelope / bounding box of the feature.
226 *
227 * @return the envelope / bounding box of the feature
228 * @throws GeometryException
229 */
230 Envelope getBoundedBy()
231 throws GeometryException;
232
233 /**
234 * Returns the owner of the feature. This is the feature property that has this feature as value
235 * or null if this feature is a root feature.
236 *
237 * @return the owner of the feature, or null if the feature does not belong to a feature
238 * property
239 */
240 FeatureProperty getOwner();
241
242 /**
243 * Returns the attribute value of the attribute with the specified name.
244 *
245 * @param name
246 * name of the attribute
247 * @return the attribute value
248 */
249 String getAttribute( String name );
250
251 /**
252 * Returns all attributes of the feature.
253 *
254 * @return all attributes, keys are names, values are attribute values
255 */
256 Map<String, String> getAttributes();
257
258 /**
259 * Sets the value of the attribute with the given name.
260 *
261 * @param name
262 * name of the attribute
263 * @param value
264 * value to set
265 */
266 void setAttribute( String name, String value );
267
268 /**
269 * Signals that the envelopes of the geometry properties have been updated.
270 */
271 public void setEnvelopesUpdated();
272
273 }