QJCC homepage

biz.chitec.quarterback.util.logic
Class AlgebraicExpr

java.lang.Object
  extended bybiz.chitec.quarterback.util.logic.AlgebraicExpr
All Implemented Interfaces:
java.lang.Cloneable, LogicExpr
Direct Known Subclasses:
ANDExpr, ORExpr

public abstract class AlgebraicExpr
extends java.lang.Object
implements LogicExpr

Common superclass for AND, OR and further operations of Boolean algebra

Version:
$Id: 0acf1a58945b4cb0f4e16063a4cbad812fe162c7 $
Author:
cantamen/Dirk Hillbrecht 2005. Distributed under the terms of the GNU LGPL.

Nested Class Summary
 
Nested classes inherited from class biz.chitec.quarterback.util.logic.LogicExpr
LogicExpr.Converter, LogicExpr.UniverseGenerator
 
Field Summary
protected  java.util.List expressions
           
 
Constructor Summary
protected AlgebraicExpr()
           
protected AlgebraicExpr(LogicExpr e1x, LogicExpr e2x)
           
protected AlgebraicExpr(java.lang.Object[] os)
           
 
Method Summary
 java.lang.Object clone()
          Deep-copy the logic expression.
 void convertValues(LogicExpr.Converter c)
          Conversion of values in the expressions (e.g. for replacing external representations of database entries with their internal key)
 boolean equals(java.lang.Object o)
           
 java.util.List getExpressions()
          Return all expressions.
 java.lang.Object[] getInternalVars()
          Only for GJSA class parsers: get class variables to create object from a parsed string.
 boolean hasLeafsOnly()
          Returns whether the algebraic expression has only leaf nodes.
 boolean isReady()
          Returns if the expression is actually evaluable, i.e. any of the evaluating methods can be called.
 boolean isTreeReady()
          Returns whether this and all deeper expressions are evaluable.
 
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface biz.chitec.quarterback.util.logic.LogicExpr
evaluate, getResultSet, sqlString
 

Field Detail

expressions

protected java.util.List expressions
Constructor Detail

AlgebraicExpr

protected AlgebraicExpr()

AlgebraicExpr

protected AlgebraicExpr(LogicExpr e1x,
                        LogicExpr e2x)

AlgebraicExpr

protected AlgebraicExpr(java.lang.Object[] os)
Method Detail

clone

public java.lang.Object clone()
                       throws java.lang.CloneNotSupportedException
Description copied from interface: LogicExpr
Deep-copy the logic expression. The contract for this method says the the logic expression must be deep-copied. I.e. if clone() is called for the root expression of a certain expression tree, a completely independent tree is returned.

Note: This method must be defined in a way that makes it quite complicated to call it for simply cloning a logic expression tree: It returns an Object (which always happens to be a LogicExpr) and it might throw a CloneNotSupportedException - which will (a) never happen and is (b) no RuntimeException, so a caller would always have to catch it.

To make life simpler, there is a static method LogicExprUtilties.cloneLogicExpr() which will call clone() on the root object and take care of return value and exceptions.

Specified by:
clone in interface LogicExpr
Throws:
java.lang.CloneNotSupportedException

equals

public boolean equals(java.lang.Object o)

hasLeafsOnly

public boolean hasLeafsOnly()
Returns whether the algebraic expression has only leaf nodes. This method allows to detect whether this algebraic expression has any further algebraic expressions below it. If this returns true, all children of this node are final children, i.e. no further algebraic operations come below this one.

Returns:
true if only leafs are below this expression, false otherwise.

isReady

public boolean isReady()
Description copied from interface: LogicExpr
Returns if the expression is actually evaluable, i.e. any of the evaluating methods can be called. If this method returns false, the expression should not be evaluated. Note that this method does not care for the evaluation state of any potential children of this LogicExpr. Use isTreeEvaluable() for this test.

Specified by:
isReady in interface LogicExpr
Returns:
True if an evaluation is possible, false if not.

isTreeReady

public boolean isTreeReady()
Description copied from interface: LogicExpr
Returns whether this and all deeper expressions are evaluable. Walks through the the expression tree and returns only true if all expressions below are evaluable.

Specified by:
isTreeReady in interface LogicExpr
Returns:
True if this and all expressions below are evaluable, false otherwise.

getExpressions

public java.util.List getExpressions()
Return all expressions. This method returns the real thing. It is possible to add or remove elements to and from the list which is reflected by the algebraic expression immediately

Returns:
Internal list of expressions

getInternalVars

public java.lang.Object[] getInternalVars()
Description copied from interface: LogicExpr
Only for GJSA class parsers: get class variables to create object from a parsed string.

Specified by:
getInternalVars in interface LogicExpr

convertValues

public void convertValues(LogicExpr.Converter c)
Description copied from interface: LogicExpr
Conversion of values in the expressions (e.g. for replacing external representations of database entries with their internal key)

Specified by:
convertValues in interface LogicExpr

QJCC homepage