/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * 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; * version 2.1 of the License. * * 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. */ package org.geotools.filter.visitor; import org.opengis.filter.expression.Add; import org.opengis.filter.expression.Divide; import org.opengis.filter.expression.Expression; import org.opengis.filter.expression.ExpressionVisitor; import org.opengis.filter.expression.Function; import org.opengis.filter.expression.Literal; import org.opengis.filter.expression.Multiply; import org.opengis.filter.expression.NilExpression; import org.opengis.filter.expression.PropertyName; import org.opengis.filter.expression.Subtract; /** * Abstract implementation of ExpressionVisitor that simply walks the data structure. * <p> * This class implements the full ExpressionVisitor interface and will visit every Filter member * of an Expression object. This class performs no actions and is not intended to be used directly, * instead * extend it and overide the methods for the Expression type you are interested in. Remember to call the * super method if you want to ensure that the entire expression tree is still visited. * * <pre><code> * FilterVisitor allProperties = new DefaultExpressionVisitor(){ * public Object visit( PropertyName expr, Object data ) { * Set set = (Set) data; * set.addAll(expr.getPropertyName()); * return set; * } * }; * Set set = (Set) allProperties.accept(allFids, new HashSet()); * </code></pre> * * @author Jody * * * @source $URL$ */ public abstract class DefaultExpressionVisitor implements ExpressionVisitor { public DefaultExpressionVisitor() { } public Object visit( NilExpression expression, Object data ) { return data; } public Object visit( Add expression, Object data ) { data = expression.getExpression1().accept( this, data); data = expression.getExpression2().accept( this, data); return data; } public Object visit( Divide expression, Object data ) { data = expression.getExpression1().accept( this, data); data = expression.getExpression2().accept( this, data); return data; } public Object visit( Function expression, Object data ) { if( expression.getParameters() != null ){ for( Expression parameter : expression.getParameters() ){ data = parameter.accept( this, data); } } return data; } public Object visit( Literal expression, Object data ) { return data; } public Object visit( Multiply expression, Object data ) { data = expression.getExpression1().accept( this, data); data = expression.getExpression2().accept( this, data); return data; } public Object visit( PropertyName expression, Object data ) { return data; } public Object visit( Subtract expression, Object data ) { data = expression.getExpression1().accept( this, data); data = expression.getExpression2().accept( this, data); return data; } }