001 /*
002 * GeoAPI - Java interfaces for OGC/ISO standards
003 * http://www.geoapi.org
004 *
005 * Copyright (C) 2006-2013 Open Geospatial Consortium, Inc.
006 * All Rights Reserved. http://www.opengeospatial.org/ogc/legal
007 *
008 * Permission to use, copy, and modify this software and its documentation, with
009 * or without modification, for any purpose and without fee or royalty is hereby
010 * granted, provided that you include the following on ALL copies of the software
011 * and documentation or portions thereof, including modifications, that you make:
012 *
013 * 1. The full text of this NOTICE in a location viewable to users of the
014 * redistributed or derivative work.
015 * 2. Notice of any changes or modifications to the OGC files, including the
016 * date changes were made.
017 *
018 * THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
019 * NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
020 * TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
021 * THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
022 * PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
023 *
024 * COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
025 * CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
026 *
027 * The name and trademarks of copyright holders may NOT be used in advertising or
028 * publicity pertaining to the software without specific, written prior permission.
029 * Title to copyright in this software and any associated documentation will at all
030 * times remain with copyright holders.
031 */
032 package org.opengis.filter;
033
034 import org.opengis.filter.spatial.BBOX;
035 import org.opengis.filter.spatial.Beyond;
036 import org.opengis.filter.spatial.Contains;
037 import org.opengis.filter.spatial.Crosses;
038 import org.opengis.filter.spatial.DWithin;
039 import org.opengis.filter.spatial.Disjoint;
040 import org.opengis.filter.spatial.Equals;
041 import org.opengis.filter.spatial.Intersects;
042 import org.opengis.filter.spatial.Overlaps;
043 import org.opengis.filter.spatial.Touches;
044 import org.opengis.filter.spatial.Within;
045 import org.opengis.filter.temporal.After;
046 import org.opengis.filter.temporal.AnyInteracts;
047 import org.opengis.filter.temporal.Before;
048 import org.opengis.filter.temporal.Begins;
049 import org.opengis.filter.temporal.BegunBy;
050 import org.opengis.filter.temporal.During;
051 import org.opengis.filter.temporal.EndedBy;
052 import org.opengis.filter.temporal.Ends;
053 import org.opengis.filter.temporal.Meets;
054 import org.opengis.filter.temporal.MetBy;
055 import org.opengis.filter.temporal.OverlappedBy;
056 import org.opengis.filter.temporal.TContains;
057 import org.opengis.filter.temporal.TEquals;
058 import org.opengis.filter.temporal.TOverlaps;
059
060
061 /**
062 * Visitor with {@code visit} methods to be called by {@link Filter#accept Filter.accept(...)}.
063 * <p>
064 * Consider: It is unclear if this visitor should be applied directly to Filter, or should be walked accross
065 * the data structure by hand. The standard complient structure is well defined, and this should negate
066 * the need for a formal visitor (we don't have internal structure we are hiding).
067 * </p>
068 * <p>
069 * There is still a very valid use for FilterVisitor, a instance may implement both FilterVisitor and ExpressionVisitor
070 * and ExpressionVisitory in one direction, and a FilterVisitor and a StyleVisitor in the other. The ability
071 * to directly focus on transforming data within a larger structure is something a normal data walk
072 * can not accomplish in a scalable manner.
073 * </p>
074 * @version <A HREF="http://www.opengis.org/docs/02-059.pdf">Implementation specification 1.0</A>
075 * @author Chris Dillard (SYS Technologies)
076 * @since GeoAPI 2.0
077 */
078 public interface FilterVisitor {
079 /**
080 * Used to account for a <code>null</code> filter value.
081 * <p>
082 * This is particularly used during data structure transofrmations, however
083 * the use of <code>null</code> is not recommended. Please make use of Filter.NONE
084 * and Filter.ALL as placeholder objects that communicate intent.
085 * </p>
086 * @param extraData Value object provided to visitor
087 * @return subclass defined
088 */
089 Object visitNullFilter(Object extraData);
090
091 /**
092 * Visit {@link Filter#EXCLUDE} (often used during data structure transformations).
093 *
094 * @param filter {@link Filter#EXCLUDE}.
095 * @param extraData Value object provided to visitor
096 * @return subclass supplied
097 */
098 Object visit(ExcludeFilter filter, Object extraData);
099
100 /**
101 * Visit {@link Filter#INCLUDE} (often used during data structure transformations).
102 *
103 * @param filter {@link Filter#INCLUDE}.
104 * @param extraData Value object provided to visitor
105 * @return subclass supplied
106 */
107 Object visit(IncludeFilter filter, Object extraData);
108
109 Object visit(And filter, Object extraData);
110 Object visit(Id filter, Object extraData);
111 Object visit(Not filter, Object extraData);
112 Object visit(Or filter, Object extraData);
113 Object visit(PropertyIsBetween filter, Object extraData);
114 Object visit(PropertyIsEqualTo filter, Object extraData);
115 Object visit(PropertyIsNotEqualTo filter, Object extraData);
116 Object visit(PropertyIsGreaterThan filter, Object extraData);
117 Object visit(PropertyIsGreaterThanOrEqualTo filter, Object extraData);
118 Object visit(PropertyIsLessThan filter, Object extraData);
119 Object visit(PropertyIsLessThanOrEqualTo filter, Object extraData);
120 Object visit(PropertyIsLike filter, Object extraData);
121 Object visit(PropertyIsNull filter, Object extraData);
122 Object visit(PropertyIsNil filter, Object extraData);
123
124 Object visit(BBOX filter, Object extraData);
125 Object visit(Beyond filter, Object extraData);
126 Object visit(Contains filter, Object extraData);
127 Object visit(Crosses filter, Object extraData);
128 Object visit(Disjoint filter, Object extraData);
129 Object visit(DWithin filter, Object extraData);
130 Object visit(Equals filter, Object extraData);
131 Object visit(Intersects filter, Object extraData);
132 Object visit(Overlaps filter, Object extraData);
133 Object visit(Touches filter, Object extraData);
134 Object visit(Within filter, Object extraData);
135
136 Object visit(After filter, Object extraData);
137 Object visit(AnyInteracts filter, Object extraData);
138 Object visit(Before filter, Object extraData);
139 Object visit(Begins filter, Object extraData);
140 Object visit(BegunBy filter, Object extraData);
141 Object visit(During filter, Object extraData);
142 Object visit(EndedBy filter, Object extraData);
143 Object visit(Ends filter, Object extraData);
144 Object visit(Meets filter, Object extraData);
145 Object visit(MetBy filter, Object extraData);
146 Object visit(OverlappedBy filter, Object extraData);
147 Object visit(TContains filter, Object extraData);
148 Object visit(TEquals filter, Object extraData);
149 Object visit(TOverlaps filter, Object extraData);
150
151 }