From 3ec5ee10947c7eebd7ac360a287cbb362e781dc9 Mon Sep 17 00:00:00 2001 From: Arnaud Simon Date: Wed, 17 Oct 2007 12:35:17 +0000 Subject: Updated message selector git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@585457 13f79535-47bb-0310-9956-ffa450edef68 --- java/client/pom.xml | 19 ++ .../qpid/client/BasicMessageConsumer_0_10.java | 10 +- .../apache/qpidity/njms/MessageConsumerImpl.java | 2 +- .../qpidity/filter/ArithmeticExpression.java | 4 +- .../apache/qpidity/filter/BooleanExpression.java | 4 +- .../qpidity/filter/ComparisonExpression.java | 12 +- .../apache/qpidity/filter/ConstantExpression.java | 6 +- .../java/org/apache/qpidity/filter/Expression.java | 4 +- .../apache/qpidity/filter/JMSSelectorFilter.java | 4 +- .../org/apache/qpidity/filter/LogicExpression.java | 10 +- .../org/apache/qpidity/filter/MessageFilter.java | 4 +- .../apache/qpidity/filter/PropertyExpression.java | 271 ++++++++++++++++++--- .../org/apache/qpidity/filter/UnaryExpression.java | 12 +- 13 files changed, 293 insertions(+), 69 deletions(-) diff --git a/java/client/pom.xml b/java/client/pom.xml index bd869d96ca..b58ab9fe3a 100644 --- a/java/client/pom.xml +++ b/java/client/pom.xml @@ -123,6 +123,25 @@ + + + org.codehaus.mojo + javacc-maven-plugin + 2.0 + + + generate-sources + + ${basedir}/src/main/grammar + ${basedir}/target/generated-sources + org.apache.qpidity.filter.selector + + + javacc + + + + minijar-maven-plugin diff --git a/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java b/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java index af259080a3..58b84910d4 100644 --- a/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java +++ b/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java @@ -98,7 +98,7 @@ public class BasicMessageConsumer_0_10 extends BasicMessageConsumer JMS_PROPERTY_EXPRESSIONS = new HashMap(); + + static + { + JMS_PROPERTY_EXPRESSIONS.put("JMSDestination", new Expression() + { + public Object evaluate(AbstractJMSMessage message) + { + //TODO + return null; + } + }); + JMS_PROPERTY_EXPRESSIONS.put("JMSReplyTo", new Expression() + { + public Object evaluate(AbstractJMSMessage message) + { + try + { + CommonContentHeaderProperties _properties = + message.getContentHeaderProperties(); + AMQShortString replyTo = _properties.getReplyTo(); + + return (replyTo == null) ? null : replyTo.toString(); + } + catch (Exception e) + { + _logger.warn("Error evaluating property", e); + + return null; + } + } + }); + + JMS_PROPERTY_EXPRESSIONS.put("JMSType", new Expression() + { + public Object evaluate(AbstractJMSMessage message) + { + try + { + CommonContentHeaderProperties _properties = + message.getContentHeaderProperties(); + AMQShortString type = _properties.getType(); + + return (type == null) ? null : type.toString(); + } + catch (Exception e) + { + _logger.warn("Error evaluating property", e); + + return null; + } + + } + }); + + JMS_PROPERTY_EXPRESSIONS.put("JMSDeliveryMode", new Expression() + { + public Object evaluate(AbstractJMSMessage message) + { + try + { + int mode = message.getJMSDeliveryMode(); + if (_logger.isDebugEnabled()) + { + _logger.debug("JMSDeliveryMode is :" + mode); + } + + return mode; + } + catch (Exception e) + { + _logger.warn("Error evaluating property",e); + } + + return NON_PERSISTENT; + } + }); + + JMS_PROPERTY_EXPRESSIONS.put("JMSPriority", new Expression() + { + public Object evaluate(AbstractJMSMessage message) + { + try + { + CommonContentHeaderProperties _properties = + message.getContentHeaderProperties(); + return (int) _properties.getPriority(); + } + catch (Exception e) + { + _logger.warn("Error evaluating property",e); + } + + return DEFAULT_PRIORITY; + } + }); + + JMS_PROPERTY_EXPRESSIONS.put("AMQMessageID", new Expression() + { + public Object evaluate(AbstractJMSMessage message) + { + + try + { + CommonContentHeaderProperties _properties = + message.getContentHeaderProperties(); + AMQShortString messageId = _properties.getMessageId(); + + return (messageId == null) ? null : messageId; + } + catch (Exception e) + { + _logger.warn("Error evaluating property",e); + + return null; + } + + } + }); + + JMS_PROPERTY_EXPRESSIONS.put("JMSTimestamp", new Expression() + { + public Object evaluate(AbstractJMSMessage message) + { + try + { + CommonContentHeaderProperties _properties = + message.getContentHeaderProperties(); + return _properties.getTimestamp(); + } + catch (Exception e) + { + _logger.warn("Error evaluating property",e); + + return null; + } - private Method _getter; + } + }); + + JMS_PROPERTY_EXPRESSIONS.put("JMSCorrelationID", new Expression() + { + public Object evaluate(AbstractJMSMessage message) + { + + try + { + CommonContentHeaderProperties _properties = + message.getContentHeaderProperties(); + AMQShortString correlationId = _properties.getCorrelationId(); + return (correlationId == null) ? null : correlationId.toString(); + } + catch (Exception e) + { + _logger.warn("Error evaluating property",e); + + return null; + } + + } + }); + + JMS_PROPERTY_EXPRESSIONS.put("JMSExpiration", new Expression() + { + public Object evaluate(AbstractJMSMessage message) + { + + try + { + CommonContentHeaderProperties _properties = + message.getContentHeaderProperties(); + return _properties.getExpiration(); + } + catch (Exception e) + { + _logger.warn("Error evaluating property",e); + return null; + } + + } + }); + + JMS_PROPERTY_EXPRESSIONS.put("JMSRedelivered", new Expression() + { + public Object evaluate(AbstractJMSMessage message) + { + try + { + return message.getJMSRedelivered(); + } + catch (JMSException e) + { + _logger.warn("Error evaluating property",e); + return null; + } + } + }); + + } + + private final String name; + private final Expression jmsPropertyExpression; public PropertyExpression(String name) { - Class clazz = Message.class; - try - { - _getter = clazz.getMethod("get" + name, null); - } - catch (NoSuchMethodException e) - { - PropertyExpression._logger.warn("Cannot compare property: " + name, e); - } + this.name = name; + jmsPropertyExpression = JMS_PROPERTY_EXPRESSIONS.get(name); } - public Object evaluate(Message message) throws QpidException + public Object evaluate(AbstractJMSMessage message) throws QpidException { - Object result = null; - if( _getter != null ) + + if (jmsPropertyExpression != null) { - try - { - result = _getter.invoke(message, null); - } - catch (Exception e) + return jmsPropertyExpression.evaluate(message); + } + else + { + + CommonContentHeaderProperties _properties = message.getContentHeaderProperties(); + if (_logger.isDebugEnabled()) { - throw new QpidException("cannot evaluate property ", ErrorCode.UNDEFINED, e); + _logger.debug("Looking up property:" + name); + _logger.debug("Properties are:" + _properties.getHeaders().keySet()); } + return _properties.getHeaders().getObject(name); } - return result; + } + + public String getName() + { + return name; } /** - * @see Object#toString() + * @see java.lang.Object#toString() */ public String toString() { - return _getter.toString(); + return name; } /** - * @see Object#hashCode() + * @see java.lang.Object#hashCode() */ public int hashCode() { - return _getter.hashCode(); + return name.hashCode(); } /** - * @see Object#equals(Object) + * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object o) { @@ -88,7 +297,7 @@ public class PropertyExpression implements Expression { return false; } - return _getter.equals(((PropertyExpression) o)._getter); + return name.equals(((PropertyExpression) o).name); } } diff --git a/java/common/src/main/java/org/apache/qpidity/filter/UnaryExpression.java b/java/common/src/main/java/org/apache/qpidity/filter/UnaryExpression.java index 01bd2f8d6c..f73449679c 100644 --- a/java/common/src/main/java/org/apache/qpidity/filter/UnaryExpression.java +++ b/java/common/src/main/java/org/apache/qpidity/filter/UnaryExpression.java @@ -18,8 +18,8 @@ package org.apache.qpidity.filter; import org.apache.qpidity.QpidException; +import org.apache.qpid.client.message.AbstractJMSMessage; -import javax.jms.Message; import java.math.BigDecimal; import java.util.List; import java.util.Collection; @@ -39,7 +39,7 @@ public abstract class UnaryExpression implements Expression { return new UnaryExpression(left) { - public Object evaluate(Message message) throws QpidException + public Object evaluate(AbstractJMSMessage message) throws QpidException { Object rvalue = right.evaluate(message); if (rvalue == null) @@ -84,7 +84,7 @@ public abstract class UnaryExpression implements Expression return new BooleanUnaryExpression(right) { - public Object evaluate(Message message) throws QpidException + public Object evaluate(AbstractJMSMessage message) throws QpidException { Object rvalue = right.evaluate(message); @@ -156,7 +156,7 @@ public abstract class UnaryExpression implements Expression super(left); } - public boolean matches(Message message) throws QpidException + public boolean matches(AbstractJMSMessage message) throws QpidException { Object object = evaluate(message); @@ -170,7 +170,7 @@ public abstract class UnaryExpression implements Expression { return new BooleanUnaryExpression(left) { - public Object evaluate(Message message) throws QpidException + public Object evaluate(AbstractJMSMessage message) throws QpidException { Boolean lvalue = (Boolean) right.evaluate(message); if (lvalue == null) @@ -191,7 +191,7 @@ public abstract class UnaryExpression implements Expression { return new BooleanUnaryExpression(left) { - public Object evaluate(Message message) throws QpidException + public Object evaluate(AbstractJMSMessage message) throws QpidException { Object rvalue = right.evaluate(message); if (rvalue == null) -- cgit v1.2.1