diff --git a/webapp/src/freemarker/ext/dump/BaseDumpDirective.java b/webapp/src/freemarker/ext/dump/BaseDumpDirective.java index c26084fc5..282bf6e1b 100644 --- a/webapp/src/freemarker/ext/dump/BaseDumpDirective.java +++ b/webapp/src/freemarker/ext/dump/BaseDumpDirective.java @@ -41,11 +41,6 @@ import freemarker.template.TemplateScalarModel; import freemarker.template.TemplateSequenceModel; import freemarker.template.utility.DeepUnwrap; -/* TODO - * - Check error messages generated for TemplateModelException-s. If too generic, need to catch, create specific - * error message, and rethrow. - */ - public abstract class BaseDumpDirective implements TemplateDirectiveModel { private static final Log log = LogFactory.getLog(BaseDumpDirective.class); @@ -112,16 +107,20 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { } } - - protected Map getTemplateVariableData(String varName, Environment env) + protected Map getTemplateVariableDump(String varName, Environment env) throws TemplateModelException { - + + TemplateHashModel dataModel = env.getDataModel(); + TemplateModel model = dataModel.get(varName); + return getTemplateVariableDump(varName, model); + } + + protected Map getTemplateVariableDump(String varName, TemplateModel model) + throws TemplateModelException { + Map map = new HashMap(); map.put(Key.NAME.toString(), varName); - TemplateHashModel dataModel = env.getDataModel(); - TemplateModel model = dataModel.get(varName); - // Don't return null if model == null. We still want to send the map to the template. if (model != null) { // TemplateMethodModel and TemplateDirectiveModel objects can only be @@ -133,14 +132,14 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { map.putAll( getTemplateModelData( ( TemplateDirectiveModel)model, varName ) ); } else { - map.putAll(getData(model)); + map.putAll(getDump(model)); } } - return map; + return map; } - - private Map getData(TemplateModel model) throws TemplateModelException { + + private Map getDump(TemplateModel model) throws TemplateModelException { Map map = new HashMap(); // Don't return null if model == null. We still want to send the map to the template. @@ -254,7 +253,7 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { List> items = new ArrayList>(itemCount); for ( int i = 0; i < itemCount; i++ ) { TemplateModel item = model.get(i); - items.add(getData(item)); + items.add(getDump(item)); } map.put(Key.VALUE.toString(), items); return map; @@ -281,7 +280,7 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { while (iModel.hasNext()) { String key = iModel.next().toString(); TemplateModel value = model.get(key); - items.put(key, getData(value)); + items.put(key, getDump(value)); } map.put(Key.VALUE.toString(), items); return map; @@ -344,7 +343,7 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { // The method is available as a property if (keySet.contains(propertyName)) { TemplateModel value = model.get(propertyName); - properties.put(propertyName, getData(value)); + properties.put(propertyName, getDump(value)); continue; } } @@ -398,7 +397,7 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { TemplateModelIterator iModel = model.iterator(); while (iModel.hasNext()) { TemplateModel m = iModel.next(); - items.add(getData(m)); + items.add(getDump(m)); } map.put(Key.VALUE.toString(), items); return map; @@ -449,7 +448,7 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { return map; } - protected void dump(String templateName, Map map, String modelName, Environment env) + protected void dump(String templateName, Map map, Environment env) throws TemplateException, IOException { Template template = env.getConfiguration().getTemplate(templateName); diff --git a/webapp/src/freemarker/ext/dump/DumpDirective.java b/webapp/src/freemarker/ext/dump/DumpDirective.java index 8a3730868..b4be4595a 100644 --- a/webapp/src/freemarker/ext/dump/DumpDirective.java +++ b/webapp/src/freemarker/ext/dump/DumpDirective.java @@ -30,6 +30,7 @@ public class DumpDirective extends BaseDumpDirective { throw new TemplateModelException( "The dump directive doesn't allow loop variables."); } + if (body != null) { throw new TemplateModelException( "The dump directive doesn't allow nested content."); @@ -43,8 +44,8 @@ public class DumpDirective extends BaseDumpDirective { String varName = ((SimpleScalar)o).getAsString(); Map map = new HashMap(); - map.put("var", getTemplateVariableData(varName, env)); + map.put("var", getTemplateVariableDump(varName, env)); - dump("dumpvar.ftl", map, varName, env); + dump("dumpvar.ftl", map, env); } }