# com.bea.p13n.expression
Expression Interface

public interface Expression
extends `Cloneable`, `Serializable`

An interface implemented by all simple and complex expressions. An expression is a runtime interpreted well formed piece of simple Java code ( all kinds of expressions, conditional statements, etc ). Expression objects can contain sub-expressions, sub-expressions can also be Java literals(Double, Float, Integer, etc). Expressions maintain parent information, children information, internal cache and a parameter signature.

All Known Implementing Classes
  `ComplexExpressionImpl`

All Superinterfaces
  `Cloneable`, `Serializable`

All Known Subinterfaces
  `ProxyExpression`

## Method Summary

`public void` | `addSubExpression`(`Object` object) Adds the supplied object as a child of this expression.
`public void` | `clearCache`() Clears any cached results to force re-evaluation.
`public `Object`` | `clone`() Returns a clone of this.
`public `Object`` | `getCachedValue`() Returns the cached value for this expression, if the cache is enabled for this expression.
`public `Class`[]` | `getParameterSignature`() Returns the parameter signature for this `Expression`.
`public `Expression`` | `getParent`() Returns the parent of this expression.
`public `Object`` | `getSubExpression`(int index) Returns the sub-expression (child) at the specified position.
`public int` | `getSubExpressionCount`() Returns the number of sub-expressions (children of this expression).
`public boolean` | `isCached`() Returns `true` if this expression has a cached value.
`public boolean` | `isCacheEnabled`() Returns true if this `Expression` is caching the result of evaluating this.
`public void` | `removeAllSubExpressions`() Removes all the sub-expressions (children) of this.
`public `Object`` | `removeSubExpression`(int index) Removes the (child) sub-expression at the specified position.
`public boolean` | `removeSubExpression`(`Object` object) Removes the supplied (child) sub-expression.
`public void` | `setCachedValue`(`Object` obj) Sets the given object that is the result of evaluating this expression as the cached result value for this expression.
`public void` | `setCacheEnabled`(boolean enable) Enables the result caching for this `Expression`.
`public void` | `setSubExpression`(int index, `Object` object) Replaces the sub-expression (child) at the specified position.
`public void` | `write`(`PrintStream` out) Writes the expression (in text form) to an OutputStream.

## Method Detail

### addSubExpression(Object) Method

    public void addSubExpression(Object object)

Adds the supplied object as a child of this expression. If the supplied object is an instance of `Expression` and if it already has a parent, then a proxy expression will be created and added as a child of this expression.

#### Parameters

object
  The object added as a child of this.

Related Topics

``ProxyExpression``

### clearCache() Method

    public void clearCache()

Clears any cached results to force re-evaluation. Should also call clearCache on any parent-expressions to force this `Expression` to be re-evaluated.

### clone() Method

    public Object clone()
         throws CloneNotSupportedException

Returns a clone of this.

#### Returns

A clone of this.

#### Exceptions

``CloneNotSupportedException``

### getCachedValue() Method

    public Object getCachedValue()

Returns the cached value for this expression, if the cache is enabled for this expression.

#### Returns

the result of evaluating this expression.

Related Topics

``Expression.isCached()``

### getParameterSignature() Method

    public Class[] getParameterSignature()

Returns the parameter signature for this `Expression`. Because the sub-expressions within the `Expression` are typically arguments or operands, some type validation is performed by examining the class types of the sub-expressions against the `Expression`'s parameter signature.
The tests that are performed are:
1. The number of sub-expressions must equals the number of parameter entries.
2. The class type of any sub-expression (or the result of evaluating the sub-expresssion) must equal the class type of the corresponding parameter entry.
3. Any null parameter entries are ignored and are considered optional sub-expressions.

#### Returns

the Class array containing the parameter signature.

### getParent() Method

    public Expression getParent()

Returns the parent of this expression.

#### Returns

The parent of this.

### getSubExpression(int) Method

    public Object getSubExpression(int index)

Returns the sub-expression (child) at the specified position.

#### Parameters

index
  The index of the sub-expression (child) to return.

#### Returns

The sub-expression (child) at the supplied index.

### getSubExpressionCount() Method

    public int getSubExpressionCount()

Returns the number of sub-expressions (children of this expression).

#### Returns

The number of sub-expressions

### isCached() Method

    public boolean isCached()

Returns `true` if this expression has a cached value.

#### Returns

`true` If this expression has a cached value, otherwise `false`.

### isCacheEnabled() Method

    public boolean isCacheEnabled()

Returns true if this `Expression` is caching the result of evaluating this.

#### Returns

`true` if caching is enabled otherwise `false`.

### removeAllSubExpressions() Method

    public void removeAllSubExpressions()

Removes all the sub-expressions (children) of this.

### removeSubExpression(int) Method

    public Object removeSubExpression(int index)

Removes the (child) sub-expression at the specified position.

#### Parameters

index
  The index of the (child) sub-expression to remove.

#### Returns

The removed (child) sub-expression.

### removeSubExpression(Object) Method

    public boolean removeSubExpression(Object object)

Removes the supplied (child) sub-expression.

#### Parameters

object
  The (child) sub-expression to remove.

#### Returns

`true` If the (child) sub-expression is removed successfully, otherwise `false`.

### setCachedValue(Object) Method

    public void setCachedValue(Object obj)

Sets the given object that is the result of evaluating this expression as the cached result value for this expression. The evaluate method will return the cached value if isCached() method returns true.

#### Parameters

obj
  the value to be cached

Related Topics

``Expression.isCached()``

### setCacheEnabled(boolean) Method

    public void setCacheEnabled(boolean enable)

Enables the result caching for this `Expression`.

#### Parameters

enable
  `true` to enable the result caching.

### setSubExpression(int, Object) Method

    public void setSubExpression(int index,
                                 Object object)

Replaces the sub-expression (child) at the specified position.

Note: If the given object (child) is an expression then it is replaced by `null` in the previous parent's children list.

#### Parameters

index
  The index of the (child) sub-expression to replace.

object
  The new sub-expression (child) to be stored at the specified position.

### write(PrintStream) Method

    public void write(PrintStream out)

Writes the expression (in text form) to an OutputStream.

#### Parameters

out
  A `PrintStream`.