Search in sources :

Example 1 with PySequence

use of org.python.core.PySequence in project freemarker by apache.

the class JythonModelCache method create.

@Override
protected TemplateModel create(Object obj) {
    boolean asHash = false;
    boolean asSequence = false;
    JythonVersionAdapter versionAdapter = JythonVersionAdapterHolder.INSTANCE;
    if (versionAdapter.isPyInstance(obj)) {
        Object jobj = versionAdapter.pyInstanceToJava(obj);
        // FreeMarker-aware, Jython-wrapped Java objects are left intact
        if (jobj instanceof TemplateModel) {
            return (TemplateModel) jobj;
        }
        if (jobj instanceof Map) {
            asHash = true;
        }
        if (jobj instanceof Date) {
            return new DateModel((Date) jobj, BeansWrapper.getDefaultInstance());
        } else if (jobj instanceof Collection) {
            asSequence = true;
            // doesn't support sets.
            if (!(jobj instanceof List)) {
                obj = new ArrayList((Collection) jobj);
            }
        }
    }
    // If it's not a PyObject, first make a PyObject out of it.
    if (!(obj instanceof PyObject)) {
        obj = Py.java2py(obj);
    }
    if (asHash || obj instanceof PyDictionary || obj instanceof PyStringMap) {
        return JythonHashModel.FACTORY.create(obj, wrapper);
    }
    if (asSequence || obj instanceof PySequence) {
        return JythonSequenceModel.FACTORY.create(obj, wrapper);
    }
    if (obj instanceof PyInteger || obj instanceof PyLong || obj instanceof PyFloat) {
        return JythonNumberModel.FACTORY.create(obj, wrapper);
    }
    if (obj instanceof PyNone) {
        return null;
    }
    return JythonModel.FACTORY.create(obj, wrapper);
}
Also used : DateModel(freemarker.ext.beans.DateModel) ArrayList(java.util.ArrayList) PyFloat(org.python.core.PyFloat) TemplateModel(freemarker.template.TemplateModel) PyInteger(org.python.core.PyInteger) PyDictionary(org.python.core.PyDictionary) Date(java.util.Date) PyNone(org.python.core.PyNone) PyLong(org.python.core.PyLong) PyStringMap(org.python.core.PyStringMap) Collection(java.util.Collection) PyObject(org.python.core.PyObject) ArrayList(java.util.ArrayList) List(java.util.List) PySequence(org.python.core.PySequence) PyStringMap(org.python.core.PyStringMap) Map(java.util.Map) PyObject(org.python.core.PyObject)

Aggregations

DateModel (freemarker.ext.beans.DateModel)1 TemplateModel (freemarker.template.TemplateModel)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Date (java.util.Date)1 List (java.util.List)1 Map (java.util.Map)1 PyDictionary (org.python.core.PyDictionary)1 PyFloat (org.python.core.PyFloat)1 PyInteger (org.python.core.PyInteger)1 PyLong (org.python.core.PyLong)1 PyNone (org.python.core.PyNone)1 PyObject (org.python.core.PyObject)1 PySequence (org.python.core.PySequence)1 PyStringMap (org.python.core.PyStringMap)1