1 46 package org.mr.api.jms.selector.syntax; 47 48 import javax.jms.DeliveryMode ; 49 import javax.jms.JMSException ; 50 import javax.jms.Message ; 51 52 53 59 class Identifier implements Expression { 60 61 64 private final String name; 65 66 70 private final boolean headerField; 71 72 75 private static final MantaString PERSISTENT = new MantaString(Identifiers.PERSISTENT); 76 77 80 private static final MantaString NON_PERSISTENT = new MantaString(Identifiers.NON_PERSISTENT); 81 82 83 90 public Identifier(final String name) throws SelectorException { 91 this.name = name; 92 93 if (Identifiers.isJMSIdentifier(name)) { 94 if (!Identifiers.isQueryableJMSIdentifier(name)) { 95 throw new SelectorException("Invalid header field: " + name); 96 } headerField = true; 98 } else { 100 headerField = false; 101 } } 104 110 public final MantaObject evaluate(final Message msg) { 111 112 MantaObject value = null; 113 try { 114 if (headerField) { 115 if (name.equals(Identifiers.JMS_DELIVERY_MODE)) { 116 value = deliveryMode(msg.getJMSDeliveryMode()); 117 } else if (name.equals(Identifiers.JMS_PRIORITY)) { 119 value = new MantaLong(msg.getJMSPriority()); 120 } else if (name.equals(Identifiers.JMS_TIMESTAMP)) { 122 value = new MantaLong(msg.getJMSTimestamp()); 123 } else if (name.equals(Identifiers.JMS_MESSAGE_ID)) { 125 String id = msg.getJMSMessageID(); 126 if (id != null) { 127 value = new MantaString(id); 128 } } else if (name.equals(Identifiers.JMS_CORRELATION_ID)) { 131 String id = msg.getJMSCorrelationID(); 132 if (id != null) { 133 value = new MantaString(id); 134 } } else if (name.equals(Identifiers.JMS_TYPE)) { 137 String type = msg.getJMSType(); 138 if (type != null) { 139 value = new MantaString(type); 140 } } } else { 144 value = MantaObjectFactory.create(msg.getObjectProperty(name)); 145 } } catch (JMSException ignore) { 148 } return value; 151 } 153 154 159 public final String toString() { 160 return name; 161 } 163 164 172 private MantaString deliveryMode(final int mode) { 173 MantaString result = PERSISTENT; 174 if (mode == DeliveryMode.NON_PERSISTENT) { 175 result = NON_PERSISTENT; 176 } return result; 178 }} | Popular Tags |