All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy