01: /*
02: * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved
03: *
04: * This file is part of Resin(R) Open Source
05: *
06: * Each copy or derived work must preserve the copyright notice and this
07: * notice unmodified.
08: *
09: * Resin Open Source is free software; you can redistribute it and/or modify
10: * it under the terms of the GNU General Public License as published by
11: * the Free Software Foundation; either version 2 of the License, or
12: * (at your option) any later version.
13: *
14: * Resin Open Source is distributed in the hope that it will be useful,
15: * but WITHOUT ANY WARRANTY; without even the implied warranty of
16: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
17: * of NON-INFRINGEMENT. See the GNU General Public License for more
18: * details.
19: *
20: * You should have received a copy of the GNU General Public License
21: * along with Resin Open Source; if not, write to the
22: * Free SoftwareFoundation, Inc.
23: * 59 Temple Place, Suite 330
24: * Boston, MA 02111-1307 USA
25: *
26: * @author Scott Ferguson
27: */
28:
29: package com.caucho.jms.selector;
30:
31: import javax.jms.InvalidSelectorException;
32: import javax.jms.JMSException;
33: import javax.jms.Message;
34:
35: /**
36: * The base selector.
37: */
38: public class OrSelector extends Selector {
39: private Selector _left;
40: private Selector _right;
41:
42: OrSelector(Selector left, Selector right) throws JMSException {
43: _left = left;
44: _right = right;
45:
46: if (!_left.isUnknown() && !_left.isBoolean())
47: throw new InvalidSelectorException(L.l(
48: "'{0}' must have a numeric value for comparison.",
49: this ));
50: if (!_right.isUnknown() && !_right.isBoolean())
51: throw new InvalidSelectorException(L.l(
52: "'{0}' must have a numeric value for comparison.",
53: this ));
54: }
55:
56: /**
57: * Returns true since the value is a boolean.
58: */
59: boolean isBoolean() {
60: return true;
61: }
62:
63: /**
64: * Returns false, since the type is known.
65: */
66: boolean isUnknown() {
67: return false;
68: }
69:
70: /**
71: * Evaluate the message. The boolean literal selector returns
72: * the value of the boolean.
73: */
74: public Object evaluate(Message message) throws JMSException {
75: Object lvalue = _left.evaluate(message);
76:
77: if ((lvalue instanceof Boolean)
78: && ((Boolean) lvalue).booleanValue())
79: return Boolean.TRUE;
80:
81: Object rvalue = _right.evaluate(message);
82:
83: if (rvalue == null)
84: return NULL;
85:
86: if ((rvalue instanceof Boolean)
87: && ((Boolean) rvalue).booleanValue())
88: return Boolean.TRUE;
89: else if (lvalue instanceof Boolean || rvalue instanceof Boolean)
90: return Boolean.FALSE;
91: else
92: return NULL;
93: }
94:
95: public String toString() {
96: return _left + " OR " + _right;
97: }
98: }
|