001: /**********************************************************************
002: Copyright (c) 2003 Erik Bengtson and others. All rights reserved.
003: Licensed under the Apache License, Version 2.0 (the "License");
004: you may not use this file except in compliance with the License.
005: You may obtain a copy of the License at
006:
007: http://www.apache.org/licenses/LICENSE-2.0
008:
009: Unless required by applicable law or agreed to in writing, software
010: distributed under the License is distributed on an "AS IS" BASIS,
011: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012: See the License for the specific language governing permissions and
013: limitations under the License.
014:
015: Contributors:
016: 2003 Andy Jefferson - coding standards
017: ...
018: **********************************************************************/package org.jpox.store.expression;
019:
020: import org.jpox.store.mapping.JavaTypeMapping;
021:
022: /**
023: * Representation of a Boolean literal in a Query.
024: *
025: * @version $Revision: 1.5 $
026: **/
027: public class BooleanLiteral extends BooleanExpression implements
028: Literal {
029: private final boolean value;
030:
031: /** Raw value that this literal represents. */
032: Object rawValue;
033:
034: /**
035: * Creates a boolean literal
036: * @param qs the QueryExpression
037: * @param mapping the mapping
038: * @param value the binary value
039: */
040: public BooleanLiteral(QueryExpression qs, JavaTypeMapping mapping,
041: boolean value) {
042: super (qs);
043: this .mapping = mapping;
044: this .value = value;
045: st.append(value ? getBooleanTrueValue()
046: : getBooleanFalseValue());
047: }
048:
049: public Object getValue() {
050: return new Boolean(value);
051: }
052:
053: /**
054: * Return the String value for TRUE in the database. This should be
055: * overriden by subclasses for special cases of booleans.
056: *
057: * @return The String value for TRUE in the database.
058: */
059: protected String getBooleanTrueValue() {
060: return "TRUE";
061: }
062:
063: /**
064: * Return the String value for FALSE in the database. This should be
065: * overriden by subclasses for special cases of booleans.
066: *
067: * @return The String value for FALSE in the database.
068: */
069: protected String getBooleanFalseValue() {
070: return "(1=0)";
071: }
072:
073: public BooleanExpression and(ScalarExpression expr) {
074: if (expr instanceof BooleanExpression) {
075: return value ? (BooleanExpression) expr : this ;
076: } else {
077: return super .and(expr);
078: }
079: }
080:
081: public BooleanExpression eor(ScalarExpression expr) {
082: if (expr instanceof BooleanExpression) {
083: return value ? expr.not() : (BooleanExpression) expr;
084: } else {
085: return super .eor(expr);
086: }
087: }
088:
089: public BooleanExpression ior(ScalarExpression expr) {
090: if (expr instanceof BooleanExpression) {
091: return value ? this : (BooleanExpression) expr;
092: } else {
093: return super .ior(expr);
094: }
095: }
096:
097: public BooleanExpression not() {
098: return new BooleanLiteral(qs, mapping, !value);
099: }
100:
101: public BooleanExpression eq(ScalarExpression expr) {
102: assertValidTypeForParameterComparison(expr,
103: BooleanExpression.class);
104:
105: if (expr instanceof BooleanExpression) {
106: return value ? (BooleanExpression) expr : expr.not();
107: } else {
108: return super .eq(expr);
109: }
110: }
111:
112: public BooleanExpression noteq(ScalarExpression expr) {
113: assertValidTypeForParameterComparison(expr,
114: BooleanExpression.class);
115:
116: if (expr instanceof BooleanExpression) {
117: return value ? expr.not() : (BooleanExpression) expr;
118: } else {
119: return super .noteq(expr);
120: }
121: }
122:
123: /**
124: * Method to save a "raw" value that this literal represents.
125: * This value differs from the literal value since that is of the same type as this literal.
126: * @param val The raw value
127: */
128: public void setRawValue(Object val) {
129: this .rawValue = val;
130: }
131:
132: /**
133: * Accessor for the "raw" value that this literal represents.
134: * This value differs from the literal value since that is of the same type as this literal.
135: * @return The raw value
136: */
137: public Object getRawValue() {
138: return rawValue;
139: }
140: }
|