1 28 29 package com.caucho.jms.selector; 30 31 import com.caucho.util.L10N; 32 33 import javax.jms.JMSException ; 34 import javax.jms.Message ; 35 36 39 public class UnarySelector extends Selector { 40 static L10N L = new L10N(Selector.class); 41 42 private int _token; 43 private Selector _expr; 44 45 UnarySelector(int token, Selector expr) 46 { 47 _token = token; 48 _expr = expr; 49 } 50 51 boolean isBoolean() 52 { 53 switch (_token) { 54 case SelectorParser.NOT: 55 case SelectorParser.NULL: 56 return true; 57 } 58 59 return false; 60 } 61 62 boolean isNumber() 63 { 64 switch (_token) { 65 case '-': 66 case '+': 67 return true; 68 } 69 70 return false; 71 } 72 73 boolean isUnknown() 74 { 75 return false; 76 } 77 78 82 Object evaluate(Message message) 83 throws JMSException 84 { 85 Object value = _expr.evaluate(message); 86 87 switch (_token) { 88 case SelectorParser.NOT: 89 if (! (value instanceof Boolean )) 90 return NULL; 91 else 92 return toBoolean(! ((Boolean ) value).booleanValue()); 93 94 case SelectorParser.NULL: 95 return toBoolean(value == null); 96 97 case '+': 98 if (! (value instanceof Number )) 99 return NULL; 100 else 101 return value; 102 103 case '-': 104 if (! (value instanceof Number )) 105 return NULL; 106 else if (isInteger(value)) 107 return new Long (- toLong(value)); 108 else 109 return new Double (- ((Number ) value).doubleValue()); 110 111 default: 112 throw new JMSException ("NOTONE"); 113 } 114 } 115 } 116 | Popular Tags |