Author: arnaudsimon
Date: Wed Oct 17 05:35:17 2007
New Revision: 585457

URL: http://svn.apache.org/viewvc?rev=585457&view=rev
Log:
Updated message selector

Modified:
    incubator/qpid/trunk/qpid/java/client/pom.xml
    
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java
    
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/njms/MessageConsumerImpl.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ArithmeticExpression.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/BooleanExpression.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ComparisonExpression.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ConstantExpression.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/Expression.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/JMSSelectorFilter.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/LogicExpression.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/MessageFilter.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/PropertyExpression.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/UnaryExpression.java

Modified: incubator/qpid/trunk/qpid/java/client/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/pom.xml?rev=585457&r1=585456&r2=585457&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/pom.xml (original)
+++ incubator/qpid/trunk/qpid/java/client/pom.xml Wed Oct 17 05:35:17 2007
@@ -123,6 +123,25 @@
 
     <build>
         <plugins>
+       
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>javacc-maven-plugin</artifactId>
+                <version>2.0</version>
+                <executions>
+                    <execution>
+                        <phase>generate-sources</phase>
+                        <configuration>
+                            
<sourceDirectory>${basedir}/src/main/grammar</sourceDirectory>
+                            
<outputDirectory>${basedir}/target/generated-sources</outputDirectory>
+                            
<packageName>org.apache.qpidity.filter.selector</packageName>
+                        </configuration>
+                        <goals>
+                            <goal>javacc</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
 
            <plugin>
                 <artifactId>minijar-maven-plugin</artifactId>

Modified: 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java?rev=585457&r1=585456&r2=585457&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java
 Wed Oct 17 05:35:17 2007
@@ -98,7 +98,7 @@
             {
                 _preAcquire = false;
             }
-        }
+        }                
     }
 
     // ----- Interface org.apache.qpidity.client.util.MessageListener
@@ -245,7 +245,7 @@
         {
             if (getMessageSelector() != null)
             {
-                messageOk = _filter.matches((javax.jms.Message) message);
+                messageOk = _filter.matches(message);
             }
         }
         catch (Exception e)
@@ -253,11 +253,7 @@
             throw new AMQException(AMQConstant.INTERNAL_ERROR, "Error when 
evaluating message selector", e);
         }
 
