Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Args.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Args.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Args.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Args.java Fri Aug 18 18:03:35 2006 @@ -49,10 +49,6 @@ return (Value[]) _args.toArray(new Value[_args.size()]); } - public boolean isVariable() { - return false; - } - public Class getType() { return Object[].class; } @@ -67,18 +63,18 @@ public void setImplicitType(Class type) { } - public boolean hasVariables() { - for (int i = 0; i < _args.size(); i++) - if (((Val) _args.get(i)).hasVariables()) - return true; - return false; - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { Object[] vals = new Object[_args.size()]; for (int i = 0; i < _args.size(); i++) vals[i] = ((Val) _args.get(i)).eval(candidate, orig, ctx, params); return vals; + } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + for (int i = 0; i < _args.size(); i++) + ((Val) _args.get(i)).acceptVisit(visitor); + visitor.exit(this); } }
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/BindVariableExpression.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/BindVariableExpression.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/BindVariableExpression.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/BindVariableExpression.java Fri Aug 18 18:03:35 2006 @@ -79,5 +79,12 @@ Object obj = candidates.iterator().next(); return eval(obj, obj, ctx, params); } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _var.acceptVisit(visitor); + _val.acceptVisit(visitor); + visitor.exit(this); + } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/BoundVariable.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/BoundVariable.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/BoundVariable.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/BoundVariable.java Fri Aug 18 18:03:35 2006 @@ -63,10 +63,6 @@ _type = type; } - public boolean hasVariables() { - return true; - } - /** * Cast this value to the given type. */ Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/CandidatePath.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/CandidatePath.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/CandidatePath.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/CandidatePath.java Fri Aug 18 18:03:35 2006 @@ -48,10 +48,6 @@ _actions.add(new Traversal(field, nullTraversal)); } - public boolean isVariable() { - return false; - } - public Class getType() { if (_actions == null) return getCandidateType(); @@ -71,10 +67,6 @@ } public void setImplicitType(Class type) { - } - - public boolean hasVariables() { - return false; } public FieldMetaData last() { Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Cast.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Cast.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Cast.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Cast.java Fri Aug 18 18:03:35 2006 @@ -41,10 +41,6 @@ _cast = cast; } - public boolean isVariable() { - return _val.isVariable(); - } - public Class getType() { return _cast; } @@ -52,10 +48,6 @@ public void setImplicitType(Class type) { } - public boolean hasVariables() { - return _val.hasVariables(); - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { return Filters.convert(_val.eval(candidate, orig, ctx, params), _cast); @@ -71,5 +63,11 @@ for (Iterator itr = res.iterator(); itr.hasNext();) casts.add(Filters.convert(itr.next(), _cast)); return casts; + } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + visitor.exit(this); } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/CompareExpression.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/CompareExpression.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/CompareExpression.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/CompareExpression.java Fri Aug 18 18:03:35 2006 @@ -72,4 +72,11 @@ * Compare the two values. */ protected abstract boolean compare(Object o1, Object o2); + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val1.acceptVisit(visitor); + _val2.acceptVisit(visitor); + visitor.exit(this); + } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Concat.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Concat.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Concat.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Concat.java Fri Aug 18 18:03:35 2006 @@ -37,10 +37,6 @@ _args = args; } - public boolean isVariable() { - return false; - } - public Class getType() { return String.class; } @@ -48,10 +44,6 @@ public void setImplicitType(Class type) { } - public boolean hasVariables() { - return _val.hasVariables() || _args.hasVariables(); - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { Object str = _val.eval(candidate, orig, ctx, params); @@ -65,6 +57,13 @@ cat.append(arg.toString()); return cat.toString(); + } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + _args.acceptVisit(visitor); + visitor.exit(this); } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ContainsExpression.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ContainsExpression.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ContainsExpression.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ContainsExpression.java Fri Aug 18 18:03:35 2006 @@ -70,5 +70,12 @@ protected Collection getCollection(Object obj) { return (Collection) obj; } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val1.acceptVisit(visitor); + _val2.acceptVisit(visitor); + visitor.exit(this); + } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/CurrentDate.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/CurrentDate.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/CurrentDate.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/CurrentDate.java Fri Aug 18 18:03:35 2006 @@ -27,14 +27,6 @@ class CurrentDate extends Val { - public boolean hasVariables() { - return false; - } - - public boolean isVariable() { - return false; - } - public Class getType() { return Date.class; } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Distinct.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Distinct.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Distinct.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Distinct.java Fri Aug 18 18:03:35 2006 @@ -38,10 +38,6 @@ _val = val; } - public boolean isVariable() { - return false; - } - public Class getType() { return Collection.class; } @@ -49,18 +45,12 @@ public void setImplicitType(Class type) { } - public boolean hasVariables() { - return _val.hasVariables(); - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { if (candidate == null) candidate = Collections.EMPTY_LIST; - Collection arg = candidate instanceof Collection ? (Collection) candidate : Collections.singleton(candidate); - return eval(arg, orig, ctx, params).iterator().next(); } @@ -68,6 +58,12 @@ StoreContext ctx, Object[] params) { Collection args = _val.eval(candidates, orig, ctx, params); return new HashSet(args); + } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + visitor.exit(this); } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Exp.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Exp.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Exp.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Exp.java Fri Aug 18 18:03:35 2006 @@ -71,4 +71,9 @@ Object[] params) { return true; } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + visitor.exit(this); + } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Expression.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Expression.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Expression.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Expression.java Fri Aug 18 18:03:35 2006 @@ -16,11 +16,15 @@ package org.apache.openjpa.kernel.exps; /** - * Marker interface for a set of conditions that must be met for the query + * Interface for a set of conditions that must be met for the query * to be true. * * @author Abe White */ public interface Expression { + /** + * Accept a visit from a tree visitor. + */ + public void acceptVisit(ExpressionVisitor visitor); } Added: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ExpressionVisitor.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ExpressionVisitor.java?rev=432778&view=auto ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ExpressionVisitor.java (added) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ExpressionVisitor.java Fri Aug 18 18:03:35 2006 @@ -0,0 +1,31 @@ +package org.apache.openjpa.kernel.exps; + + +/** + * Visits nodes of a query expression tree. + * + * @author Abe White + */ +public interface ExpressionVisitor { + + /** + * Enter an expression. The expression will then invoke visits on its + * components. + */ + public void enter(Expression exp); + + /** + * Leave an expression. + */ + public void exit(Expression exp); + + /** + * Enter a value. The value will then invoke visits on its components. + */ + public void enter(Value val); + + /** + * Leave a value. + */ + public void exit(Value val); +} Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Extension.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Extension.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Extension.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Extension.java Fri Aug 18 18:03:35 2006 @@ -39,10 +39,6 @@ _arg = arg; } - public boolean isVariable() { - return false; - } - public Class getType() { Class targetClass = (_target == null) ? null : _target.getType(); return _listener.getType(targetClass, getArgTypes()); @@ -51,11 +47,6 @@ public void setImplicitType(Class type) { } - public boolean hasVariables() { - return _target != null && _target.hasVariables() - || _arg != null && _arg.hasVariables(); - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { Object target = null; @@ -85,6 +76,15 @@ if (_arg instanceof Args) return (Object[]) arg; return new Object[]{ arg }; + } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + if (_target != null) + _target.acceptVisit(visitor); + if (_arg != null) + _arg.acceptVisit(visitor); + visitor.exit(this); } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/GetObjectId.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/GetObjectId.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/GetObjectId.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/GetObjectId.java Fri Aug 18 18:03:35 2006 @@ -34,10 +34,6 @@ _val = val; } - public boolean isVariable() { - return false; - } - public Class getType() { return Object.class; } @@ -45,12 +41,14 @@ public void setImplicitType(Class type) { } - public boolean hasVariables() { - return _val.hasVariables(); - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { return ctx.getObjectId(_val.eval(candidate, orig, ctx, params)); + } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + visitor.exit(this); } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/IndexOf.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/IndexOf.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/IndexOf.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/IndexOf.java Fri Aug 18 18:03:35 2006 @@ -38,10 +38,6 @@ _args = args; } - public boolean isVariable() { - return false; - } - public Class getType() { return int.class; } @@ -49,10 +45,6 @@ public void setImplicitType(Class type) { } - public boolean hasVariables() { - return _val.hasVariables() || _args.hasVariables(); - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { Object str = _val.eval(candidate, orig, ctx, params); @@ -65,5 +57,12 @@ } else idx = str.toString().indexOf(arg.toString()); return Numbers.valueOf(idx); + } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + _args.acceptVisit(visitor); + visitor.exit(this); } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/InstanceofExpression.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/InstanceofExpression.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/InstanceofExpression.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/InstanceofExpression.java Fri Aug 18 18:03:35 2006 @@ -57,4 +57,10 @@ Object o = (c == null || c.isEmpty()) ? null : c.iterator().next(); return _cls.isInstance(o); } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + visitor.exit(this); + } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/IsEmptyExpression.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/IsEmptyExpression.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/IsEmptyExpression.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/IsEmptyExpression.java Fri Aug 18 18:03:35 2006 @@ -63,5 +63,11 @@ return ((Map) obj).isEmpty(); return false; } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + visitor.exit(this); + } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Lit.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Lit.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Lit.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Lit.java Fri Aug 18 18:03:35 2006 @@ -38,10 +38,6 @@ _ptype = ptype; } - public boolean isVariable() { - return false; - } - public Object getValue() { return _val; } @@ -64,10 +60,6 @@ public void setImplicitType(Class type) { _val = Filters.convert(_val, type); - } - - public boolean hasVariables() { - return false; } protected Object eval(Object candidate, Object orig, Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/MathVal.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/MathVal.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/MathVal.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/MathVal.java Fri Aug 18 18:03:35 2006 @@ -37,10 +37,6 @@ _val2 = val2; } - public boolean isVariable() { - return false; - } - public Class getType() { Class c1 = _val1.getType(); Class c2 = _val2.getType(); @@ -50,10 +46,6 @@ public void setImplicitType(Class type) { } - public boolean hasVariables() { - return _val1.hasVariables() || _val2.hasVariables(); - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { Object o1 = _val1.eval(candidate, orig, ctx, params); @@ -66,4 +58,11 @@ */ protected abstract Object operate(Object o1, Class c1, Object o2, Class c2); + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val1.acceptVisit(visitor); + _val2.acceptVisit(visitor); + visitor.exit(this); + } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/NotExpression.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/NotExpression.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/NotExpression.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/NotExpression.java Fri Aug 18 18:03:35 2006 @@ -45,5 +45,11 @@ Object[] params) { return !_exp.evaluate(candidates, ctx, params); } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _exp.acceptVisit(visitor); + visitor.exit(this); + } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Null.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Null.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Null.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Null.java Fri Aug 18 18:03:35 2006 @@ -25,14 +25,6 @@ class Null extends Val { - public boolean hasVariables() { - return false; - } - - public boolean isVariable() { - return false; - } - public Class getType() { return Object.class; } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/OrExpression.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/OrExpression.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/OrExpression.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/OrExpression.java Fri Aug 18 18:03:35 2006 @@ -49,5 +49,12 @@ return _exp1.evaluate(candidates, ctx, params) || _exp2.evaluate(candidates, ctx, params); } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _exp1.acceptVisit(visitor); + _exp2.acceptVisit(visitor); + visitor.exit(this); + } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Param.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Param.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Param.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Param.java Fri Aug 18 18:03:35 2006 @@ -42,20 +42,12 @@ return _name; } - public boolean isVariable() { - return false; - } - public Class getType() { return _type; } public void setImplicitType(Class type) { _type = type; - } - - public boolean hasVariables() { - return false; } public void setIndex(int index) { Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Path.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Path.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Path.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Path.java Fri Aug 18 18:03:35 2006 @@ -19,6 +19,7 @@ /** * A path represents a traversal into fields of a candidate object. + * Equivalent paths should compare equal. * * @author Abe White */ Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/StringLength.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/StringLength.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/StringLength.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/StringLength.java Fri Aug 18 18:03:35 2006 @@ -36,10 +36,6 @@ _val = val; } - public boolean isVariable() { - return false; - } - public Class getType() { if (_cast != null) return _cast; @@ -50,10 +46,6 @@ _cast = type; } - public boolean hasVariables() { - return _val.hasVariables(); - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { Object eval = _val.eval(candidate, orig, ctx, params); @@ -61,6 +53,12 @@ return Numbers.valueOf(0); return Numbers.valueOf(eval.toString().length()); + } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + visitor.exit(this); } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/SubQ.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/SubQ.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/SubQ.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/SubQ.java Fri Aug 18 18:03:35 2006 @@ -46,20 +46,12 @@ long endIdx) { } - public boolean isVariable() { - return false; - } - public Class getType() { return _type; } public void setImplicitType(Class type) { _type = type; - } - - public boolean hasVariables() { - return false; } protected Object eval(Object candidate, Object orig, Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Substring.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Substring.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Substring.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Substring.java Fri Aug 18 18:03:35 2006 @@ -37,10 +37,6 @@ _args = args; } - public boolean isVariable() { - return false; - } - public Class getType() { return String.class; } @@ -48,10 +44,6 @@ public void setImplicitType(Class type) { } - public boolean hasVariables() { - return _val.hasVariables() || _args.hasVariables(); - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { Object str = _val.eval(candidate, orig, ctx, params); @@ -62,5 +54,12 @@ ((Number) args[1]).intValue()); } return str.toString().substring(((Number) arg).intValue()); + } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + _args.acceptVisit(visitor); + visitor.exit(this); } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/This.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/This.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/This.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/This.java Fri Aug 18 18:03:35 2006 @@ -25,14 +25,6 @@ class This extends Val { - public boolean hasVariables() { - return false; - } - - public boolean isVariable() { - return false; - } - public void setImplicitType(Class type) { } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ToLowerCase.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ToLowerCase.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ToLowerCase.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ToLowerCase.java Fri Aug 18 18:03:35 2006 @@ -34,10 +34,6 @@ _val = val; } - public boolean isVariable() { - return false; - } - public Class getType() { return String.class; } @@ -45,13 +41,14 @@ public void setImplicitType(Class type) { } - public boolean hasVariables() { - return _val.hasVariables(); - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { - return _val.eval(candidate, orig, ctx, params).toString(). - toLowerCase(); + return _val.eval(candidate, orig, ctx, params).toString().toLowerCase(); + } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + visitor.exit(this); } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ToUpperCase.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ToUpperCase.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ToUpperCase.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ToUpperCase.java Fri Aug 18 18:03:35 2006 @@ -34,10 +34,6 @@ _val = val; } - public boolean isVariable() { - return false; - } - public Class getType() { return String.class; } @@ -45,13 +41,15 @@ public void setImplicitType(Class type) { } - public boolean hasVariables() { - return _val.hasVariables(); - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { return _val.eval(candidate, orig, ctx, params).toString(). toUpperCase(); + } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + visitor.exit(this); } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Trim.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Trim.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Trim.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Trim.java Fri Aug 18 18:03:35 2006 @@ -38,10 +38,6 @@ _where = where; } - public boolean isVariable() { - return false; - } - public Class getType() { return String.class; } @@ -49,20 +45,14 @@ public void setImplicitType(Class type) { } - public boolean hasVariables() { - return _val.hasVariables(); - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { Object eval = _val.eval(candidate, orig, ctx, params); - if (eval == null) return null; String toTrim = _trimChar.eval(candidate, orig, ctx, params). toString(); - String str = eval.toString(); // null indicates both, TRUE indicates leading @@ -76,8 +66,14 @@ while (str.endsWith(toTrim)) str = str.substring(0, str.length() - toTrim.length()); } - return str; + } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + _trimChar.acceptVisit(visitor); + visitor.exit(this); } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/UnaryMathVal.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/UnaryMathVal.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/UnaryMathVal.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/UnaryMathVal.java Fri Aug 18 18:03:35 2006 @@ -34,10 +34,6 @@ _val = val; } - public boolean isVariable() { - return false; - } - public Class getType() { return getType(_val.getType()); } @@ -45,10 +41,6 @@ public void setImplicitType(Class type) { } - public boolean hasVariables() { - return _val.hasVariables(); - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { Object o1 = _val.eval(candidate, orig, ctx, params); @@ -65,4 +57,10 @@ * Return the result of this mathematical operation on the given value. */ protected abstract Object operate(Object o, Class c); + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + visitor.exit(this); + } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/UnboundVariable.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/UnboundVariable.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/UnboundVariable.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/UnboundVariable.java Fri Aug 18 18:03:35 2006 @@ -58,10 +58,6 @@ _val = value; } - public boolean hasVariables() { - return true; - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { return _val; Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Val.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Val.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Val.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Val.java Fri Aug 18 18:03:35 2006 @@ -67,11 +67,6 @@ } /** - * Return true if this value involves the use of variables. - */ - public abstract boolean hasVariables(); - - /** * Return this value for the given candidate. */ protected abstract Object eval(Object candidate, Object orig, @@ -103,4 +98,13 @@ public void setMetaData(ClassMetaData meta) { _meta = meta; } + + public boolean isVariable() { + return false; + } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + visitor.exit(this); + } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ValExpression.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ValExpression.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ValExpression.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ValExpression.java Fri Aug 18 18:03:35 2006 @@ -48,4 +48,10 @@ Object o = (c == null || c.isEmpty()) ? null : c.iterator().next(); return o != null && ((Boolean) o).booleanValue(); } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + visitor.exit(this); + } } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Value.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Value.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Value.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/Value.java Fri Aug 18 18:03:35 2006 @@ -52,4 +52,9 @@ * Associate a persistent type with this value. */ public void setMetaData(ClassMetaData meta); + + /** + * Accept a visit from a tree visitor. + */ + public void acceptVisit(ExpressionVisitor visitor); } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ValuePath.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ValuePath.java?rev=432778&r1=432777&r2=432778&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ValuePath.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/ValuePath.java Fri Aug 18 18:03:35 2006 @@ -38,15 +38,17 @@ return _val.getType(); } - public boolean hasVariables() { - return _val.hasVariables(); - } - protected Object eval(Object candidate, Object orig, StoreContext ctx, Object[] params) { // evaluate with the value's value return super.eval(_val.eval(candidate, orig, ctx, params), orig, ctx, params); + } + + public void acceptVisit(ExpressionVisitor visitor) { + visitor.enter(this); + _val.acceptVisit(visitor); + visitor.exit(this); } }
