/*
* Copyright 2008 Udai Gupta, Ralf Joachim
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.castor.cpa.query.object.expression;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
import org.castor.cpa.query.Condition;
import org.castor.cpa.query.Expression;
import org.castor.cpa.query.Function;
import org.castor.cpa.query.Parameter;
import org.castor.cpa.query.TemporalType;
import org.castor.cpa.query.TrimSpecification;
import org.castor.cpa.query.object.AbstractQueryObject;
import org.castor.cpa.query.object.condition.Between;
import org.castor.cpa.query.object.condition.Comparison;
import org.castor.cpa.query.object.condition.Like;
import org.castor.cpa.query.object.function.Abs;
import org.castor.cpa.query.object.function.Length;
import org.castor.cpa.query.object.function.Locate;
import org.castor.cpa.query.object.function.Lower;
import org.castor.cpa.query.object.function.Sqrt;
import org.castor.cpa.query.object.function.Substring;
import org.castor.cpa.query.object.function.Trim;
import org.castor.cpa.query.object.function.Upper;
import org.castor.cpa.query.object.literal.AbstractTemporalLiteral;
import org.castor.cpa.query.object.literal.BigDecimalLiteral;
import org.castor.cpa.query.object.literal.BooleanLiteral;
import org.castor.cpa.query.object.literal.DoubleLiteral;
import org.castor.cpa.query.object.literal.LongLiteral;
import org.castor.cpa.query.object.literal.StringLiteral;
/**
* Abstract base class for Expressions.
*
* @author <a href="mailto:mailtoud AT gmail DOT com">Udai Gupta</a>
* @author <a href="mailto:ralf DOT joachim AT syscon DOT eu">Ralf Joachim</a>
* @version $Revision: 7121 $ $Date: 2006-04-25 16:09:10 -0600 (Tue, 25 Apr 2006) $
* @since 1.3
*/
public abstract class AbstractExpression extends AbstractQueryObject implements Expression {
//--------------------------------------------------------------------------
/**
* {@inheritDoc}
*/
public final Expression add(final long value) {
return add(new LongLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Expression add(final double value) {
return add(new DoubleLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Expression add(final BigDecimal value) {
return add(new BigDecimalLiteral(value));
}
/**
* {@inheritDoc}
*/
public Expression add(final Expression expression) {
Add add = new Add();
add.addExpression(this);
add.addExpression(expression);
return add;
}
/**
* {@inheritDoc}
*/
public final Expression subtract(final long value) {
return subtract(new LongLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Expression subtract(final double value) {
return subtract(new DoubleLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Expression subtract(final BigDecimal value) {
return subtract(new BigDecimalLiteral(value));
}
/**
* {@inheritDoc}
*/
public Expression subtract(final Expression expression) {
Subtract subtract = new Subtract();
subtract.addExpression(this);
subtract.addExpression(expression);
return subtract;
}
/**
* {@inheritDoc}
*/
public final Expression concat(final String value) {
return concat(new StringLiteral(value));
}
/**
* {@inheritDoc}
*/
public Expression concat(final Expression expression) {
Concat concat = new Concat();
concat.addExpression(this);
concat.addExpression(expression);
return concat;
}
/**
* {@inheritDoc}
*/
public final Expression multiply(final long value) {
return multiply(new LongLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Expression multiply(final double value) {
return multiply(new DoubleLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Expression multiply(final BigDecimal value) {
return multiply(new BigDecimalLiteral(value));
}
/**
* {@inheritDoc}
*/
public Expression multiply(final Expression expression) {
Multiply multiply = new Multiply();
multiply.addExpression(this);
multiply.addExpression(expression);
return multiply;
}
/**
* {@inheritDoc}
*/
public final Expression divide(final long value) {
return divide(new LongLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Expression divide(final double value) {
return divide(new DoubleLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Expression divide(final BigDecimal value) {
return divide(new BigDecimalLiteral(value));
}
/**
* {@inheritDoc}
*/
public Expression divide(final Expression expression) {
Divide divide = new Divide();
divide.addExpression(this);
divide.addExpression(expression);
return divide;
}
/**
* {@inheritDoc}
*/
public final Expression remainder(final long value) {
return remainder(new LongLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Expression remainder(final double value) {
return remainder(new DoubleLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Expression remainder(final BigDecimal value) {
return remainder(new BigDecimalLiteral(value));
}
/**
* {@inheritDoc}
*/
public Expression remainder(final Expression expression) {
Remainder remainder = new Remainder();
remainder.addExpression(this);
remainder.addExpression(expression);
return remainder;
}
/**
* {@inheritDoc}
*/
public final Expression plus() {
return this;
}
/**
* {@inheritDoc}
*/
public Expression negate() {
Negate negate = new Negate();
negate.setExpression(this);
return negate;
}
/**
* {@inheritDoc}
*/
public final Function length() {
Length length = new Length();
length.setString(this);
return length;
}
/**
* {@inheritDoc}
*/
public final Function abs() {
Abs abs = new Abs();
abs.setNumber(this);
return abs;
}
/**
* {@inheritDoc}
*/
public final Function sqrt() {
Sqrt sqrt = new Sqrt();
sqrt.setNumber(this);
return sqrt;
}
/**
* {@inheritDoc}
*/
public final Function lower() {
Lower lower = new Lower();
lower.setString(this);
return lower;
}
/**
* {@inheritDoc}
*/
public final Function upper() {
Upper upper = new Upper();
upper.setString(this);
return upper;
}
/**
* {@inheritDoc}
*/
public final Function locate(final String value) {
return locate(new StringLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Function locate(final Expression value) {
Locate locate = new Locate();
locate.setString(this);
locate.setValue(value);
return locate;
}
/**
* {@inheritDoc}
*/
public final Function locate(final String value, final int index) {
return locate(new StringLiteral(value), new LongLiteral(index));
}
/**
* {@inheritDoc}
*/
public final Function locate(final String value, final Expression index) {
return locate(new StringLiteral(value), index);
}
/**
* {@inheritDoc}
*/
public final Function locate(final Expression value, final int index) {
return locate(value, new LongLiteral(index));
}
/**
* {@inheritDoc}
*/
public final Function locate(final Expression value, final Expression index) {
Locate locate = new Locate();
locate.setString(this);
locate.setValue(value);
locate.setIndex(index);
return locate;
}
/**
* {@inheritDoc}
*/
public final Function substring(final int index, final int length) {
return substring(new LongLiteral(index), new LongLiteral(length));
}
/**
* {@inheritDoc}
*/
public final Function substring(final int index, final Expression length) {
return substring(new LongLiteral(index), length);
}
/**
* {@inheritDoc}
*/
public final Function substring(final Expression index, final int length) {
return substring(index, new LongLiteral(length));
}
/**
* {@inheritDoc}
*/
public final Function substring(final Expression index, final Expression length) {
Substring substring = new Substring();
substring.setString(this);
substring.setIndex(index);
substring.setLength(length);
return substring;
}
/**
* {@inheritDoc}
*/
public final Function trim() {
Trim trim = new Trim();
trim.setString(this);
return trim;
}
/**
* {@inheritDoc}
*/
public final Function trim(final char character) {
Trim trim = new Trim();
trim.setString(this);
trim.setCharacter(new StringLiteral(Character.toString(character)));
return trim;
}
/**
* {@inheritDoc}
*/
public final Function trim(final Parameter character) {
Trim trim = new Trim();
trim.setString(this);
trim.setCharacter(character);
return trim;
}
/**
* {@inheritDoc}
*/
public final Function trim(final TrimSpecification trimSpecification) {
Trim trim = new Trim();
trim.setString(this);
trim.setSpecification(trimSpecification);
return trim;
}
/**
* {@inheritDoc}
*/
public final Function trim(final TrimSpecification trimSpecification, final char character) {
Trim trim = new Trim();
trim.setString(this);
trim.setSpecification(trimSpecification);
trim.setCharacter(new StringLiteral(Character.toString(character)));
return trim;
}
/**
* {@inheritDoc}
*/
public final Function trim(final TrimSpecification trimSpecification,
final Parameter character) {
Trim trim = new Trim();
trim.setString(this);
trim.setSpecification(trimSpecification);
trim.setCharacter(character);
return trim;
}
/**
* {@inheritDoc}
*/
public final Condition equal(final boolean value) {
return equal(new BooleanLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition equal(final long value) {
return equal(new LongLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition equal(final double value) {
return equal(new DoubleLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition equal(final BigDecimal value) {
return equal(new BigDecimalLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition equal(final String value) {
return equal(new StringLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition equal(final TemporalType temporalType, final Date value) {
return equal(AbstractTemporalLiteral.createInstance(temporalType, value));
}
/**
* {@inheritDoc}
*/
public final Condition equal(final TemporalType temporalType, final Calendar value) {
return equal(AbstractTemporalLiteral.createInstance(temporalType, value));
}
/**
* {@inheritDoc}
*/
public final Condition equal(final Expression value) {
Comparison comp = new Comparison(Comparison.EQUAL);
comp.setLeftSide(this);
comp.setRightSide(value);
return comp;
}
/**
* {@inheritDoc}
*/
public final Condition notEqual(final boolean value) {
return notEqual(new BooleanLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition notEqual(final long value) {
return notEqual(new LongLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition notEqual(final double value) {
return notEqual(new DoubleLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition notEqual(final BigDecimal value) {
return notEqual(new BigDecimalLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition notEqual(final String value) {
return notEqual(new StringLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition notEqual(final TemporalType temporalType, final Date value) {
return notEqual(AbstractTemporalLiteral.createInstance(temporalType, value));
}
/**
* {@inheritDoc}
*/
public final Condition notEqual(final TemporalType temporalType, final Calendar value) {
return notEqual(AbstractTemporalLiteral.createInstance(temporalType, value));
}
/**
* {@inheritDoc}
*/
public final Condition notEqual(final Expression value) {
Comparison comp = new Comparison(Comparison.NOT_EQUAL);
comp.setLeftSide(this);
comp.setRightSide(value);
return comp;
}
/**
* {@inheritDoc}
*/
public final Condition lessThan(final long value) {
return lessThan(new LongLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition lessThan(final double value) {
return lessThan(new DoubleLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition lessThan(final BigDecimal value) {
return lessThan(new BigDecimalLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition lessThan(final String value) {
return lessThan(new StringLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition lessThan(final TemporalType temporalType, final Date value) {
return lessThan(AbstractTemporalLiteral.createInstance(temporalType, value));
}
/**
* {@inheritDoc}
*/
public final Condition lessThan(final TemporalType temporalType, final Calendar value) {
return lessThan(AbstractTemporalLiteral.createInstance(temporalType, value));
}
/**
* {@inheritDoc}
*/
public final Condition lessThan(final Expression value) {
Comparison comp = new Comparison(Comparison.LESS_THAN);
comp.setLeftSide(this);
comp.setRightSide(value);
return comp;
}
/**
* {@inheritDoc}
*/
public final Condition lessEqual(final long value) {
return lessEqual(new LongLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition lessEqual(final double value) {
return lessEqual(new DoubleLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition lessEqual(final BigDecimal value) {
return lessEqual(new BigDecimalLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition lessEqual(final String value) {
return lessEqual(new StringLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition lessEqual(final TemporalType temporalType, final Date value) {
return lessEqual(AbstractTemporalLiteral.createInstance(temporalType, value));
}
/**
* {@inheritDoc}
*/
public final Condition lessEqual(final TemporalType temporalType, final Calendar value) {
return lessEqual(AbstractTemporalLiteral.createInstance(temporalType, value));
}
/**
* {@inheritDoc}
*/
public final Condition lessEqual(final Expression value) {
Comparison comp = new Comparison(Comparison.LESS_EQUAL);
comp.setLeftSide(this);
comp.setRightSide(value);
return comp;
}
/**
* {@inheritDoc}
*/
public final Condition greaterEqual(final long value) {
return greaterEqual(new LongLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition greaterEqual(final double value) {
return greaterEqual(new DoubleLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition greaterEqual(final BigDecimal value) {
return greaterEqual(new BigDecimalLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition greaterEqual(final String value) {
return greaterEqual(new StringLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition greaterEqual(final TemporalType temporalType, final Date value) {
return greaterEqual(AbstractTemporalLiteral.createInstance(temporalType, value));
}
/**
* {@inheritDoc}
*/
public final Condition greaterEqual(final TemporalType temporalType, final Calendar value) {
return greaterEqual(AbstractTemporalLiteral.createInstance(temporalType, value));
}
/**
* {@inheritDoc}
*/
public final Condition greaterEqual(final Expression value) {
Comparison comp = new Comparison(Comparison.GREATER_EQUAL);
comp.setLeftSide(this);
comp.setRightSide(value);
return comp;
}
/**
* {@inheritDoc}
*/
public final Condition greaterThan(final long value) {
return greaterThan(new LongLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition greaterThan(final double value) {
return greaterThan(new DoubleLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition greaterThan(final BigDecimal value) {
return greaterThan(new BigDecimalLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition greaterThan(final String value) {
return greaterThan(new StringLiteral(value));
}
/**
* {@inheritDoc}
*/
public final Condition greaterThan(final TemporalType temporalType, final Date value) {
return greaterThan(AbstractTemporalLiteral.createInstance(temporalType, value));
}
/**
* {@inheritDoc}
*/
public final Condition greaterThan(final TemporalType temporalType, final Calendar value) {
return greaterThan(AbstractTemporalLiteral.createInstance(temporalType, value));
}
/**
* {@inheritDoc}
*/
public final Condition greaterThan(final Expression value) {
Comparison comp = new Comparison(Comparison.GREATER_THAN);
comp.setLeftSide(this);
comp.setRightSide(value);
return comp;
}
/**
* {@inheritDoc}
*/
public final Condition like(final String pattern) {
Like like = new Like();
like.setNot(false);
like.setExpression(this);
like.setPattern(new StringLiteral(pattern));
return like;
}
/**
* {@inheritDoc}
*/
public final Condition like(final Parameter pattern) {
Like like = new Like();
like.setNot(false);
like.setExpression(this);
like.setPattern(pattern);
return like;
}
/**
* {@inheritDoc}
*/
public final Condition like(final String pattern, final char escape) {
Like like = new Like();
like.setNot(false);
like.setExpression(this);
like.setPattern(new StringLiteral(pattern));
like.setEscape(new StringLiteral(Character.toString(escape)));
return like;
}
/**
* {@inheritDoc}
*/
public final Condition like(final String pattern, final Parameter escape) {
Like like = new Like();
like.setNot(false);
like.setExpression(this);
like.setPattern(new StringLiteral(pattern));
like.setEscape(escape);
return like;
}
/**
* {@inheritDoc}
*/
public final Condition like(final Parameter pattern, final char escape) {
Like like = new Like();
like.setNot(false);
like.setExpression(this);
like.setPattern(pattern);
like.setEscape(new StringLiteral(Character.toString(escape)));
return like;
}
/**
* {@inheritDoc}
*/
public final Condition like(final Parameter pattern, final Parameter escape) {
Like like = new Like();
like.setNot(false);
like.setExpression(this);
like.setPattern(pattern);
like.setEscape(escape);
return like;
}
/**
* {@inheritDoc}
*/
public final Condition notLike(final String pattern) {
Like like = new Like();
like.setNot(true);
like.setExpression(this);
like.setPattern(new StringLiteral(pattern));
return like;
}
/**
* {@inheritDoc}
*/
public final Condition notLike(final String pattern, final char escape) {
Like like = new Like();
like.setNot(true);
like.setExpression(this);
like.setPattern(new StringLiteral(pattern));
like.setEscape(new StringLiteral(Character.toString(escape)));
return like;
}
/**
* {@inheritDoc}
*/
public final Condition notLike(final String pattern, final Parameter escape) {
Like like = new Like();
like.setNot(true);
like.setExpression(this);
like.setPattern(new StringLiteral(pattern));
like.setEscape(escape);
return like;
}
/**
* {@inheritDoc}
*/
public final Condition notLike(final Parameter pattern) {
Like like = new Like();
like.setNot(true);
like.setExpression(this);
like.setPattern(pattern);
return like;
}
/**
* {@inheritDoc}
*/
public final Condition notLike(final Parameter pattern, final char escape) {
Like like = new Like();
like.setNot(true);
like.setExpression(this);
like.setPattern(pattern);
like.setEscape(new StringLiteral(Character.toString(escape)));
return like;
}
/**
* {@inheritDoc}
*/
public final Condition notLike(final Parameter pattern, final Parameter escape) {
Like like = new Like();
like.setNot(true);
like.setExpression(this);
like.setPattern(pattern);
like.setEscape(escape);
return like;
}
/**
* {@inheritDoc}
*/
public final Condition between(final long low, final long high) {
return between(new LongLiteral(low), new LongLiteral(high));
}
/**
* {@inheritDoc}
*/
public final Condition between(final double low, final double high) {
return between(new DoubleLiteral(low), new DoubleLiteral(high));
}
/**
* {@inheritDoc}
*/
public final Condition between(final BigDecimal low, final BigDecimal high) {
return between(new BigDecimalLiteral(low), new BigDecimalLiteral(high));
}
/**
* {@inheritDoc}
*/
public final Condition between(final String low, final String high) {
return between(new StringLiteral(low), new StringLiteral(high));
}
/**
* {@inheritDoc}
*/
public final Condition between(final TemporalType temporalType,
final Date low, final Date high) {
return between(AbstractTemporalLiteral.createInstance(temporalType, low),
AbstractTemporalLiteral.createInstance(temporalType, high));
}
/**
* {@inheritDoc}
*/
public final Condition between(final TemporalType temporalType,
final Calendar low, final Calendar high) {
return between(AbstractTemporalLiteral.createInstance(temporalType, low),
AbstractTemporalLiteral.createInstance(temporalType, high));
}
/**
* {@inheritDoc}
*/
public final Condition between(final Expression low, final Expression high) {
Between between = new Between();
between.setNot(false);
between.setExpression(this);
between.setLow(low);
between.setHigh(high);
return between;
}
/**
* {@inheritDoc}
*/
public final Condition notBetween(final long low, final long high) {
return notBetween(new LongLiteral(low), new LongLiteral(high));
}
/**
* {@inheritDoc}
*/
public final Condition notBetween(final double low, final double high) {
return notBetween(new DoubleLiteral(low), new DoubleLiteral(high));
}
/**
* {@inheritDoc}
*/
public final Condition notBetween(final BigDecimal low, final BigDecimal high) {
return notBetween(new BigDecimalLiteral(low), new BigDecimalLiteral(high));
}
/**
* {@inheritDoc}
*/
public final Condition notBetween(final String low, final String high) {
return notBetween(new StringLiteral(low), new StringLiteral(high));
}
/**
* {@inheritDoc}
*/
public final Condition notBetween(final TemporalType temporalType,
final Date low, final Date high) {
return notBetween(AbstractTemporalLiteral.createInstance(temporalType, low),
AbstractTemporalLiteral.createInstance(temporalType, high));
}
/**
* {@inheritDoc}
*/
public final Condition notBetween(final TemporalType temporalType,
final Calendar low, final Calendar high) {
return notBetween(AbstractTemporalLiteral.createInstance(temporalType, low),
AbstractTemporalLiteral.createInstance(temporalType, high));
}
/**
* {@inheritDoc}
*/
public final Condition notBetween(final Expression low, final Expression high) {
Between between = new Between();
between.setNot(true);
between.setExpression(this);
between.setLow(low);
between.setHigh(high);
return between;
}
//--------------------------------------------------------------------------
}