/* Copyright 2005-2006 Tim Fennell
*
* 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 net.sourceforge.stripes.util.bean;
import java.lang.reflect.Type;
/**
* Represents a Node in an expression which has been evaluated against a specific bean in
* order to determine additional type information etc. NodeEvaluation is to {@link Node}, what
* {@link PropertyExpressionEvaluation} is to {@link PropertyExpression}.
*
* @author Tim Fennell
* @since Stripes 1.4
*/
public class NodeEvaluation {
private Node node;
private NodeType type;
private Type valueType;
private Class<?> keyType;
private PropertyExpressionEvaluation expressionEvaluation;
private NodeEvaluation next, previous;
/**
* Constructs a new NodeEvaluation for the specified part of an expression evaluation.
* @param expressionEvaluation the parent expression evaluation
* @param node the node that this evaluation is a mirror for
*/
public NodeEvaluation(PropertyExpressionEvaluation expressionEvaluation, Node node) {
this.expressionEvaluation = expressionEvaluation;
this.node = node;
}
/** Gets the PropertyExpressionEvaluation that this NodeEvaluation is a part of. */
public PropertyExpressionEvaluation getExpressionEvaluation() { return expressionEvaluation; }
/** Sets the PropertyExpressionEvaluation that this NodeEvaluation is a part of. */
public void setExpressionEvaluation(PropertyExpressionEvaluation expressionEvaluation) {
this.expressionEvaluation = expressionEvaluation;
}
/** Gets the Node that is represented in the evaluation by this NodeEvaluation. */
public Node getNode() { return node; }
/** Sets the Node that is represented in the evaluation by this NodeEvaluation. */
public void setNode(Node node) { this.node = node; }
/** Gets the type of the node (bean property, list item etc.). */
public NodeType getType() { return type; }
/** Gets the type of the node (bean property, list item etc.). */
public void setType(NodeType type) { this.type = type; }
/** Gets the Type object which represents the type returned by evaluating up to this node. */
public Type getValueType() { return valueType; }
/** Sets the Type object which represents the type returned by evaluating up to this node. */
public void setValueType(Type valueType) { this.valueType = valueType; }
/**
* Gets the class object which represents the key type determined during evaluation
* of the expression against the provided bean. Only usually relevant for Map entries,
* when it stores the Class specified by the generic signature of the Map.
*
* @return a Class object or null
*/
public Class<?> getKeyType() { return keyType; }
/** Gets the class object which represents the key type for this node if applicable. */
public void setKeyType(Class<?> keyType) { this.keyType = keyType; }
/** Gets the next NodeEvaluation in the chain, or null if this is the terminal node. */
public NodeEvaluation getNext() { return next; }
/** Sets the next NodeEvaluation in the chain. */
public void setNext(NodeEvaluation next) { this.next = next; }
/** Gets the previous NodeEvaluation in the chain, or null if this is the first node. */
public NodeEvaluation getPrevious() { return previous; }
/** Sets the previous NodeEvaluation in the chain. */
public void setPrevious(NodeEvaluation previous) { this.previous = previous; }
}