/* SimpleResolver.java
Purpose:
Description:
History:
Thu Oct 28 15:15:04 2004, Created by tomyeh
Copyright (C) 2004 Potix Corporation. All Rights Reserved.
{{IS_RIGHT
This program is distributed under LGPL Version 2.1 in the hope that
it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.xel.util;
import java.util.Map;
import org.zkoss.xel.VariableResolver;
import org.zkoss.xel.VariableResolverX;
import org.zkoss.xel.XelException;
/**
* A simple resolver that retrieve variable from a map.
* <p>Note: since 5.0.8, it becomes serializable. Thus, the parent and
* vars parameter
* of {@link #SimpleResolver(VariableResolver, Map)} have to serializable
* in the clustering environment.
*
* @author tomyeh
* @since 3.0.0
*/
public class SimpleResolver implements VariableResolver, java.io.Serializable {
/** The parent resolver. */
private VariableResolver _parent;
/** The variable maps. */
protected Map<String, ?> _vars;
/** Constructs a resolver. */
public SimpleResolver() {
this(null, null);
}
/** Constructs a resolver with a parent.
* @param parent the parent resolver (null means ignored).
*/
public SimpleResolver(VariableResolver parent) {
this(parent, null);
}
/** Constructs a resolver with a parent and an object map.
* @param parent the parent resolver (null means ignored).
* @param vars the object map (null means ignored)
*/
public SimpleResolver(VariableResolver parent, Map<String, ?> vars) {
_parent = parent;
_vars = vars;
}
/** Constructs a resolver with an object map.
* @param vars the object map (null means ignored)
*/
public SimpleResolver(Map<String, ?> vars) {
this(null, vars);
}
/** Returns the parent, or null if no parent at all.
*/
public VariableResolver getParent() {
return _parent;
}
/** Sets the parent.
*
* @param parent the parent resolver, or null if no parent.
*/
public void setParent(VariableResolver parent) {
_parent = parent;
}
//-- VariableResolver --//
public Object resolveVariable(String name) throws XelException {
if (_vars != null) {
final Object o = _vars.get(name);
if (o != null)
return o;
}
return _parent instanceof VariableResolverX ?
((VariableResolverX)_parent).resolveVariable(null, null, name):
_parent != null ? _parent.resolveVariable(name): null;
}
}