org.activiti.engine.impl.juel.ExpressionNode Maven / Gradle / Ivy
The newest version!
/*
* Based on JUEL 2.2.1 code, 2006-2009 Odysseus Software GmbH
*
* 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.activiti.engine.impl.juel;
import org.activiti.engine.impl.javax.el.ELContext;
import org.activiti.engine.impl.javax.el.MethodInfo;
import org.activiti.engine.impl.javax.el.ValueReference;
/**
* Expression node interface. This interface provides all the methods needed for value expressions
* and method expressions.
*
* @see org.activiti.engine.impl.juel.Tree
* @author Christoph Beck
*/
public interface ExpressionNode extends Node {
/**
* @return true
if this node represents literal text
*/
public boolean isLiteralText();
/**
* @return true
if the subtree rooted at this node could be used as an lvalue
* expression (identifier or property sequence with non-literal prefix).
*/
public boolean isLeftValue();
/**
* @return true
if the subtree rooted at this node is a method invocation.
*/
public boolean isMethodInvocation();
/**
* Evaluate node.
*
* @param bindings
* bindings containing variables and functions
* @param context
* evaluation context
* @param expectedType
* result type
* @return evaluated node, coerced to the expected type
*/
public Object getValue(Bindings bindings, ELContext context, Class> expectedType);
/**
* Get value reference.
*
* @param bindings
* @param context
* @return value reference
*/
public ValueReference getValueReference(Bindings bindings, ELContext context);
/**
* Get the value type accepted in {@link #setValue(Bindings, ELContext, Object)}.
*
* @param bindings
* bindings containing variables and functions
* @param context
* evaluation context
* @return accepted type or null
for non-lvalue nodes
*/
public Class> getType(Bindings bindings, ELContext context);
/**
* Determine whether {@link #setValue(Bindings, ELContext, Object)} will throw a
* {@link org.activiti.engine.impl.javax.el.PropertyNotWritableException}.
*
* @param bindings
* bindings containing variables and functions
* @param context
* evaluation context
* @return true
if this a read-only expression node
*/
public boolean isReadOnly(Bindings bindings, ELContext context);
/**
* Assign value.
*
* @param bindings
* bindings containing variables and functions
* @param context
* evaluation context
* @param value
* value to set
*/
public void setValue(Bindings bindings, ELContext context, Object value);
/**
* Get method information. If this is a non-lvalue node, answer null
.
*
* @param bindings
* bindings containing variables and functions
* @param context
* evaluation context
* @param returnType
* expected method return type (may be null
meaning don't care)
* @param paramTypes
* expected method argument types
* @return method information or null
*/
public MethodInfo getMethodInfo(Bindings bindings, ELContext context, Class> returnType, Class>[] paramTypes);
/**
* Invoke method.
*
* @param bindings
* bindings containing variables and functions
* @param context
* evaluation context
* @param returnType
* expected method return type (may be null
meaning don't care)
* @param paramTypes
* expected method argument types
* @param paramValues
* parameter values
* @return result of the method invocation
*/
public Object invoke(Bindings bindings, ELContext context, Class> returnType, Class>[] paramTypes, Object[] paramValues);
/**
* Get the canonical expression string for this node. Variable and funtion names will be
* replaced in a way such that two expression nodes that have the same node structure and
* bindings will also answer the same value here.
*
* For example, "${foo:bar()+2*foobar}"
may lead to
* "${<fn>() + 2 * <var>}"
if foobar
is a bound variable.
* Otherwise, the structural id would be "${<fn>() + 2 * foobar}"
.
*
* If the bindings is null
, the full canonical subexpression is returned.
*/
public String getStructuralId(Bindings bindings);
}