01: package org.apache.ojb.jdo.jdoql;
02:
03: /* Copyright 2003-2005 The Apache Software Foundation
04: *
05: * Licensed under the Apache License, Version 2.0 (the "License");
06: * you may not use this file except in compliance with the License.
07: * You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17:
18: /**
19: * Common base class for all JDOQL expressions.
20: *
21: * @author <a href="mailto:tomdz@apache.org">Thomas Dudziak</a>
22: */
23: public abstract class Expression extends QueryTreeNode {
24: /** The parent expression if any */
25: private Expression _parent;
26:
27: /**
28: * Determines whether this expression has a parent expression
29: * (i.e. an expression where this expression is an inner or base expression).
30: *
31: * @return <code>true</code> if this expression has a parent expression
32: */
33: public boolean hasParent() {
34: return _parent != null;
35: }
36:
37: /**
38: * Returns the parent expression of this expression if it exists.
39: *
40: * @return The parent expression or <code>null</code> if this expression
41: * has no parent
42: */
43: public Expression getParent() {
44: return _parent;
45: }
46:
47: /**
48: * Sets the parent expression of this expression. Note that this method
49: * does not remove this expression from the parent.
50: *
51: * @param parent The new parent expression
52: */
53: public void setParent(Expression parent) {
54: _parent = parent;
55: }
56:
57: /**
58: * Replaces the given old child expression with the new one. This also sets this
59: * expression as the parent of the new child and removes it from the old child.
60: *
61: * @param oldChild The old child to be replaced
62: * @param newChild The new child
63: */
64: public void replaceChild(Expression oldChild, Expression newChild) {
65: }
66:
67: /**
68: * Returns the type of this expression. Note that in the case of primitives,
69: * the type only declares the general kind, not the actual data type. For instance,
70: * a literal of type {@link Long} can be a <code>byte</code>, <code>short</code>,
71: * <code>int</code>, <code>long</code>, or {@link java.math.BigInteger} value.
72: *
73: * @return The type
74: */
75: public abstract Class getType();
76: }
|