freemarker.ext.jython
Class JythonWrapper
java.lang.Object
freemarker.ext.jython.JythonWrapper
- All 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.21 2004/01/06 17:06:43 szegedia Exp $
- Author:
- Attila Szegedi
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. |
org.python.core.PyObject |
unwrap(TemplateModel model)
Coerces a template model into a PyObject . |
TemplateModel |
wrap(java.lang.Object obj)
Wraps the passed Jython object into a FreeMarker template model. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
INSTANCE
public static final JythonWrapper INSTANCE
JythonWrapper
public JythonWrapper()
setUseCache
public void setUseCache(boolean useCache)
- Sets whether this wrapper caches model instances. Default is false.
When set to true, calling
wrap(Object)
multiple times for
the same object will return the same model.
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.
wrap
public TemplateModel wrap(java.lang.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 PyObject
s returned from a call to unwrap(TemplateModel)
, the template model that was passed to
unwrap
is returned.
- Specified by:
wrap
in interface ObjectWrapper
- Returns:
- a TemplateModel wrapper of the object passed in.
unwrap
public org.python.core.PyObject unwrap(TemplateModel model)
throws TemplateModelException
- Coerces a template model into a
PyObject
.
- Parameters:
model
- the model to coerce
- Returns:
- the coerced model.
-
JythonModel
s are marshalled by simply returning their
underlying PyObject
WrapperTemplateModel
s (i.e. BeanModel
) are marshalled
using the standard Python marshaller Py.java2py(Object)
on
their underlying Object
s
- 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.
- Throws:
TemplateModelException