You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ta...@apache.org on 2014/10/03 00:28:28 UTC
git commit: Do some code cleanup.
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 <ta...@gmail.com>
Authored: Thu Oct 2 18:28:19 2014 -0400
Committer: Timothy Bish <ta...@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-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org