Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
   * Copyright (c) 2003 The Visigoth Software Society. All rights
   * reserved.
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
  *    the documentation and/or other materials provided with the
  *    distribution.
  * 3. The end-user documentation included with the redistribution, if
  *    any, must include the following acknowledgement:
  *       "This product includes software developed by the
  *        Visigoth Software Society ("
  *    Alternately, this acknowledgement may appear in the software itself,
  *    if and wherever such third-party acknowledgements normally appear.
  * 4. Neither the name "FreeMarker", "Visigoth", nor any of the names of the 
  *    project contributors may be used to endorse or promote products derived
  *    from this software without prior written permission. For written
  *    permission, please contact
  * 5. Products derived from this software may not be called "FreeMarker" or "Visigoth"
  *    nor may "FreeMarker" or "Visigoth" appear in their names
  *    without prior written permission of the Visigoth Software Society.
  * ====================================================================
  * This software consists of voluntary contributions made by many
  * individuals on behalf of the Visigoth Software Society. For more
  * information on the Visigoth Software Society, please see
 package freemarker.template;
 import java.util.Map;

The default implementation of the ObjectWrapper interface.

$Id:,v 1.23 2005/06/08 00:06:19 revusky Exp $
     static final DefaultObjectWrapper instance = new DefaultObjectWrapper();
     static private Class W3C_DOM_NODE_CLASS
     static private ObjectWrapper JYTHON_WRAPPER;
     static {
         try {
              = Class.forName("org.w3c.dom.Node");
         } catch (Exception e) {}
         try {
              = Class.forName("org.python.core.PyObject");
         } catch (Exception e) {}
     public TemplateModel wrap(Object objthrows TemplateModelException {
         if (obj == null) {
             return super.wrap(null);
         if (obj instanceof TemplateModel) {
             return (TemplateModelobj;
         if (obj instanceof String) {
             return new SimpleScalar((Stringobj);
         if (obj instanceof Number) {
             return new SimpleNumber((Numberobj);
        if (obj instanceof java.util.Date) {
            if(obj instanceof java.sql.Date) {
                return new SimpleDate((java.sql.Dateobj);
            if(obj instanceof java.sql.Time) {
                return new SimpleDate((java.sql.Timeobj);
            if(obj instanceof java.sql.Timestamp) {
                return new SimpleDate((java.sql.Timestampobj);
            return new SimpleDate((java.util.DateobjgetDefaultDateType());
        if (obj.getClass().isArray()) {
            obj = convertArray(obj);
        if (obj instanceof Collection) {
            return new SimpleSequence((Collectionobjthis);
        if (obj instanceof Map) {
            return new SimpleHash((Mapobjthis);
        if (obj instanceof Boolean) {
            return obj.equals(.) ? . : .;
        if (obj instanceof Iterator) {
            return new SimpleCollection((Iteratorobjthis);
        return handleUnknownType(obj);
Called if an unknown type is passed in. Since 2.3, this falls back on XML wrapper and BeansWrapper functionality.
    protected TemplateModel handleUnknownType(Object objthrows TemplateModelException {
        if (( != null && .isInstance(obj)))
            return wrapDomNode(obj);
        if ( != null  && .isInstance(obj)) {
            return .wrap(obj);
        return super.wrap(obj); 
    public TemplateModel wrapDomNode(Object obj) {
        return NodeModel.wrap((org.w3c.dom.Nodeobj);

Converts an array to a java.util.List
    protected Object convertArray(Object arr) {
        final int size = Array.getLength(arr);
        ArrayList list = new ArrayList(size);
        for (int i=0;i<sizei++) {
        return list;
New to GrepCode? Check out our FAQ X