1 /***
2 *
3 * Copyright 2004 Hiram Chirino
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 **/
18 package org.codehaus.activemq.filter;
19
20 import javax.jms.JMSException;
21 import javax.jms.Message;
22
23 /***
24 * A filter performing a comparison of two objects
25 *
26 * @version $Revision: 1.1 $
27 */
28 public abstract class LogicExpression extends BinaryExpression implements BooleanExpression {
29
30 public static BooleanExpression createOR(BooleanExpression lvalue, BooleanExpression rvalue) {
31 return new LogicExpression(lvalue, rvalue) {
32 protected Object evaluate(Boolean lv, Boolean rv) {
33 return lv.booleanValue() || rv.booleanValue() ? Boolean.TRUE : Boolean.FALSE;
34 }
35
36 public String getExpressionSymbol() {
37 return "OR";
38 }
39 };
40 }
41
42 public static BooleanExpression createAND(BooleanExpression lvalue, BooleanExpression rvalue) {
43 return new LogicExpression(lvalue, rvalue) {
44 protected Object evaluate(Boolean lv, Boolean rv) {
45 return lv.booleanValue() && rv.booleanValue() ? Boolean.TRUE : Boolean.FALSE;
46 }
47
48 public String getExpressionSymbol() {
49 return "AND";
50 }
51 };
52 }
53
54 /***
55 * @param left
56 * @param right
57 */
58 public LogicExpression(BooleanExpression left, BooleanExpression right) {
59 super(left, right);
60 }
61
62 public Object evaluate(Message message) throws JMSException {
63 Boolean lv = (Boolean) left.evaluate(message);
64 if (lv == null) {
65 return null;
66 }
67 Boolean rv = (Boolean) right.evaluate(message);
68 if (rv == null) {
69 return null;
70 }
71 return evaluate(lv, rv);
72 }
73
74 abstract protected Object evaluate(Boolean lv, Boolean rv);
75
76 }