/*---------------- FILE HEADER ------------------------------------------ This file is part of deegree. Copyright (C) 2001-2006 by: EXSE, Department of Geography, University of Bonn http://www.giub.uni-bonn.de/deegree/ lat/lon GmbH http://www.lat-lon.de This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact: Andreas Poth lat/lon GmbH Aennchenstr. 19 53115 Bonn Germany E-Mail: poth@lat-lon.de Prof. Dr. Klaus Greve Department of Geography University of Bonn Meckenheimer Allee 166 53115 Bonn Germany E-Mail: greve@giub.uni-bonn.de ---------------------------------------------------------------------------*/ package org.deegree.model.filterencoding; import java.util.ArrayList; import org.deegree.model.feature.Feature; /** * Encapsulates the information of a <Filter> element that contains an * Operation (only) (as defined in the Filter DTD). * Operation is one of the following types: * <ul> * <li>spatial_ops</li> * <li>comparison_ops</li> * <li>logical_ops</li> * </ul> * * @author Markus Schneider * @version 06.08.2002 */ public class ComplexFilter extends AbstractFilter { /** * Operation the ComplexFilter is based on */ private Operation operation; /** Constructs a new ComplexFilter based on the given operation. */ public ComplexFilter (Operation operation) { this.operation = operation; } /** * Constructs a new <tt>ComplexFilter<tt> that consists of an * empty <tt>LogicalOperation</tt> of the given type. * <p> * @param operatorId OperationDefines.AND, OperationDefines.OR or * OperationDefines.NOT * @throws FilterConstructionException */ public ComplexFilter (int operatorId) { operation = new LogicalOperation (operatorId, new ArrayList ()); } /** * Constructs a new <tt>ComplexFilter<tt> that consists of a * <tt>LogicalOperation</tt> with the given <tt>Filter</tt>. * <p> * @param filter1 first Filter to be used * @param filter2 second Filter to be used * null, if operatorId == OperationDefines.NOT * @param operatorId OperationDefines.AND, OperationDefines.OR or * OperationDefines.NOT * @throws FilterConstructionException */ public ComplexFilter (ComplexFilter filter1, ComplexFilter filter2, int operatorId) { // extract the Operations from the Filters ArrayList arguments = new ArrayList (); arguments.add (filter1.getOperation()); if (filter2 != null) arguments.add (filter2.getOperation()); operation = new LogicalOperation (operatorId, arguments); } /** * Returns the contained Operation. * */ public Operation getOperation() { return operation; } /** * Calculates the <tt>Filter</tt>'s logical value based on the certain * property values of the given feature. * @param feature that determines the values of <tt>PropertyNames</tt> * in the expression * @return true, if the <tt>Filter</tt> evaluates to true, else false * @throws FilterEvaluationException if the evaluation fails */ public boolean evaluate (Feature feature) throws FilterEvaluationException { return operation.evaluate (feature); } /** Produces an indented XML representation of this object. */ public StringBuffer toXML () { StringBuffer sb = new StringBuffer (1000); sb.append ("<ogc:Filter xmlns:ogc='http://www.opengis.net/ogc'>"); sb.append (operation.toXML ()); sb.append ("</ogc:Filter>\n"); return sb; } } /* ******************************************************************** Changes to this class. What the people have been up to: $Log: ComplexFilter.java,v $ Revision 1.9 2006/07/12 14:46:14 poth comment footer added ********************************************************************** */