freemarker.ext.jython

Class JythonWrapper

Implemented Interfaces:
ObjectWrapper

public class JythonWrapper
extends java.lang.Object
implements ObjectWrapper

An object wrapper that wraps Jython objects into FreeMarker template models and vice versa.
Version:
$Id: JythonWrapper.java,v 1.23.2.1 2005/10/04 16:18:08 revusky Exp $
Author:
Attila Szegedi

Field Summary

static JythonWrapper
INSTANCE

Fields inherited from interface freemarker.template.ObjectWrapper

BEANS_WRAPPER, DEFAULT_WRAPPER, SIMPLE_WRAPPER

Constructor Summary

JythonWrapper()

Method Summary

void
setAttributesShadowItems(boolean attributesShadowItems)
Sets whether attributes shadow items in wrapped objects.
void
setUseCache(boolean useCache)
Sets whether this wrapper caches model instances.
PyObject
unwrap(TemplateModel model)
Coerces a template model into a PyObject.
TemplateModel
wrap(Object obj)
Wraps the passed Jython object into a FreeMarker template model.

Field Details

INSTANCE

public static final JythonWrapper INSTANCE

Constructor Details

JythonWrapper

public JythonWrapper()

Method Details

setAttributesShadowItems

public void setAttributesShadowItems(boolean attributesShadowItems)
Sets whether attributes shadow items in wrapped objects. When true (this is the default value), ${object.name} will first try to locate a python attribute with the specified name on the object using PyObject.__findattr__(java.lang.String), and only if it doesn't find the attribute will it call PyObject.__getitem__(org.python.core.PyObject). When set to false, the lookup order is reversed and items are looked up before attributes.

setUseCache

public void setUseCache(boolean useCache)

unwrap

public PyObject unwrap(TemplateModel model)
            throws TemplateModelException
Coerces a template model into a PyObject.
Parameters:
model - the model to coerce
Returns:
the coerced model.
  • AdapterTemplateModels (i.e. BeanModel) are marshalled using the standard Python marshaller Py.java2py(Object) on the result of getWrappedObject(PyObject.class)s. The native JythonModel instances will just return the underlying PyObject.
  • All other models that are scalars are marshalled as PyString.
  • All other models that are numbers are marshalled using the standard Python marshaller Py.java2py(Object) on their underlying Number
  • All other models are marshalled to a generic internal PyObject subclass that'll correctly pass __finditem__, __len__, __nonzero__, and __call__ invocations to appropriate hash, sequence, and method models.

wrap

public TemplateModel wrap(Object obj)
Wraps the passed Jython object into a FreeMarker template model. If the object is not a Jython object, it is first coerced into one using Py.java2py(java.lang.Object). PyDictionary and PyStringMap are wrapped into a hash model, PySequence descendants are wrapped into a sequence model, PyInteger, PyLong, and PyFloat are wrapped into a number model. All objects are wrapped into a scalar model (using Object.toString() and a boolean model (using PyObject.__nonzero__(). For internal general-purpose PyObjects returned from a call to unwrap(TemplateModel), the template model that was passed to unwrap is returned.
Specified by:
wrap in interface ObjectWrapper