1 /***
2 * Redistribution and use of this software and associated documentation
3 * ("Software"), with or without modification, are permitted provided
4 * that the following conditions are met:
5 *
6 * 1. Redistributions of source code must retain copyright
7 * statements and notices. Redistributions must also contain a
8 * copy of this document.
9 *
10 * 2. Redistributions in binary form must reproduce the
11 * above copyright notice, this list of conditions and the
12 * following disclaimer in the documentation and/or other
13 * materials provided with the distribution.
14 *
15 * 3. The name "Exolab" must not be used to endorse or promote
16 * products derived from this Software without prior written
17 * permission of Exoffice Technologies. For written permission,
18 * please contact info@exolab.org.
19 *
20 * 4. Products derived from this Software may not be called "Exolab"
21 * nor may "Exolab" appear in their names without prior written
22 * permission of Exoffice Technologies. Exolab is a registered
23 * trademark of Exoffice Technologies.
24 *
25 * 5. Due credit should be given to the Exolab Project
26 * (http://www.exolab.org/).
27 *
28 * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS
29 * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
30 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
31 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
32 * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
33 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
35 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
37 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
39 * OF THE POSSIBILITY OF SUCH DAMAGE.
40 *
41 * Copyright 2000-2001,2003 (C) Exoffice Technologies Inc. All Rights Reserved.
42 */
43
44 package org.exolab.jms.selector;
45
46
47 /***
48 * This class is an adapter for the Boolean type.
49 *
50 * @version $Revision: 1.1 $ $Date: 2004/11/26 01:50:44 $
51 * @author <a href="mailto:tma@netspace.net.au">Tim Anderson</a>
52 * @see SObject
53 */
54 class SBool extends SObject {
55
56 /***
57 * Boolean true
58 */
59 public static final SBool TRUE = new SBool(Boolean.TRUE);
60
61 /***
62 * Boolean false
63 */
64 public static final SBool FALSE = new SBool(Boolean.FALSE);
65
66 /***
67 * The wrapped value
68 */
69 private Boolean _value;
70
71
72 /***
73 * Construct a new <code>SBool</code>
74 *
75 * @param value the boolean value
76 */
77 public SBool(final Boolean value) {
78 _value = value;
79 }
80
81 /***
82 * Returns the value of this, wrapped in a <code>Boolean</code>
83 *
84 * @return the value of this, wrapped in a <code>Boolean</code>
85 */
86 public final Object getObject() {
87 return _value;
88 }
89
90 /***
91 * Returns the value of this
92 *
93 * @return the value of this
94 */
95 public final boolean value() {
96 return _value.booleanValue();
97 }
98
99 /***
100 * Evaluates <code>this AND rhs</code>
101 *
102 * @param rhs the right hand side of the expression. May be null
103 * @return <code>SBool.TRUE</code> if <code>this</code> and
104 * <code>rhs</code> are <code>true</code>, <code>SBool.FALSE</code>
105 * if one is <code>false</code>, or <code>null</code> if <code>rhs</code>
106 * is <code>null</code>
107 */
108 public final SBool and(final SBool rhs) {
109 SBool result = null;
110 if (rhs != null) {
111 if (value() && rhs.value()) {
112 result = SBool.TRUE;
113 } else {
114 result = SBool.FALSE;
115 }
116 } else if (!value()) {
117 result = SBool.FALSE;
118 }
119
120 return result;
121 }
122
123 /***
124 * Evaluates <code>this OR rhs</code>
125 *
126 * @param rhs the right hand side of the expression. May be null
127 * @return <code>SBool.TRUE</code> if <code>this</code> is
128 * <code>true</code>, otherwise <code>rhs</code>
129 */
130 public final SBool or(final SBool rhs) {
131 SBool result = null;
132 if (value()) {
133 result = SBool.TRUE;
134 } else {
135 result = rhs;
136 }
137 return result;
138 }
139
140 /***
141 * Evaluates <code>NOT this</code>
142 *
143 * @return <code>SBool.TRUE</code> if <code>this</code> is
144 * <code>false</code>, otherwise <code>SBool.FALSE</code>
145 */
146 public final SBool not() {
147 SBool result = SBool.TRUE;
148 if (value()) {
149 result = SBool.FALSE;
150 }
151 return result;
152 }
153
154 /***
155 * Returns the type of this
156 *
157 * @return {@link Type#BOOLEAN}
158 */
159 public final Type type() {
160 return Type.BOOLEAN;
161 }
162
163 }