KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > jxpath > ri > Compiler


1 /*
2  * Copyright 1999-2004 The Apache Software Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.apache.commons.jxpath.ri;
17
18 /**
19  * The Compiler APIs are completely agnostic to the actual types of objects
20  * produced and consumed by the APIs. Arguments and return values are
21  * declared as java.lang.Object.
22  * <p>
23  * Since objects returned by Compiler methods are passed as arguments to other
24  * Compiler methods, the descriptions of these methods use virtual types. There
25  * are four virtual object types: EXPRESSION, QNAME, STEP and NODE_TEST.
26  * <p>
27  * The following example illustrates this notion. This sequence compiles
28  * the xpath "foo[round(1 div 2)]/text()":
29  * <blockquote><pre>
30  * Object qname1 = compiler.qname(null, "foo")
31  * Object expr1 = compiler.number("1");
32  * Object expr2 = compiler.number("2");
33  * Object expr3 = compiler.div(expr1, expr2);
34  * Object expr4 = compiler.
35  * coreFunction(Compiler.FUNCTION_ROUND, new Object[]{expr3});
36  * Object test1 = compiler.nodeNameTest(qname1);
37  * Object step1 = compiler.
38  * step(Compiler.AXIS_CHILD, test1, new Object[]{expr4});
39  * Object test2 = compiler.nodeTypeTest(Compiler.NODE_TYPE_TEXT);
40  * Object step2 = compiler.nodeTypeTest(Compiler.AXIS_CHILD, test2, null);
41  * Object expr5 = compiler.locationPath(false, new Object[]{step1, step2});
42  * </pre></blockquote>
43  *
44  * @author Dmitri Plotnikov
45  * @version $Revision: 1.9 $ $Date: 2004/02/29 14:17:45 $
46  */

