1 /*** 2 * 3 * Copyright 2004 Protique Ltd 4 * Copyright 2004 Hiram Chirino 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 **/ 19 package org.codehaus.activemq.filter; 20 21 import javax.jms.JMSException; 22 import javax.jms.Message; 23 24 /*** 25 * Represents a constant expression 26 * 27 * @version $Revision: 1.1 $ 28 */ 29 public class ConstantExpression implements Expression { 30 31 static class BooleanConstantExpression extends ConstantExpression implements BooleanExpression { 32 public BooleanConstantExpression(Object value) { 33 super(value); 34 } 35 } 36 37 public static final BooleanConstantExpression NULL = new BooleanConstantExpression(null); 38 public static final BooleanConstantExpression TRUE = new BooleanConstantExpression(Boolean.TRUE); 39 public static final BooleanConstantExpression FALSE = new BooleanConstantExpression(Boolean.FALSE); 40 41 private Object value; 42 43 public static ConstantExpression createInteger(String text) { 44 Number value = new Long(text); 45 long l = value.longValue(); 46 if (Integer.MIN_VALUE <= l && l <= Integer.MAX_VALUE) { 47 value = new Integer(value.intValue()); 48 } 49 return new ConstantExpression(value); 50 } 51 52 public static ConstantExpression createFloat(String text) { 53 Number value = new Double(text); 54 return new ConstantExpression(value); 55 } 56 57 public ConstantExpression(Object value) { 58 this.value = value; 59 } 60 61 public Object evaluate(Message message) throws JMSException { 62 return value; 63 } 64 65 66 /*** 67 * @see java.lang.Object#toString() 68 */ 69 public String toString() { 70 if (value == null) { 71 return "NULL"; 72 } 73 if (value instanceof Boolean) { 74 return ((Boolean) value).booleanValue() ? "TRUE" : "FALSE"; 75 } 76 if (value instanceof String) { 77 return encodeString((String) value); 78 } 79 return value.toString(); 80 } 81 82 /*** 83 * TODO: more efficient hashCode() 84 * 85 * @see java.lang.Object#hashCode() 86 */ 87 public int hashCode() { 88 return toString().hashCode(); 89 } 90 91 /*** 92 * TODO: more efficient hashCode() 93 * 94 * @see java.lang.Object#equals(java.lang.Object) 95 */ 96 public boolean equals(Object o) { 97 98 if (o == null || !this.getClass().equals(o.getClass())) { 99 return false; 100 } 101 return toString().equals(o.toString()); 102 103 } 104 105 106 /*** 107 * Encodes the value of string so that it looks like it would look like 108 * when it was provided in a selector. 109 * 110 * @param string 111 * @return 112 */ 113 private String encodeString(String s) { 114 StringBuffer b = new StringBuffer(); 115 b.append('\''); 116 for (int i = 0; i < s.length(); i++) { 117 char c = s.charAt(i); 118 if (c == '\'') { 119 b.append(c); 120 } 121 b.append(c); 122 } 123 b.append('\''); 124 return b.toString(); 125 } 126 }