001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the "License");
007 * you may not use this file except in compliance with the License.
008 * You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 /*
019 * $Id: XPathVisitor.java 468655 2006-10-28 07:12:06Z minchau $
020 */
021 package org.apache.xpath;
022
023 import org.apache.xpath.axes.LocPathIterator;
024 import org.apache.xpath.axes.UnionPathIterator;
025 import org.apache.xpath.functions.Function;
026 import org.apache.xpath.objects.XNumber;
027 import org.apache.xpath.objects.XString;
028 import org.apache.xpath.operations.Operation;
029 import org.apache.xpath.operations.UnaryOperation;
030 import org.apache.xpath.operations.Variable;
031 import org.apache.xpath.patterns.NodeTest;
032 import org.apache.xpath.patterns.StepPattern;
033 import org.apache.xpath.patterns.UnionPattern;
034
035 /**
036 * A derivation from this class can be passed to a class that implements
037 * the XPathVisitable interface, to have the appropriate method called
038 * for each component of the XPath. Aside from possible other uses, the
039 * main intention is to provide a reasonable means to perform expression
040 * rewriting.
041 *
042 * <p>Each method has the form
043 * <code>boolean visitComponentType(ExpressionOwner owner, ComponentType compType)</code>.
044 * The ExpressionOwner argument is the owner of the component, and can
045 * be used to reset the expression for rewriting. If a method returns
046 * false, the sub hierarchy will not be traversed.</p>
047 *
048 * <p>This class is meant to be a base class that will be derived by concrete classes,
049 * and doesn't much except return true for each method.</p>
050 */
051 public class XPathVisitor
052 {
053 /**
054 * Visit a LocationPath.
055 * @param owner The owner of the expression, to which the expression can
056 * be reset if rewriting takes place.
057 * @param path The LocationPath object.
058 * @return true if the sub expressions should be traversed.
059 */
060 public boolean visitLocationPath(ExpressionOwner owner, LocPathIterator path)
061 {
062 return true;
063 }
064
065 /**
066 * Visit a UnionPath.
067 * @param owner The owner of the expression, to which the expression can
068 * be reset if rewriting takes place.
069 * @param path The UnionPath object.
070 * @return true if the sub expressions should be traversed.
071 */
072 public boolean visitUnionPath(ExpressionOwner owner, UnionPathIterator path)
073 {
074 return true;
075 }
076
077 /**
078 * Visit a step within a location path.
079 * @param owner The owner of the expression, to which the expression can
080 * be reset if rewriting takes place.
081 * @param step The Step object.
082 * @return true if the sub expressions should be traversed.
083 */
084 public boolean visitStep(ExpressionOwner owner, NodeTest step)
085 {
086 return true;
087 }
088
089 /**
090 * Visit a predicate within a location path. Note that there isn't a
091 * proper unique component for predicates, and that the expression will
092 * be called also for whatever type Expression is.
093 *
094 * @param owner The owner of the expression, to which the expression can
095 * be reset if rewriting takes place.
096 * @param pred The predicate object.
097 * @return true if the sub expressions should be traversed.
098 */
099 public boolean visitPredicate(ExpressionOwner owner, Expression pred)
100 {
101 return true;
102 }
103
104 /**
105 * Visit a binary operation.
106 * @param owner The owner of the expression, to which the expression can
107 * be reset if rewriting takes place.
108 * @param op The operation object.
109 * @return true if the sub expressions should be traversed.
110 */
111 public boolean visitBinaryOperation(ExpressionOwner owner, Operation op)
112 {
113 return true;
114 }
115
116 /**
117 * Visit a unary operation.
118 * @param owner The owner of the expression, to which the expression can
119 * be reset if rewriting takes place.
120 * @param op The operation object.
121 * @return true if the sub expressions should be traversed.
122 */
123 public boolean visitUnaryOperation(ExpressionOwner owner, UnaryOperation op)
124 {
125 return true;
126 }
127
128 /**
129 * Visit a variable reference.
130 * @param owner The owner of the expression, to which the expression can
131 * be reset if rewriting takes place.
132 * @param var The variable reference object.
133 * @return true if the sub expressions should be traversed.
134 */
135 public boolean visitVariableRef(ExpressionOwner owner, Variable var)
136 {
137 return true;
138 }
139
140 /**
141 * Visit a function.
142 * @param owner The owner of the expression, to which the expression can
143 * be reset if rewriting takes place.
144 * @param func The function reference object.
145 * @return true if the sub expressions should be traversed.
146 */
147 public boolean visitFunction(ExpressionOwner owner, Function func)
148 {
149 return true;
150 }
151
152 /**
153 * Visit a match pattern.
154 * @param owner The owner of the expression, to which the expression can
155 * be reset if rewriting takes place.
156 * @param pattern The match pattern object.
157 * @return true if the sub expressions should be traversed.
158 */
159 public boolean visitMatchPattern(ExpressionOwner owner, StepPattern pattern)
160 {
161 return true;
162 }
163
164 /**
165 * Visit a union pattern.
166 * @param owner The owner of the expression, to which the expression can
167 * be reset if rewriting takes place.
168 * @param pattern The union pattern object.
169 * @return true if the sub expressions should be traversed.
170 */
171 public boolean visitUnionPattern(ExpressionOwner owner, UnionPattern pattern)
172 {
173 return true;
174 }
175
176 /**
177 * Visit a string literal.
178 * @param owner The owner of the expression, to which the expression can
179 * be reset if rewriting takes place.
180 * @param str The string literal object.
181 * @return true if the sub expressions should be traversed.
182 */
183 public boolean visitStringLiteral(ExpressionOwner owner, XString str)
184 {
185 return true;
186 }
187
188
189 /**
190 * Visit a number literal.
191 * @param owner The owner of the expression, to which the expression can
192 * be reset if rewriting takes place.
193 * @param num The number literal object.
194 * @return true if the sub expressions should be traversed.
195 */
196 public boolean visitNumberLiteral(ExpressionOwner owner, XNumber num)
197 {
198 return true;
199 }
200
201
202 }
203