-        
System.out.println("---------------------------------------------------------");
-        System.out.println("messageOk : " + messageOk + " pre-acquire mode : " 
+ _preAcquire);
-        
System.out.println("---------------------------------------------------------");
-
-        if (_logger.isDebugEnabled())
+       if (_logger.isDebugEnabled())
         {
             _logger.debug("messageOk " + messageOk);
             _logger.debug("_preAcquire " + _preAcquire);

Modified: 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/njms/MessageConsumerImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/njms/MessageConsumerImpl.java?rev=585457&r1=585456&r2=585457&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/njms/MessageConsumerImpl.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpidity/njms/MessageConsumerImpl.java
 Wed Oct 17 05:35:17 2007
@@ -570,7 +570,7 @@
         boolean messageOk = true;
         if (_messageSelector != null)
         {
-            messageOk = _filter.matches((Message) message);
+            messageOk = false; //_filter.matches(message);
         }
         if (_logger.isDebugEnabled())
         {

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ArithmeticExpression.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ArithmeticExpression.java?rev=585457&r1=585456&r2=585457&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ArithmeticExpression.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ArithmeticExpression.java
 Wed Oct 17 05:35:17 2007
@@ -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;
 
 /**
  * An expression which performs an operation on two expression values
@@ -241,7 +241,7 @@
         }
     }
 
-    public Object evaluate(Message message) throws QpidException
+    public Object evaluate(AbstractJMSMessage message) throws QpidException
     {
         Object lvalue = left.evaluate(message);
         if (lvalue == null)

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/BooleanExpression.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/BooleanExpression.java?rev=585457&r1=585456&r2=585457&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/BooleanExpression.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/BooleanExpression.java
 Wed Oct 17 05:35:17 2007
@@ -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;
 
 /**
  * A BooleanExpression is an expression that always
@@ -28,6 +28,6 @@
 public interface BooleanExpression extends Expression
 {
 
-    public boolean matches(Message message) throws QpidException;
+    public boolean matches(AbstractJMSMessage message) throws QpidException;
 
 }

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ComparisonExpression.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ComparisonExpression.java?rev=585457&r1=585456&r2=585457&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ComparisonExpression.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ComparisonExpression.java
 Wed Oct 17 05:35:17 2007
@@ -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.util.HashSet;
 import java.util.List;
 import java.util.regex.Pattern;
@@ -131,7 +131,7 @@
         /**
          *  
org.apache.activemq.filter.Expression#evaluate(MessageEvaluationContext)
          */
-        public Object evaluate(Message message) throws QpidException
+        public Object evaluate(AbstractJMSMessage message) throws QpidException
         {
 
             Object rv = this.getRight().evaluate(message);
@@ -151,7 +151,7 @@
             return likePattern.matcher((String) rv).matches() ? Boolean.TRUE : 
Boolean.FALSE;
         }
 
-        public boolean matches(Message message) throws QpidException
+        public boolean matches(AbstractJMSMessage message) throws QpidException
         {
             Object object = evaluate(message);
 
@@ -234,7 +234,7 @@
         return new ComparisonExpression(left, right)
             {
 
-                public Object evaluate(Message message) throws QpidException
+                public Object evaluate(AbstractJMSMessage message) throws 
QpidException
                 {
                     Object lv = left.evaluate(message);
                     Object rv = right.evaluate(message);
@@ -417,7 +417,7 @@
         super(left, right);
     }
 
-    public Object evaluate(Message message) throws QpidException
+    public Object evaluate(AbstractJMSMessage message) throws QpidException
     {
         Comparable lv = (Comparable) left.evaluate(message);
         if (lv == null)
@@ -579,7 +579,7 @@
 
     protected abstract boolean asBoolean(int answer);
 
-    public boolean matches(Message message) throws QpidException
+    public boolean matches(AbstractJMSMessage message) throws QpidException
     {
         Object object = evaluate(message);
 

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ConstantExpression.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ConstantExpression.java?rev=585457&r1=585456&r2=585457&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ConstantExpression.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/ConstantExpression.java
 Wed Oct 17 05:35:17 2007
@@ -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;
 
 /**
@@ -35,7 +35,7 @@
             super(value);
         }
 
-        public boolean matches(Message message) throws QpidException
+        public boolean matches(AbstractJMSMessage message) throws QpidException
         {
             Object object = evaluate(message);
 
@@ -114,7 +114,7 @@
         this.value = value;
     }
 
-    public Object evaluate(Message message) throws QpidException
+    public Object evaluate(AbstractJMSMessage message) throws QpidException
     {
         return value;
     }

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/Expression.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/Expression.java?rev=585457&r1=585456&r2=585457&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/Expression.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/Expression.java
 Wed Oct 17 05:35:17 2007
@@ -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;
 
 /**
  * Represents an expression
@@ -30,5 +30,5 @@
      * @param message The message to evaluate
      * @return the value of this expression
      */
-    public Object evaluate(Message message) throws QpidException;
+    public Object evaluate(AbstractJMSMessage message) throws QpidException;
 }

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/JMSSelectorFilter.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/JMSSelectorFilter.java?rev=585457&r1=585456&r2=585457&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/JMSSelectorFilter.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/JMSSelectorFilter.java
 Wed Oct 17 05:35:17 2007
@@ -21,8 +21,8 @@
 import org.slf4j.LoggerFactory;
 import org.apache.qpidity.QpidException;
 import org.apache.qpidity.filter.selector.SelectorParser;
+import org.apache.qpid.client.message.AbstractJMSMessage;
 
-import javax.jms.Message;
 
 public class JMSSelectorFilter implements MessageFilter
 {
@@ -44,7 +44,7 @@
         _matcher = new SelectorParser().parse(selector);
     }
 
-    public boolean matches(Message message)
+    public boolean matches(AbstractJMSMessage message)
     {
         try
         {

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/LogicExpression.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/LogicExpression.java?rev=585457&r1=585456&r2=585457&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/LogicExpression.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/LogicExpression.java
 Wed Oct 17 05:35:17 2007
@@ -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;
 
 /**
  * A filter performing a comparison of two objects
@@ -32,7 +32,7 @@
         return new LogicExpression(lvalue, rvalue)
             {
 
-                public Object evaluate(Message message) throws QpidException
+                public Object evaluate(AbstractJMSMessage message) throws 
QpidException
                 {
 
                     Boolean lv = (Boolean) left.evaluate(message);
@@ -59,7 +59,7 @@
         return new LogicExpression(lvalue, rvalue)
             {
 
-                public Object evaluate(Message message) throws QpidException
+                public Object evaluate(AbstractJMSMessage message) throws 
QpidException
                 {
 
                     Boolean lv = (Boolean) left.evaluate(message);
@@ -96,9 +96,9 @@
         super(left, right);
     }
 
-    public abstract Object evaluate(Message message) throws QpidException;
+    public abstract Object evaluate(AbstractJMSMessage message) throws 
QpidException;
 
-    public boolean matches(Message message) throws QpidException
+    public boolean matches(AbstractJMSMessage message) throws QpidException
     {
         Object object = evaluate(message);
 

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/MessageFilter.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/MessageFilter.java?rev=585457&r1=585456&r2=585457&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/MessageFilter.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/MessageFilter.java
 Wed Oct 17 05:35:17 2007
@@ -18,10 +18,10 @@
 package org.apache.qpidity.filter;
 
 import org.apache.qpidity.QpidException;
+import org.apache.qpid.client.message.AbstractJMSMessage;
 
-import javax.jms.Message;
 
 public interface MessageFilter
 {
-    boolean matches(Message message) throws QpidException;
+    boolean matches(AbstractJMSMessage message) throws QpidException;
 }

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/PropertyExpression.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/PropertyExpression.java?rev=585457&r1=585456&r2=585457&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/PropertyExpression.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/PropertyExpression.java
 Wed Oct 17 05:35:17 2007
@@ -17,70 +17,279 @@
  */
 package org.apache.qpidity.filter;
 
-import org.slf4j.LoggerFactory;
-import org.apache.qpidity.ErrorCode;
+import org.apache.qpid.framing.CommonContentHeaderProperties;
+import org.apache.qpid.framing.AMQShortString;
+import org.apache.qpid.client.message.AbstractJMSMessage;
 import org.apache.qpidity.QpidException;
+import org.slf4j.LoggerFactory;
+import org.slf4j.Logger;
 
-import javax.jms.Message;
-import java.lang.reflect.Method;
+import javax.jms.JMSException;
+import java.util.HashMap;
 
 /**
  * Represents a property  expression
  */
 public class PropertyExpression implements Expression
 {
-    private static final org.slf4j.Logger _logger = 
LoggerFactory.getLogger(PropertyExpression.class);
+    // Constants - defined the same as JMS
+    private static final int NON_PERSISTENT = 1;
+    private static final int DEFAULT_PRIORITY = 4;
+
+    private static final Logger _logger = 
LoggerFactory.getLogger(PropertyExpression.class);
+
+    private static final HashMap<String, Expression> JMS_PROPERTY_EXPRESSIONS 
= new HashMap<String, Expression>();
+
+    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 @@
         {
             return false;
         }
-        return _getter.equals(((PropertyExpression) o)._getter);
+        return name.equals(((PropertyExpression) o).name);
     }
 
 }

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/UnaryExpression.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/UnaryExpression.java?rev=585457&r1=585456&r2=585457&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/UnaryExpression.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/filter/UnaryExpression.java
 Wed Oct 17 05:35:17 2007
@@ -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 @@
     {
         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 @@
 
         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 @@
             super(left);
         }
 
-        public boolean matches(Message message) throws QpidException
+        public boolean matches(AbstractJMSMessage message) throws QpidException
         {
             Object object = evaluate(message);
 
@@ -170,7 +170,7 @@
     {
         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 @@
     {
         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)


Reply via email to