47 public interface Compiler {
48
49     public static final int NODE_TYPE_NODE = 1;
50     public static final int NODE_TYPE_TEXT = 2;
51     public static final int NODE_TYPE_COMMENT = 3;
52     public static final int NODE_TYPE_PI = 4;
53
54     public static final int AXIS_SELF = 1;
55     public static final int AXIS_CHILD = 2;
56     public static final int AXIS_PARENT = 3;
57     public static final int AXIS_ANCESTOR = 4;
58     public static final int AXIS_ATTRIBUTE = 5;
59     public static final int AXIS_NAMESPACE = 6;
60     public static final int AXIS_PRECEDING = 7;
61     public static final int AXIS_FOLLOWING = 8;
62     public static final int AXIS_DESCENDANT = 9;
63     public static final int AXIS_ANCESTOR_OR_SELF = 10;
64     public static final int AXIS_FOLLOWING_SIBLING = 11;
65     public static final int AXIS_PRECEDING_SIBLING = 12;
66     public static final int AXIS_DESCENDANT_OR_SELF = 13;
67
68     public static final int FUNCTION_LAST = 1;
69     public static final int FUNCTION_POSITION = 2;
70     public static final int FUNCTION_COUNT = 3;
71     public static final int FUNCTION_ID = 4;
72     public static final int FUNCTION_LOCAL_NAME = 5;
73     public static final int FUNCTION_NAMESPACE_URI = 6;
74     public static final int FUNCTION_NAME = 7;
75     public static final int FUNCTION_STRING = 8;
76     public static final int FUNCTION_CONCAT = 9;
77     public static final int FUNCTION_STARTS_WITH = 10;
78     public static final int FUNCTION_CONTAINS = 11;
79     public static final int FUNCTION_SUBSTRING_BEFORE = 12;
80     public static final int FUNCTION_SUBSTRING_AFTER = 13;
81     public static final int FUNCTION_SUBSTRING = 14;
82     public static final int FUNCTION_STRING_LENGTH = 15;
83     public static final int FUNCTION_NORMALIZE_SPACE = 16;
84     public static final int FUNCTION_TRANSLATE = 17;
85     public static final int FUNCTION_BOOLEAN = 18;
86     public static final int FUNCTION_NOT = 19;
87     public static final int FUNCTION_TRUE = 20;
88     public static final int FUNCTION_FALSE = 21;
89     public static final int FUNCTION_LANG = 22;
90     public static final int FUNCTION_NUMBER = 23;
91     public static final int FUNCTION_SUM = 24;
92     public static final int FUNCTION_FLOOR = 25;
93     public static final int FUNCTION_CEILING = 26;
94     public static final int FUNCTION_ROUND = 27;
95     public static final int FUNCTION_NULL = 28;
96     public static final int FUNCTION_KEY = 29;
97     public static final int FUNCTION_FORMAT_NUMBER = 30;
98
99     /**
100      * Produces an EXPRESSION object that represents a numeric constant.
101      */

102     Object JavaDoc number(String JavaDoc value);
103
104     /**
105      * Produces an EXPRESSION object that represents a string constant.
106      */

107     Object JavaDoc literal(String JavaDoc value);
108
109     /**
110      * Produces an QNAME that represents a name with an optional prefix.
111      */

112     Object JavaDoc qname(String JavaDoc prefix, String JavaDoc name);
113
114     /**
115      * Produces an EXPRESSION object representing the sum of all argumens
116      *
117      * @param arguments are EXPRESSION objects
118      */

119     Object JavaDoc sum(Object JavaDoc[] arguments);
120
121     /**
122      * Produces an EXPRESSION object representing <i>left</i> minus <i>right</i>
123      *
124      * @param left is an EXPRESSION object
125      * @param right is an EXPRESSION object
126      */

127     Object JavaDoc minus(Object JavaDoc left, Object JavaDoc right);
128
129     /**
130      * Produces an EXPRESSION object representing <i>left</i> multiplied by
131      * <i>right</i>
132      *
133      * @param left is an EXPRESSION object
134      * @param right is an EXPRESSION object
135      */

136     Object JavaDoc multiply(Object JavaDoc left, Object JavaDoc right);
137
138     /**
139      * Produces an EXPRESSION object representing <i>left</i> divided by
140      * <i>right</i>
141      *
142      * @param left is an EXPRESSION object
143      * @param right is an EXPRESSION object
144      */

145     Object JavaDoc divide(Object JavaDoc left, Object JavaDoc right);
146
147     /**
148      * Produces an EXPRESSION object representing <i>left</i> modulo
149      * <i>right</i>
150      *
151      * @param left is an EXPRESSION object
152      * @param right is an EXPRESSION object
153      */

154     Object JavaDoc mod(Object JavaDoc left, Object JavaDoc right);
155
156     /**
157      * Produces an EXPRESSION object representing the comparison:
158      * <i>left</i> less than <i>right</i>
159      *
160      * @param left is an EXPRESSION object
161      * @param right is an EXPRESSION object
162      */

163     Object JavaDoc lessThan(Object JavaDoc left, Object JavaDoc right);
164
165     /**
166      * Produces an EXPRESSION object representing the comparison:
167      * <i>left</i> less than or equal to <i>right</i>
168      *
169      * @param left is an EXPRESSION object
170      * @param right is an EXPRESSION object
171      */

172     Object JavaDoc lessThanOrEqual(Object JavaDoc left, Object JavaDoc right);
173
174     /**
175      * Produces an EXPRESSION object representing the comparison:
176      * <i>left</i> greater than <i>right</i>
177      *
178      * @param left is an EXPRESSION object
179      * @param right is an EXPRESSION object
180      */

181     Object JavaDoc greaterThan(Object JavaDoc left, Object JavaDoc right);
182
183     /**
184      * Produces an EXPRESSION object representing the comparison:
185      * <i>left</i> greater than or equal to <i>right</i>
186      *
187      * @param left is an EXPRESSION object
188      * @param right is an EXPRESSION object
189      */

190     Object JavaDoc greaterThanOrEqual(Object JavaDoc left, Object JavaDoc right);
191
192     /**
193      * Produces an EXPRESSION object representing the comparison:
194      * <i>left</i> equals to <i>right</i>
195      *
196      * @param left is an EXPRESSION object
197      * @param right is an EXPRESSION object
198      */

199     Object JavaDoc equal(Object JavaDoc left, Object JavaDoc right);
200
201     /**
202      * Produces an EXPRESSION object representing the comparison:
203      * <i>left</i> is not equal to <i>right</i>
204      *
205      * @param left is an EXPRESSION object
206      * @param right is an EXPRESSION object
207      */

208     Object JavaDoc notEqual(Object JavaDoc left, Object JavaDoc right);
209
210     /**
211      * Produces an EXPRESSION object representing unary negation of the argument
212      *
213      * @param argument is an EXPRESSION object
214      */

215     Object JavaDoc minus(Object JavaDoc argument);
216
217     /**
218      * Produces an EXPRESSION object representing variable reference
219      *
220      * @param qname is a QNAME object
221      */

222     Object JavaDoc variableReference(Object JavaDoc qName);
223
224     /**
225      * Produces an EXPRESSION object representing the computation of
226      * a core function with the supplied arguments.
227      *
228      * @param code is one of FUNCTION_... constants
229      * @param args are EXPRESSION objects
230      */

231     Object JavaDoc function(int code, Object JavaDoc[] args);
232
233     /**
234      * Produces an EXPRESSION object representing the computation of
235      * a library function with the supplied arguments.
236      *
237      * @param name is a QNAME object (function name)
238      * @param args are EXPRESSION objects
239      */

240     Object JavaDoc function(Object JavaDoc name, Object JavaDoc[] args);
241
242     /**
243      * Produces an EXPRESSION object representing logical conjunction of
244      * all arguments
245      *
246      * @param arguments are EXPRESSION objects
247      */

248     Object JavaDoc and(Object JavaDoc arguments[]);
249
250     /**
251      * Produces an EXPRESSION object representing logical disjunction of
252      * all arguments
253      *
254      * @param arguments are EXPRESSION objects
255      */

256     Object JavaDoc or(Object JavaDoc arguments[]);
257
258     /**
259      * Produces an EXPRESSION object representing union of all node sets
260      *
261      * @param arguments are EXPRESSION objects
262      */

263     Object JavaDoc union(Object JavaDoc[] arguments);
264
265     /**
266      * Produces a NODE_TEST object that represents a node name test.
267      *
268      * @param qname is a QNAME object
269      */

270     Object JavaDoc nodeNameTest(Object JavaDoc qname);
271
272     /**
273      * Produces a NODE_TEST object that represents a node type test.
274      *
275      * @param qname is a QNAME object
276      */

277     Object JavaDoc nodeTypeTest(int nodeType);
278
279     /**
280      * Produces a NODE_TEST object that represents a processing instruction
281      * test.
282      *
283      * @param qname is a QNAME object
284      */

285     Object JavaDoc processingInstructionTest(String JavaDoc instruction);
286
287     /**
288      * Produces a STEP object that represents a node test.
289      *
290      * @param axis is one of the AXIS_... constants
291      * @param nodeTest is a NODE_TEST object
292      * @param predicates are EXPRESSION objects
293      */

294     Object JavaDoc step(int axis, Object JavaDoc nodeTest, Object JavaDoc[] predicates);
295
296     /**
297      * Produces an EXPRESSION object representing a location path
298      *
299      * @param absolute indicates whether the path is absolute
300      * @param steps are STEP objects
301      */

302     Object JavaDoc locationPath(boolean absolute, Object JavaDoc[] steps);
303
304     /**
305      * Produces an EXPRESSION object representing a filter expression
306      *
307      * @param expression is an EXPRESSION object
308      * @param predicates are EXPRESSION objects
309      * @param steps are STEP objects
310      */

311     Object JavaDoc expressionPath(
312         Object JavaDoc expression,
313         Object JavaDoc[] predicates,
314         Object JavaDoc[] steps);
315 }
Popular Tags