001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/model/filterencoding/FeatureId.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: ---------------------------------------------------------------------------*/
044: package org.deegree.model.filterencoding;
045:
046: import org.deegree.ogcbase.CommonNamespaces;
047: import org.w3c.dom.Element;
048:
049: /**
050: * Encapsulates the information of a <FeatureId>element as defined in the FeatureId DTD. The
051: * <FeatureId>element is used to encode the unique identifier for any feature instance. Within a
052: * filter expression, the <FeatureId>is used as a reference to a particular feature instance.
053: *
054: *
055: * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
056: * @author last edited by: $Author: mschneider $
057: *
058: * @version $Revision: 10547 $, $Date: 2008-03-11 01:40:28 -0700 (Tue, 11 Mar 2008) $
059: */
060: public class FeatureId {
061:
062: /**
063: * The FeatureId's value.
064: */
065: private String value;
066:
067: /**
068: * Constructs a new FeatureId.
069: *
070: * @param value
071: */
072: public FeatureId(String value) {
073: this .value = value;
074: }
075:
076: /**
077: * Given a DOM-fragment, a corresponding Expression-object is built. This method recursively
078: * calls other buildFromDOM () - methods to validate the structure of the DOM-fragment.
079: *
080: * @return feature id
081: * @throws FilterConstructionException
082: * if the structure of the DOM-fragment is invalid
083: */
084: public static FeatureId buildFromDOM(Element element)
085: throws FilterConstructionException {
086:
087: // check if root element's name equals 'FeatureId'
088: if (!element.getLocalName().toLowerCase().equals("featureid"))
089: throw new FilterConstructionException(
090: "Name of element does not equal 'FeatureId'!");
091:
092: // determine the value of the FeatureId
093: String fid = element.getAttribute("fid");
094: if (fid == null || "".equals(fid))
095: throw new FilterConstructionException(
096: "<FeatureId> requires 'fid'-attribute!");
097:
098: return new FeatureId(fid);
099: }
100:
101: /**
102: * Given a DOM-fragment, a corresponding Expression-object is built. This method recursively
103: * calls other buildFromDOM () - methods to validate the structure of the DOM-fragment.
104: *
105: * @return feature id
106: * @throws FilterConstructionException
107: * if the structure of the DOM-fragment is invalid
108: */
109: public static FeatureId buildGMLIdFromDOM(Element element)
110: throws FilterConstructionException {
111:
112: // check if root element's name equals 'GmlObjectId'
113: if (!element.getLocalName().equals("GmlObjectId"))
114: throw new FilterConstructionException(
115: "Name of element does not equal 'GmlObjectId'!");
116:
117: // determine the requested id
118: String gmlId = element.getAttributeNS(CommonNamespaces.GMLNS
119: .toString(), "id");
120: if (gmlId == null || "".equals(gmlId))
121: throw new FilterConstructionException(
122: "<GmlObjectId> requires 'gml:id'-attribute!");
123:
124: return new FeatureId(gmlId);
125: }
126:
127: /**
128: * Returns the feature id. A feature id is built from it's feature type name and it's id
129: * separated by a ".". e.g. Road.A565
130: *
131: * @return feature id value
132: */
133: public String getValue() {
134: return value;
135: }
136:
137: /**
138: * @see org.deegree.model.filterencoding.FeatureId#getValue()
139: * @param value
140: */
141: public void setValue(String value) {
142: this .value = value;
143: }
144:
145: /**
146: * Produces an indented XML representation of this object.
147: *
148: * @return xml representation
149: */
150: public StringBuffer toXML() {
151: StringBuffer sb = new StringBuffer();
152: sb.append("<ogc:FeatureId fid=\"").append(value).append("\"/>");
153: return sb;
154: }
155: }
|