Repository: qpid-jms Updated Branches: refs/heads/master 0e5b55bd1 -> dda95f589
Do some code cleanup. Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/dda95f58 Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/dda95f58 Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/dda95f58 Branch: refs/heads/master Commit: dda95f5891cacce38091c66b615b39d82c714576 Parents: 0e5b55b Author: Timothy Bish <tabish...@gmail.com> Authored: Thu Oct 2 18:28:19 2014 -0400 Committer: Timothy Bish <tabish...@gmail.com> Committed: Thu Oct 2 18:28:19 2014 -0400 ---------------------------------------------------------------------- .../selector/filter/ArithmeticExpression.java | 28 +-- .../jms/selector/filter/BinaryExpression.java | 11 +- .../jms/selector/filter/BooleanExpression.java | 6 +- .../selector/filter/ComparisonExpression.java | 31 ++-- .../jms/selector/filter/ConstantExpression.java | 20 +-- .../qpid/jms/selector/filter/Expression.java | 7 +- .../jms/selector/filter/FilterException.java | 2 - .../qpid/jms/selector/filter/Filterable.java | 2 - .../jms/selector/filter/LogicExpression.java | 10 +- .../jms/selector/filter/PropertyExpression.java | 10 +- .../jms/selector/filter/UnaryExpression.java | 48 ++--- .../jms/selector/filter/XPathExpression.java | 5 +- .../jms/selector/filter/XQueryExpression.java | 5 +- .../selector/filter/XalanXPathEvaluator.java | 43 +++-- .../activemq/apollo/selector/SelectorTest.java | 176 +++++++++---------- 15 files changed, 206 insertions(+), 198 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ArithmeticExpression.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ArithmeticExpression.java b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ArithmeticExpression.java index a4700c6..8aa0c25 100755 --- a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ArithmeticExpression.java +++ b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ArithmeticExpression.java @@ -16,11 +16,8 @@ */ package org.apache.qpid.jms.selector.filter; - /** * An expression which performs an operation on two expression values - * - * @version $Revision: 1.2 $ */ public abstract class ArithmeticExpression extends BinaryExpression { @@ -40,6 +37,7 @@ public abstract class ArithmeticExpression extends BinaryExpression { public static Expression createPlus(Expression left, Expression right) { return new ArithmeticExpression(left, right) { + @Override protected Object evaluate(Object lvalue, Object rvalue) { if (lvalue instanceof String) { String text = (String)lvalue; @@ -50,6 +48,7 @@ public abstract class ArithmeticExpression extends BinaryExpression { } } + @Override public String getExpressionSymbol() { return "+"; } @@ -58,10 +57,12 @@ public abstract class ArithmeticExpression extends BinaryExpression { public static Expression createMinus(Expression left, Expression right) { return new ArithmeticExpression(left, right) { + @Override protected Object evaluate(Object lvalue, Object rvalue) { return minus(asNumber(lvalue), asNumber(rvalue)); } + @Override public String getExpressionSymbol() { return "-"; } @@ -71,10 +72,12 @@ public abstract class ArithmeticExpression extends BinaryExpression { public static Expression createMultiply(Expression left, Expression right) { return new ArithmeticExpression(left, right) { + @Override protected Object evaluate(Object lvalue, Object rvalue) { return multiply(asNumber(lvalue), asNumber(rvalue)); } + @Override public String getExpressionSymbol() { return "*"; } @@ -84,10 +87,12 @@ public abstract class ArithmeticExpression extends BinaryExpression { public static Expression createDivide(Expression left, Expression right) { return new ArithmeticExpression(left, right) { + @Override protected Object evaluate(Object lvalue, Object rvalue) { return divide(asNumber(lvalue), asNumber(rvalue)); } + @Override public String getExpressionSymbol() { return "/"; } @@ -97,10 +102,12 @@ public abstract class ArithmeticExpression extends BinaryExpression { public static Expression createMod(Expression left, Expression right) { return new ArithmeticExpression(left, right) { + @Override protected Object evaluate(Object lvalue, Object rvalue) { return mod(asNumber(lvalue), asNumber(rvalue)); } + @Override public String getExpressionSymbol() { return "%"; } @@ -110,9 +117,9 @@ public abstract class ArithmeticExpression extends BinaryExpression { protected Number plus(Number left, Number right) { switch (numberType(left, right)) { case INTEGER: - return new Integer(left.intValue() + right.intValue()); + return Integer.valueOf(left.intValue() + right.intValue()); case LONG: - return new Long(left.longValue() + right.longValue()); + return Long.valueOf(left.longValue() + right.longValue()); default: return new Double(left.doubleValue() + right.doubleValue()); } @@ -121,9 +128,9 @@ public abstract class ArithmeticExpression extends BinaryExpression { protected Number minus(Number left, Number right) { switch (numberType(left, right)) { case INTEGER: - return new Integer(left.intValue() - right.intValue()); + return Integer.valueOf(left.intValue() - right.intValue()); case LONG: - return new Long(left.longValue() - right.longValue()); + return Long.valueOf(left.longValue() - right.longValue()); default: return new Double(left.doubleValue() - right.doubleValue()); } @@ -132,9 +139,9 @@ public abstract class ArithmeticExpression extends BinaryExpression { protected Number multiply(Number left, Number right) { switch (numberType(left, right)) { case INTEGER: - return new Integer(left.intValue() * right.intValue()); + return Integer.valueOf(left.intValue() * right.intValue()); case LONG: - return new Long(left.longValue() * right.longValue()); + return Long.valueOf(left.longValue() * right.longValue()); default: return new Double(left.doubleValue() * right.doubleValue()); } @@ -172,7 +179,7 @@ public abstract class ArithmeticExpression extends BinaryExpression { if( v.contains(".") ) { return new Double(v); } else { - return new Long(v); + return Long.valueOf(v); } } catch (NumberFormatException e) { throw new RuntimeException("Cannot convert value: " + value + " into a number"); @@ -182,6 +189,7 @@ public abstract class ArithmeticExpression extends BinaryExpression { } } + @Override public Object evaluate(Filterable message) throws FilterException { Object lvalue = left.evaluate(message); if (lvalue == null) { http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/BinaryExpression.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/BinaryExpression.java b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/BinaryExpression.java index 2bb1a95..c36cecb 100755 --- a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/BinaryExpression.java +++ b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/BinaryExpression.java @@ -16,12 +16,9 @@ */ package org.apache.qpid.jms.selector.filter; - - /** * An expression which performs an operation on two expression values. - * - * @version $Revision: 1.2 $ + * */ public abstract class BinaryExpression implements Expression { protected Expression left; @@ -40,10 +37,10 @@ public abstract class BinaryExpression implements Expression { return right; } - /** * @see java.lang.Object#toString() */ + @Override public String toString() { return "(" + left.toString() + " " + getExpressionSymbol() + " " + right.toString() + ")"; } @@ -53,6 +50,7 @@ public abstract class BinaryExpression implements Expression { * * @see java.lang.Object#hashCode() */ + @Override public int hashCode() { return toString().hashCode(); } @@ -62,13 +60,13 @@ public abstract class BinaryExpression implements Expression { * * @see java.lang.Object#equals(java.lang.Object) */ + @Override public boolean equals(Object o) { if (o == null || !this.getClass().equals(o.getClass())) { return false; } return toString().equals(o.toString()); - } /** @@ -92,5 +90,4 @@ public abstract class BinaryExpression implements Expression { public void setLeft(Expression expression) { left = expression; } - } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/BooleanExpression.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/BooleanExpression.java b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/BooleanExpression.java index 3225c56..21a3d4b 100755 --- a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/BooleanExpression.java +++ b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/BooleanExpression.java @@ -16,16 +16,12 @@ */ package org.apache.qpid.jms.selector.filter; - - /** * A BooleanExpression is an expression that always * produces a Boolean result. - * - * @version $Revision: 1.2 $ */ public interface BooleanExpression extends Expression { - + /** * @param message * @return true if the expression evaluates to Boolean.TRUE. http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ComparisonExpression.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ComparisonExpression.java b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ComparisonExpression.java index 4179943..04ecaf6 100755 --- a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ComparisonExpression.java +++ b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ComparisonExpression.java @@ -21,11 +21,8 @@ import java.util.List; import java.util.Set; import java.util.regex.Pattern; - /** * A filter performing a comparison of two objects - * - * @version $Revision: 1.2 $ */ public abstract class ComparisonExpression extends BinaryExpression implements BooleanExpression { @@ -101,7 +98,7 @@ public abstract class ComparisonExpression extends BinaryExpression implements B regexp.append(".*?"); // Do a non-greedy match } else if (c == '_') { regexp.append("."); // match one - } else if (REGEXP_CONTROL_CHARS.contains(new Character(c))) { + } else if (REGEXP_CONTROL_CHARS.contains(Character.valueOf(c))) { regexp.append("\\x"); regexp.append(Integer.toHexString(0xFFFF & c)); } else { @@ -116,6 +113,7 @@ public abstract class ComparisonExpression extends BinaryExpression implements B /** * @see org.apache.activemq.filter.UnaryExpression#getExpressionSymbol() */ + @Override public String getExpressionSymbol() { return "LIKE"; } @@ -123,6 +121,7 @@ public abstract class ComparisonExpression extends BinaryExpression implements B /** * @see org.apache.activemq.filter.Expression#evaluate(Filterable) */ + @Override public Object evaluate(Filterable message) throws FilterException { Object rv = this.getRight().evaluate(message); @@ -134,12 +133,13 @@ public abstract class ComparisonExpression extends BinaryExpression implements B if (!(rv instanceof String)) { return Boolean.FALSE; // throw new RuntimeException("LIKE can only operate on String - // identifiers. LIKE attemped on: '" + rv.getClass()); + // identifiers. LIKE attempted on: '" + rv.getClass()); } return likePattern.matcher((String)rv).matches() ? Boolean.TRUE : Boolean.FALSE; } + @Override public boolean matches(Filterable message) throws FilterException { Object object = evaluate(message); return object != null && object == Boolean.TRUE; @@ -168,7 +168,6 @@ public abstract class ComparisonExpression extends BinaryExpression implements B throw new RuntimeException("Expected a property for In expression, got: " + left); } return UnaryExpression.createInExpression((PropertyExpression)left, elements, false); - } public static BooleanExpression createNotInFilter(Expression left, List elements) { @@ -177,7 +176,6 @@ public abstract class ComparisonExpression extends BinaryExpression implements B throw new RuntimeException("Expected a property for In expression, got: " + left); } return UnaryExpression.createInExpression((PropertyExpression)left, elements, true); - } public static BooleanExpression createIsNull(Expression left) { @@ -202,6 +200,7 @@ public abstract class ComparisonExpression extends BinaryExpression implements B private static BooleanExpression doCreateEqual(Expression left, Expression right) { return new ComparisonExpression(left, right) { + @Override public Object evaluate(Filterable message) throws FilterException { Object lv = left.evaluate(message); Object rv = right.evaluate(message); @@ -219,10 +218,12 @@ public abstract class ComparisonExpression extends BinaryExpression implements B return Boolean.FALSE; } + @Override protected boolean asBoolean(int answer) { return answer == 0; } + @Override public String getExpressionSymbol() { return "="; } @@ -233,10 +234,12 @@ public abstract class ComparisonExpression extends BinaryExpression implements B checkLessThanOperand(left); checkLessThanOperand(right); return new ComparisonExpression(left, right) { + @Override protected boolean asBoolean(int answer) { return answer > 0; } + @Override public String getExpressionSymbol() { return ">"; } @@ -247,10 +250,12 @@ public abstract class ComparisonExpression extends BinaryExpression implements B checkLessThanOperand(left); checkLessThanOperand(right); return new ComparisonExpression(left, right) { + @Override protected boolean asBoolean(int answer) { return answer >= 0; } + @Override public String getExpressionSymbol() { return ">="; } @@ -262,10 +267,12 @@ public abstract class ComparisonExpression extends BinaryExpression implements B checkLessThanOperand(right); return new ComparisonExpression(left, right) { + @Override protected boolean asBoolean(int answer) { return answer < 0; } + @Override public String getExpressionSymbol() { return "<"; } @@ -278,10 +285,12 @@ public abstract class ComparisonExpression extends BinaryExpression implements B checkLessThanOperand(right); return new ComparisonExpression(left, right) { + @Override protected boolean asBoolean(int answer) { return answer <= 0; } + @Override public String getExpressionSymbol() { return "<="; } @@ -290,7 +299,7 @@ public abstract class ComparisonExpression extends BinaryExpression implements B /** * Only Numeric expressions can be used in >, >=, < or <= expressions.s - * + * * @param expr */ public static void checkLessThanOperand(Expression expr) { @@ -311,7 +320,7 @@ public abstract class ComparisonExpression extends BinaryExpression implements B /** * Validates that the expression can be used in == or <> expression. Cannot * not be NULL TRUE or FALSE litterals. - * + * * @param expr */ public static void checkEqualOperand(Expression expr) { @@ -335,6 +344,7 @@ public abstract class ComparisonExpression extends BinaryExpression implements B } } + @Override public Object evaluate(Filterable message) throws FilterException { Comparable<Comparable> lv = (Comparable)left.evaluate(message); if (lv == null) { @@ -465,14 +475,15 @@ public abstract class ComparisonExpression extends BinaryExpression implements B return Boolean.FALSE; } } + return asBoolean(lv.compareTo(rv)) ? Boolean.TRUE : Boolean.FALSE; } protected abstract boolean asBoolean(int answer); + @Override public boolean matches(Filterable message) throws FilterException { Object object = evaluate(message); return object != null && object == Boolean.TRUE; } - } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ConstantExpression.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ConstantExpression.java b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ConstantExpression.java index 53d300d..5fe4756 100755 --- a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ConstantExpression.java +++ b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/ConstantExpression.java @@ -18,11 +18,8 @@ package org.apache.qpid.jms.selector.filter; import java.math.BigDecimal; - /** * Represents a constant expression - * - * @version $Revision: 1.2 $ */ public class ConstantExpression implements Expression { @@ -31,6 +28,7 @@ public class ConstantExpression implements Expression { super(value); } + @Override public boolean matches(Filterable message) throws FilterException { Object object = evaluate(message); return object != null && object == Boolean.TRUE; @@ -41,7 +39,7 @@ public class ConstantExpression implements Expression { public static final BooleanConstantExpression TRUE = new BooleanConstantExpression(Boolean.TRUE); public static final BooleanConstantExpression FALSE = new BooleanConstantExpression(Boolean.FALSE); - private Object value; + private final Object value; public ConstantExpression(Object value) { this.value = value; @@ -56,7 +54,7 @@ public class ConstantExpression implements Expression { Number value; try { - value = new Long(text); + value = Long.valueOf(text); } catch (NumberFormatException e) { // The number may be too big to fit in a long. value = new BigDecimal(text); @@ -92,6 +90,7 @@ public class ConstantExpression implements Expression { return new ConstantExpression(value); } + @Override public Object evaluate(Filterable message) throws FilterException { return value; } @@ -103,6 +102,7 @@ public class ConstantExpression implements Expression { /** * @see java.lang.Object#toString() */ + @Override public String toString() { if (value == null) { return "NULL"; @@ -118,31 +118,32 @@ public class ConstantExpression implements Expression { /** * TODO: more efficient hashCode() - * + * * @see java.lang.Object#hashCode() */ + @Override public int hashCode() { return toString().hashCode(); } /** * TODO: more efficient hashCode() - * + * * @see java.lang.Object#equals(java.lang.Object) */ + @Override public boolean equals(Object o) { if (o == null || !this.getClass().equals(o.getClass())) { return false; } return toString().equals(o.toString()); - } /** * Encodes the value of string so that it looks like it would look like when * it was provided in a selector. - * + * * @param string * @return */ @@ -159,5 +160,4 @@ public class ConstantExpression implements Expression { b.append('\''); return b.toString(); } - } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/Expression.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/Expression.java b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/Expression.java index 081eddf..7b69e42 100755 --- a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/Expression.java +++ b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/Expression.java @@ -14,15 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.qpid.jms.selector.filter; - - /** * Represents an expression - * - * @version $Revision: 1.2 $ */ public interface Expression { @@ -30,5 +25,5 @@ public interface Expression { * @return the value of this expression */ Object evaluate(Filterable message) throws FilterException; - + } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/FilterException.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/FilterException.java b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/FilterException.java index 6c4830e..3d6aeb6 100644 --- a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/FilterException.java +++ b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/FilterException.java @@ -14,7 +14,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.qpid.jms.selector.filter; public class FilterException extends Exception { @@ -36,5 +35,4 @@ public class FilterException extends Exception { public FilterException(Throwable cause) { super(cause); } - } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/Filterable.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/Filterable.java b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/Filterable.java index 106b0e9..f1baf69 100755 --- a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/Filterable.java +++ b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/Filterable.java @@ -19,8 +19,6 @@ package org.apache.qpid.jms.selector.filter; /** * A Filterable is the object being evaluated by the filters. It provides * access to filtered properties. - * - * @version $Revision: 1.4 $ */ public interface Filterable { http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/LogicExpression.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/LogicExpression.java b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/LogicExpression.java index aabd35c..1e635e7 100755 --- a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/LogicExpression.java +++ b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/LogicExpression.java @@ -16,11 +16,8 @@ */ package org.apache.qpid.jms.selector.filter; - /** * A filter performing a comparison of two objects - * - * @version $Revision: 1.2 $ */ public abstract class LogicExpression extends BinaryExpression implements BooleanExpression { @@ -35,6 +32,7 @@ public abstract class LogicExpression extends BinaryExpression implements Boolea public static BooleanExpression createOR(BooleanExpression lvalue, BooleanExpression rvalue) { return new LogicExpression(lvalue, rvalue) { + @Override public Object evaluate(Filterable message) throws FilterException { Boolean lv = (Boolean)left.evaluate(message); @@ -47,6 +45,7 @@ public abstract class LogicExpression extends BinaryExpression implements Boolea return rv == null ? null : rv; } + @Override public String getExpressionSymbol() { return "OR"; } @@ -56,6 +55,7 @@ public abstract class LogicExpression extends BinaryExpression implements Boolea public static BooleanExpression createAND(BooleanExpression lvalue, BooleanExpression rvalue) { return new LogicExpression(lvalue, rvalue) { + @Override public Object evaluate(Filterable message) throws FilterException { Boolean lv = (Boolean)left.evaluate(message); @@ -72,17 +72,19 @@ public abstract class LogicExpression extends BinaryExpression implements Boolea return rv == null ? null : rv; } + @Override public String getExpressionSymbol() { return "AND"; } }; } + @Override public abstract Object evaluate(Filterable message) throws FilterException; + @Override public boolean matches(Filterable message) throws FilterException { Object object = evaluate(message); return object != null && object == Boolean.TRUE; } - } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/PropertyExpression.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/PropertyExpression.java b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/PropertyExpression.java index 767aed4..67d99eb 100755 --- a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/PropertyExpression.java +++ b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/PropertyExpression.java @@ -14,14 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.qpid.jms.selector.filter; - /** * Represents a property expression - * - * @version $Revision: 1.5 $ */ public class PropertyExpression implements Expression { @@ -31,6 +27,7 @@ public class PropertyExpression implements Expression { this.name = name; } + @Override public Object evaluate(Filterable message) throws FilterException { return message.getProperty(name); } @@ -42,6 +39,7 @@ public class PropertyExpression implements Expression { /** * @see java.lang.Object#toString() */ + @Override public String toString() { return name; } @@ -49,6 +47,7 @@ public class PropertyExpression implements Expression { /** * @see java.lang.Object#hashCode() */ + @Override public int hashCode() { return name.hashCode(); } @@ -56,12 +55,11 @@ public class PropertyExpression implements Expression { /** * @see java.lang.Object#equals(java.lang.Object) */ + @Override public boolean equals(Object o) { if (o == null || !this.getClass().equals(o.getClass())) { return false; } return name.equals(((PropertyExpression)o).name); - } - } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/UnaryExpression.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/UnaryExpression.java b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/UnaryExpression.java index 75433f2..2d1b7b0 100755 --- a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/UnaryExpression.java +++ b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/UnaryExpression.java @@ -22,11 +22,8 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; - /** * An expression which performs an operation on two expression values - * - * @version $Revision: 1.3 $ */ public abstract class UnaryExpression implements Expression { @@ -39,6 +36,7 @@ public abstract class UnaryExpression implements Expression { public static Expression createNegate(Expression left) { return new UnaryExpression(left) { + @Override public Object evaluate(Filterable message) throws FilterException { Object rvalue = right.evaluate(message); if (rvalue == null) { @@ -50,6 +48,7 @@ public abstract class UnaryExpression implements Expression { return null; } + @Override public String getExpressionSymbol() { return "-"; } @@ -67,9 +66,11 @@ public abstract class UnaryExpression implements Expression { } else { t = new HashSet<Object>(elements); } + final Collection<Object> inList = t; return new BooleanUnaryExpression(right) { + @Override public Object evaluate(Filterable message) throws FilterException { Object rvalue = right.evaluate(message); @@ -85,9 +86,9 @@ public abstract class UnaryExpression implements Expression { } else { return Boolean.FALSE; } - } + @Override public String toString() { StringBuffer answer = new StringBuffer(); answer.append(right); @@ -97,7 +98,7 @@ public abstract class UnaryExpression implements Expression { int count = 0; for (Iterator<Object> i = inList.iterator(); i.hasNext();) { - Object o = (Object)i.next(); + Object o = i.next(); if (count != 0) { answer.append(", "); } @@ -109,6 +110,7 @@ public abstract class UnaryExpression implements Expression { return answer.toString(); } + @Override public String getExpressionSymbol() { if (not) { return "NOT IN"; @@ -124,6 +126,7 @@ public abstract class UnaryExpression implements Expression { super(left); } + @Override public boolean matches(Filterable message) throws FilterException { Object object = evaluate(message); return object != null && object == Boolean.TRUE; @@ -132,6 +135,7 @@ public abstract class UnaryExpression implements Expression { public static BooleanExpression createNOT(BooleanExpression left) { return new BooleanUnaryExpression(left) { + @Override public Object evaluate(Filterable message) throws FilterException { Boolean lvalue = (Boolean)right.evaluate(message); if (lvalue == null) { @@ -140,6 +144,7 @@ public abstract class UnaryExpression implements Expression { return lvalue.booleanValue() ? Boolean.FALSE : Boolean.TRUE; } + @Override public String getExpressionSymbol() { return "NOT"; } @@ -156,6 +161,7 @@ public abstract class UnaryExpression implements Expression { public static BooleanExpression createBooleanCast(Expression left) { return new BooleanUnaryExpression(left) { + @Override public Object evaluate(Filterable message) throws FilterException { Object rvalue = right.evaluate(message); if (rvalue == null) { @@ -167,10 +173,12 @@ public abstract class UnaryExpression implements Expression { return ((Boolean)rvalue).booleanValue() ? Boolean.TRUE : Boolean.FALSE; } + @Override public String toString() { return right.toString(); } + @Override public String getExpressionSymbol() { return ""; } @@ -178,24 +186,21 @@ public abstract class UnaryExpression implements Expression { } private static Number negate(Number left) { - Class clazz = left.getClass(); + Class<?> clazz = left.getClass(); if (clazz == Integer.class) { - return new Integer(-left.intValue()); + return Integer.valueOf(-left.intValue()); } else if (clazz == Long.class) { - return new Long(-left.longValue()); + return Long.valueOf(-left.longValue()); } else if (clazz == Float.class) { return new Float(-left.floatValue()); } else if (clazz == Double.class) { return new Double(-left.doubleValue()); } else if (clazz == BigDecimal.class) { - // We ussually get a big deciamal when we have Long.MIN_VALUE - // constant in the - // Selector. Long.MIN_VALUE is too big to store in a Long as a - // positive so we store it - // as a Big decimal. But it gets Negated right away.. to here we try - // to covert it back - // to a Long. - BigDecimal bd = (BigDecimal)left; + // We usually get a big decimal when we have Long.MIN_VALUE constant in + // the Selector. Long.MIN_VALUE is too big to store in a Long as a positive + // so we store it as a Big decimal. But it gets Negated right away.. to here + // we try to covert it back to a Long. + BigDecimal bd = (BigDecimal) left; bd = bd.negate(); if (BD_LONG_MIN_VALUE.compareTo(bd) == 0) { @@ -218,37 +223,38 @@ public abstract class UnaryExpression implements Expression { /** * @see java.lang.Object#toString() */ + @Override public String toString() { return "(" + getExpressionSymbol() + " " + right.toString() + ")"; } /** * TODO: more efficient hashCode() - * + * * @see java.lang.Object#hashCode() */ + @Override public int hashCode() { return toString().hashCode(); } /** * TODO: more efficient hashCode() - * + * * @see java.lang.Object#equals(java.lang.Object) */ + @Override public boolean equals(Object o) { - if (o == null || !this.getClass().equals(o.getClass())) { return false; } return toString().equals(o.toString()); - } /** * Returns the symbol that represents this binary expression. For example, * addition is represented by "+" - * + * * @return */ public abstract String getExpressionSymbol(); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XPathExpression.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XPathExpression.java b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XPathExpression.java index 20c7a6d..ebfc38f 100755 --- a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XPathExpression.java +++ b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XPathExpression.java @@ -27,6 +27,7 @@ public final class XPathExpression implements BooleanExpression { new XalanXPathEvaluator("//root").evaluate("<root></root>"); try { XPATH_EVALUATOR_FACTORY = new XPathExpression.XPathEvaluatorFactory() { + @Override public XPathExpression.XPathEvaluator create(String xpath) { return new XalanXPathEvaluator(xpath); } @@ -54,10 +55,12 @@ public final class XPathExpression implements BooleanExpression { this.evaluator = XPATH_EVALUATOR_FACTORY.create(xpath); } + @Override public Object evaluate(Filterable message) throws FilterException { return evaluator.evaluate(message) ? Boolean.TRUE : Boolean.FALSE; } + @Override public String toString() { return "XPATH " + ConstantExpression.encodeString(xpath); } @@ -67,9 +70,9 @@ public final class XPathExpression implements BooleanExpression { * @return true if the expression evaluates to Boolean.TRUE. * @throws FilterException */ + @Override public boolean matches(Filterable message) throws FilterException { Object object = evaluate(message); return object != null && object == Boolean.TRUE; } - } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XQueryExpression.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XQueryExpression.java b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XQueryExpression.java index 114ada2..00d091c 100755 --- a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XQueryExpression.java +++ b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XQueryExpression.java @@ -16,7 +16,6 @@ */ package org.apache.qpid.jms.selector.filter; - /** * Used to evaluate an XQuery Expression in a JMS selector. */ @@ -28,10 +27,12 @@ public final class XQueryExpression implements BooleanExpression { this.xpath = xpath; } + @Override public Object evaluate(Filterable message) throws FilterException { return Boolean.FALSE; } + @Override public String toString() { return "XQUERY " + ConstantExpression.encodeString(xpath); } @@ -41,9 +42,9 @@ public final class XQueryExpression implements BooleanExpression { * @return true if the expression evaluates to Boolean.TRUE. * @throws FilterException */ + @Override public boolean matches(Filterable message) throws FilterException { Object object = evaluate(message); return object != null && object == Boolean.TRUE; } - } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XalanXPathEvaluator.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XalanXPathEvaluator.java b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XalanXPathEvaluator.java index b09961e..13ad667 100644 --- a/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XalanXPathEvaluator.java +++ b/qpid-jms-selector/src/main/java/org/apache/qpid/jms/selector/filter/XalanXPathEvaluator.java @@ -14,24 +14,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.qpid.jms.selector.filter; -import org.apache.xpath.CachedXPathAPI; -import org.apache.xpath.objects.XObject; -import org.w3c.dom.Document; -import org.w3c.dom.traversal.NodeIterator; -import org.xml.sax.InputSource; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; import java.io.StringReader; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Properties; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.xpath.CachedXPathAPI; +import org.apache.xpath.objects.XObject; +import org.w3c.dom.Document; +import org.w3c.dom.traversal.NodeIterator; +import org.xml.sax.InputSource; public class XalanXPathEvaluator implements XPathExpression.XPathEvaluator { public static final String DOCUMENT_BUILDER_FACTORY_FEATURE = "org.apache.activemq.apollo.documentBuilderFactory.feature"; @@ -41,11 +40,12 @@ public class XalanXPathEvaluator implements XPathExpression.XPathEvaluator { this.xpath = xpath; } + @Override public boolean evaluate(Filterable m) throws FilterException { String stringBody = m.getBodyAs(String.class); if (stringBody!=null) { return evaluate(stringBody); - } + } return false; } @@ -66,20 +66,19 @@ public class XalanXPathEvaluator implements XPathExpression.XPathEvaluator { DocumentBuilder dbuilder = factory.newDocumentBuilder(); Document doc = dbuilder.parse(inputSource); - //An XPath expression could return a true or false value instead of a node. - //eval() is a better way to determine the boolean value of the exp. - //For compliance with legacy behavior where selecting an empty node returns true, - //selectNodeIterator is attempted in case of a failure. + // An XPath expression could return a true or false value instead of a node. + // eval() is a better way to determine the boolean value of the exp. + // For compliance with legacy behavior where selecting an empty node returns true, + // selectNodeIterator is attempted in case of a failure. CachedXPathAPI cachedXPathAPI = new CachedXPathAPI(); XObject result = cachedXPathAPI.eval(doc, xpath); - if (result.bool()) - return true; - else { - NodeIterator iterator = cachedXPathAPI.selectNodeIterator(doc, xpath); - return (iterator.nextNode() != null); + if (result.bool()) { + return true; + } else { + NodeIterator iterator = cachedXPathAPI.selectNodeIterator(doc, xpath); + return (iterator.nextNode() != null); } - } catch (Throwable e) { return false; } @@ -101,6 +100,7 @@ public class XalanXPathEvaluator implements XPathExpression.XPathEvaluator { } } } + if (features.size() > 0) { StringBuffer featureString = new StringBuffer(); // just log the configured feature @@ -111,6 +111,5 @@ public class XalanXPathEvaluator implements XPathExpression.XPathEvaluator { featureString.append(feature); } } - } } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dda95f58/qpid-jms-selector/src/test/java/org/apache/activemq/apollo/selector/SelectorTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-selector/src/test/java/org/apache/activemq/apollo/selector/SelectorTest.java b/qpid-jms-selector/src/test/java/org/apache/activemq/apollo/selector/SelectorTest.java index 398548f..2268263 100755 --- a/qpid-jms-selector/src/test/java/org/apache/activemq/apollo/selector/SelectorTest.java +++ b/qpid-jms-selector/src/test/java/org/apache/activemq/apollo/selector/SelectorTest.java @@ -30,72 +30,74 @@ import org.apache.qpid.jms.selector.filter.Filterable; */ @SuppressWarnings("unchecked") public class SelectorTest extends TestCase { - - class MockMessage implements Filterable { - - HashMap<String, Object> properties = new HashMap<String, Object>(); - private String text; - private Object destination; - private String messageId; - private String type; - private Object localConnectionId; - - public void setDestination(Object destination) { - this.destination=destination; - } - public void setJMSMessageID(String messageId) { - this.messageId = messageId; - } - public void setJMSType(String type) { - this.type = type; - } - public void setText(String text) { - this.text = text; - } - - public void setBooleanProperty(String key, boolean value) { - properties.put(key, value); - } - - public void setStringProperty(String key, String value) { - properties.put(key, value); - } - - public void setByteProperty(String key, byte value) { - properties.put(key, value); - } - - public void setDoubleProperty(String key, double value) { - properties.put(key, value); - } - - public void setFloatProperty(String key, float value) { - properties.put(key, value); - } - - public void setLongProperty(String key, long value) { - properties.put(key, value); - } - - public void setIntProperty(String key, int value) { - properties.put(key, value); - } - - public void setShortProperty(String key, short value) { - properties.put(key, value); - } - - public void setObjectProperty(String key, Object value) { - properties.put(key, value); - } - - public <T> T getBodyAs(Class<T> type) throws FilterException { - if( type == String.class ) { - return type.cast(text); - } - return null; - } + static class MockMessage implements Filterable { + + HashMap<String, Object> properties = new HashMap<String, Object>(); + private String text; + private Object destination; + private String messageId; + private String type; + private Object localConnectionId; + + public void setDestination(Object destination) { + this.destination=destination; + } + public void setJMSMessageID(String messageId) { + this.messageId = messageId; + } + public void setJMSType(String type) { + this.type = type; + } + public void setText(String text) { + this.text = text; + } + + public void setBooleanProperty(String key, boolean value) { + properties.put(key, value); + } + + public void setStringProperty(String key, String value) { + properties.put(key, value); + } + + public void setByteProperty(String key, byte value) { + properties.put(key, value); + } + + public void setDoubleProperty(String key, double value) { + properties.put(key, value); + } + + public void setFloatProperty(String key, float value) { + properties.put(key, value); + } + + public void setLongProperty(String key, long value) { + properties.put(key, value); + } + + public void setIntProperty(String key, int value) { + properties.put(key, value); + } + + public void setShortProperty(String key, short value) { + properties.put(key, value); + } + + public void setObjectProperty(String key, Object value) { + properties.put(key, value); + } + + @Override + public <T> T getBodyAs(Class<T> type) throws FilterException { + if( type == String.class ) { + return type.cast(text); + } + return null; + } + + @Override public Object getProperty(String name) { if( "JMSType".equals(name) ) { return type; @@ -107,23 +109,20 @@ public class SelectorTest extends TestCase { } public <T> T getDestination() { - return (T)destination; - } - - public Object getLocalConnectionId() { - return localConnectionId; - } + return (T)destination; + } - + @Override + public Object getLocalConnectionId() { + return localConnectionId; + } } - public void testBooleanSelector() throws Exception { MockMessage message = createMessage(); assertSelector(message, "(trueProp OR falseProp) AND trueProp", true); assertSelector(message, "(trueProp OR falseProp) AND falseProp", false); - } public void testXPathSelectors() throws Exception { @@ -139,33 +138,32 @@ public class SelectorTest extends TestCase { assertSelector(message, "XPATH '//root/b=\"b\"'", true); assertSelector(message, "XPATH '//root/b=\"c\"'", false); assertSelector(message, "XPATH '//root/b!=\"c\"'", true); - + assertSelector(message, "XPATH '//root/*[@key=''second'']'", true); assertSelector(message, "XPATH '//root/*[@key=''third'']'", false); assertSelector(message, "XPATH '//root/a[@key=''first'']'", true); assertSelector(message, "XPATH '//root/a[@num=1]'", true); assertSelector(message, "XPATH '//root/a[@key=''second'']'", false); - + assertSelector(message, "XPATH '/root/*[@key=''first'' or @key=''third'']'", true); assertSelector(message, "XPATH '//root/*[@key=''third'' or @key=''forth'']'", false); assertSelector(message, "XPATH '/root/b=''b'' and /root/b[@key=''second'']'", true); assertSelector(message, "XPATH '/root/b=''b'' and /root/b[@key=''first'']'", false); - + assertSelector(message, "XPATH 'not(//root/a)'", false); assertSelector(message, "XPATH 'not(//root/c)'", true); assertSelector(message, "XPATH '//root/a[not(@key=''first'')]'", false); assertSelector(message, "XPATH '//root/a[not(not(@key=''first''))]'", true); - + assertSelector(message, "XPATH 'string(//root/b)'", true); assertSelector(message, "XPATH 'string(//root/a)'", false); - + assertSelector(message, "XPATH 'sum(//@num) < 10'", true); assertSelector(message, "XPATH 'sum(//@num) > 10'", false); - + assertSelector(message, "XPATH '//root/a[@num > 1]'", false); - assertSelector(message, "XPATH '//root/b[@num > 1]'", true); - + assertSelector(message, "XPATH '//root/b[@num > 1]'", true); } public void testJMSPropertySelectors() throws Exception { @@ -194,7 +192,6 @@ public class SelectorTest extends TestCase { assertSelector(message, "rank > 100", true); assertSelector(message, "rank >= 123", true); assertSelector(message, "rank >= 124", false); - } public void testPropertyTypes() throws Exception { @@ -276,7 +273,6 @@ public class SelectorTest extends TestCase { assertSelector(message, "rank / 3 > 100.0", false); assertSelector(message, "rank / 3 > 100", false); assertSelector(message, "version / 2 = 1", true); - } public void testBetween() throws Exception { @@ -446,10 +442,10 @@ public class SelectorTest extends TestCase { message.setByteProperty("byteProp", (byte)123); message.setByteProperty("byteProp2", (byte)33); message.setShortProperty("shortProp", (short)123); - message.setIntProperty("intProp", (int)123); - message.setLongProperty("longProp", (long)123); - message.setFloatProperty("floatProp", (float)123); - message.setDoubleProperty("doubleProp", (double)123); + message.setIntProperty("intProp", 123); + message.setLongProperty("longProp", 123); + message.setFloatProperty("floatProp", 123); + message.setDoubleProperty("doubleProp", 123); message.setIntProperty("rank", 123); message.setIntProperty("version", 2); @@ -468,7 +464,7 @@ public class SelectorTest extends TestCase { } catch (FilterException e) { } } - + protected void assertSelector(MockMessage message, String text, boolean expected) throws FilterException { BooleanExpression selector = SelectorParser.parse(text); assertTrue("Created a valid selector", selector != null); @@ -477,7 +473,7 @@ public class SelectorTest extends TestCase { } protected MockMessage createMessage(String subject) { - MockMessage message = new MockMessage(); + MockMessage message = new MockMessage(); message.setDestination(subject); return message; } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org