/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2011, Open Source Geospatial Foundation (OSGeo)
* (C) 2005, Open Geospatial Consortium Inc.
*
* All Rights Reserved. http://www.opengis.org/legal/
*/
package org.opengis.filter.expression;
// Annotation
import org.opengis.annotation.Extension;
/**
* Visitor with {@code visit} methods to be called by {@link Expression#accept Expression.accept(...)}.
* <p>
* Please note that a generic visit( Expression ) entry point has not been provided, although Expression
* forms a heirarchy for your convience it is not an open heirarchy. If you need to extend this system
* please make use of {code Function}, this will allow extention while remaining standards complient.
* </p>
* <p>
* It is very common for a single instnace to implement both ExpressionVisitor and FilterVisitor.
* </p>
*
*
* @source $URL: http://svn.osgeo.org/geotools/trunk/modules/library/opengis/src/main/java/org/opengis/filter/expression/ExpressionVisitor.java $
* @version <A HREF="http://www.opengis.org/docs/02-059.pdf">Implementation specification 1.0</A>
* @author Chris Dillard (SYS Technologies)
* @since GeoAPI 2.0
*/
@Extension
public interface ExpressionVisitor {
/**
* Used to visit a Expression.NIL, also called for <code>null</code> where an
* expression is expected.
* <p>
* This is particularly useful when doing data transformations, as an example when
* using a StyleSymbolizer Expression.NIL can be used to represent the default
* stroke color.
* </p>
* @param extraData
* @return implementation specific
*/
Object visit(NilExpression expression, Object extraData);
Object visit(Add expression, Object extraData);
Object visit(Divide expression, Object extraData);
Object visit(Function expression, Object extraData);
Object visit(Literal expression, Object extraData);
Object visit(Multiply expression, Object extraData);
Object visit(PropertyName expression, Object extraData);
Object visit(Subtract expression, Object extraData);
}