001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/model/filterencoding/FeatureFilter.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 java.util.ArrayList;
047:
048: import org.deegree.model.feature.Feature;
049:
050: /**
051: * Encapsulates the information of a <Filter>element that consists of a number of FeatureId
052: * constraints (only) (as defined in the FeatureId DTD).
053: *
054: * @author Markus Schneider
055: * @version 06.08.2002
056: */
057: public class FeatureFilter extends AbstractFilter {
058:
059: /** FeatureIds the FeatureFilter is based on */
060: private ArrayList<FeatureId> featureIds = new ArrayList<FeatureId>();
061:
062: public FeatureFilter() {
063: }
064:
065: public FeatureFilter(ArrayList<FeatureId> fids) {
066: this .featureIds = fids;
067: }
068:
069: /**
070: * Adds a FeatureId constraint.
071: *
072: * @param featureId
073: *
074: */
075: public void addFeatureId(FeatureId featureId) {
076: featureIds.add(featureId);
077: }
078:
079: /**
080: * @return the contained FeatureIds.
081: *
082: */
083: public ArrayList<FeatureId> getFeatureIds() {
084: return featureIds;
085: }
086:
087: /**
088: * Calculates the <tt>FeatureFilter</tt>'s logical value based on the ID of the given
089: * <tt>Feature</tt>. FIXME!!! Use a TreeSet (or something) to speed up comparison.
090: *
091: * @param feature
092: * that determines the Id
093: * @return true, if the <tt>FeatureFilter</tt> evaluates to true, else false
094: * @throws FilterEvaluationException
095: * if the evaluation fails
096: */
097: public boolean evaluate(Feature feature)
098: throws FilterEvaluationException {
099: String id = feature.getId();
100: for (int i = 0; i < featureIds.size(); i++) {
101: FeatureId featureId = featureIds.get(i);
102: if (id.equals(featureId.getValue()))
103: return true;
104: }
105: return false;
106: }
107:
108: /** Produces an indented XML representation of this object. */
109: @Override
110: public StringBuffer toXML() {
111: StringBuffer sb = new StringBuffer(500);
112: sb
113: .append("<ogc:Filter xmlns:ogc='http://www.opengis.net/ogc'>");
114: for (int i = 0; i < featureIds.size(); i++) {
115: FeatureId fid = featureIds.get(i);
116: sb.append(fid.toXML());
117: }
118: sb.append("</ogc:Filter>");
119: return sb;
120: }
121: }
|