001: /*
002: * GeoTools - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2006, GeoTools Project Managment Committee (PMC)
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation;
009: * version 2.1 of the License.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: */
016: package org.geotools.filter;
017:
018: import org.opengis.filter.And;
019: import org.opengis.filter.BinaryLogicOperator;
020: import org.opengis.filter.ExcludeFilter;
021: import org.opengis.filter.Filter;
022: import org.opengis.filter.FilterVisitor;
023: import org.opengis.filter.Id;
024: import org.opengis.filter.IncludeFilter;
025: import org.opengis.filter.Not;
026: import org.opengis.filter.Or;
027: import org.opengis.filter.PropertyIsBetween;
028: import org.opengis.filter.PropertyIsEqualTo;
029: import org.opengis.filter.PropertyIsGreaterThan;
030: import org.opengis.filter.PropertyIsGreaterThanOrEqualTo;
031: import org.opengis.filter.PropertyIsLessThan;
032: import org.opengis.filter.PropertyIsLessThanOrEqualTo;
033: import org.opengis.filter.PropertyIsLike;
034: import org.opengis.filter.PropertyIsNotEqualTo;
035: import org.opengis.filter.PropertyIsNull;
036: import org.opengis.filter.identity.FeatureId;
037: import org.opengis.filter.spatial.BBOX;
038: import org.opengis.filter.spatial.Beyond;
039: import org.opengis.filter.spatial.Contains;
040: import org.opengis.filter.spatial.Crosses;
041: import org.opengis.filter.spatial.DWithin;
042: import org.opengis.filter.spatial.Disjoint;
043: import org.opengis.filter.spatial.Equals;
044: import org.opengis.filter.spatial.Intersects;
045: import org.opengis.filter.spatial.Overlaps;
046: import org.opengis.filter.spatial.SpatialOperator;
047: import org.opengis.filter.spatial.Touches;
048: import org.opengis.filter.spatial.Within;
049:
050: /**
051: * Wraps an instanceof of {@link org.geotools.filter.FilterVisitor} in an
052: * {@link org.opengis.filter.FilterVisitorWrapper}.
053: *
054: * @author Justin Deoliveira, The Open Planning Project, jdeolive@openplans.org
055: *
056: */
057: public class FilterVisitorFilterWrapper implements FilterVisitor {
058:
059: org.geotools.filter.FilterVisitor delegate;
060:
061: public FilterVisitorFilterWrapper(
062: org.geotools.filter.FilterVisitor delegate) {
063: this .delegate = delegate;
064: }
065:
066: protected void visitLogicFilter(org.opengis.filter.Filter filter) {
067: if (filter instanceof LogicFilter) {
068: delegate.visit((LogicFilter) filter);
069: }
070: }
071:
072: protected void visitCompareFilter(org.opengis.filter.Filter filter) {
073: if (filter instanceof BetweenFilter) {
074: delegate.visit((BetweenFilter) filter);
075: return;
076: }
077:
078: if (filter instanceof NullFilter) {
079: delegate.visit((NullFilter) filter);
080: return;
081: }
082:
083: if (filter instanceof LikeFilter) {
084: delegate.visit((LikeFilter) filter);
085: }
086:
087: if (filter instanceof CompareFilter) {
088: delegate.visit((CompareFilter) filter);
089: }
090: }
091:
092: protected void visitGeometryFilter(SpatialOperator filter) {
093: if (filter instanceof GeometryFilter) {
094: delegate.visit((GeometryFilter) filter);
095: }
096: }
097:
098: public Object visit(And filter, Object extraData) {
099: visitLogicFilter(filter);
100: return extraData;
101: }
102:
103: public Object visit(Id filter, Object extraData) {
104: if (filter instanceof FidFilter) {
105: delegate.visit((FidFilter) filter);
106: }
107:
108: return extraData;
109: }
110:
111: public Object visitNullFilter(Object extraData) {
112: return extraData;
113: }
114:
115: public Object visit(IncludeFilter filter, Object extraData) {
116: if (delegate instanceof FilterVisitor2)
117: ((FilterVisitor2) delegate).visit(filter);
118: return extraData;
119: }
120:
121: public Object visit(ExcludeFilter filter, Object extraData) {
122: if (delegate instanceof FilterVisitor2)
123: ((FilterVisitor2) delegate).visit(filter);
124: return extraData;
125: }
126:
127: public Object visit(Not filter, Object extraData) {
128: visitLogicFilter(filter);
129: return extraData;
130: }
131:
132: public Object visit(Or filter, Object extraData) {
133: visitLogicFilter(filter);
134: return extraData;
135: }
136:
137: public Object visit(PropertyIsBetween filter, Object extraData) {
138: visitCompareFilter(filter);
139: return extraData;
140: }
141:
142: public Object visit(PropertyIsEqualTo filter, Object extraData) {
143: visitCompareFilter(filter);
144: return extraData;
145: }
146:
147: public Object visit(PropertyIsNotEqualTo filter, Object extraData) {
148: visitCompareFilter(filter);
149: return extraData;
150: }
151:
152: public Object visit(PropertyIsGreaterThan filter, Object extraData) {
153: visitCompareFilter(filter);
154: return extraData;
155: }
156:
157: public Object visit(PropertyIsGreaterThanOrEqualTo filter,
158: Object extraData) {
159: visitCompareFilter(filter);
160: return extraData;
161: }
162:
163: public Object visit(PropertyIsLessThan filter, Object extraData) {
164: visitCompareFilter(filter);
165: return extraData;
166: }
167:
168: public Object visit(PropertyIsLessThanOrEqualTo filter,
169: Object extraData) {
170: visitCompareFilter(filter);
171: return extraData;
172: }
173:
174: public Object visit(PropertyIsLike filter, Object extraData) {
175: visitCompareFilter(filter);
176: return extraData;
177: }
178:
179: public Object visit(PropertyIsNull filter, Object extraData) {
180: visitCompareFilter(filter);
181: return extraData;
182: }
183:
184: public Object visit(BBOX filter, Object extraData) {
185: visitGeometryFilter(filter);
186: return extraData;
187: }
188:
189: public Object visit(Beyond filter, Object extraData) {
190: visitGeometryFilter(filter);
191: return extraData;
192: }
193:
194: public Object visit(Contains filter, Object extraData) {
195: visitGeometryFilter(filter);
196: return extraData;
197: }
198:
199: public Object visit(Crosses filter, Object extraData) {
200: visitGeometryFilter(filter);
201: return extraData;
202: }
203:
204: public Object visit(Disjoint filter, Object extraData) {
205: visitGeometryFilter(filter);
206: return extraData;
207: }
208:
209: public Object visit(DWithin filter, Object extraData) {
210: visitGeometryFilter(filter);
211: return extraData;
212: }
213:
214: public Object visit(Equals filter, Object extraData) {
215: visitGeometryFilter(filter);
216: return extraData;
217: }
218:
219: public Object visit(Intersects filter, Object extraData) {
220: visitGeometryFilter(filter);
221: return extraData;
222: }
223:
224: public Object visit(Overlaps filter, Object extraData) {
225: visitGeometryFilter(filter);
226: return extraData;
227: }
228:
229: public Object visit(Touches filter, Object extraData) {
230: visitGeometryFilter(filter);
231: return extraData;
232: }
233:
234: public Object visit(Within filter, Object extraData) {
235: visitGeometryFilter(filter);
236: return extraData;
237: }
238: }
|