From 83938a2c191965923693df748d01c6ba4df20a2c Mon Sep 17 00:00:00 2001 From: rjy7 Date: Tue, 27 Jul 2010 21:49:40 +0000 Subject: [PATCH] NIHVIVO-564 Work on dump directive --- .../FreemarkerComponentGenerator.java | 2 +- .../freemarker/FreemarkerHelper.java | 45 ++++++++++++++++ .../freemarker/FreemarkerHttpServlet.java | 26 ++-------- .../controller/freemarker/TestController.java | 3 ++ .../webapp/web/directives/DumpDirective.java | 52 +++++++++++++++---- webapp/web/css/dump.css | 9 ++++ .../body/partials/dump/dump-array.ftl | 9 ++++ .../body/partials/dump/dump-hash.ftl | 0 .../body/partials/dump/dump-string.ftl | 6 +++ .../body/partials/dump/dump-var.ftl | 17 ++++++ webapp/web/templates/freemarker/body/test.ftl | 2 + 11 files changed, 138 insertions(+), 33 deletions(-) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHelper.java create mode 100644 webapp/web/css/dump.css create mode 100644 webapp/web/templates/freemarker/body/partials/dump/dump-array.ftl create mode 100644 webapp/web/templates/freemarker/body/partials/dump/dump-hash.ftl create mode 100644 webapp/web/templates/freemarker/body/partials/dump/dump-string.ftl create mode 100644 webapp/web/templates/freemarker/body/partials/dump/dump-var.ftl diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerComponentGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerComponentGenerator.java index 1d7797a6b..98b4f7ada 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerComponentGenerator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerComponentGenerator.java @@ -24,7 +24,7 @@ import freemarker.template.Configuration; public class FreemarkerComponentGenerator extends FreemarkerHttpServlet { private static final long serialVersionUID = 1L; - private static final Log log = LogFactory.getLog(FreemarkerHttpServlet.class.getName()); + private static final Log log = LogFactory.getLog(FreemarkerComponentGenerator.class); private static ServletContext context = null; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHelper.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHelper.java new file mode 100644 index 000000000..e2ef37e95 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHelper.java @@ -0,0 +1,45 @@ +package edu.cornell.mannlib.vitro.webapp.controller.freemarker; + +import java.io.IOException; +import java.io.StringWriter; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; + +public class FreemarkerHelper { + + private static final Log log = LogFactory.getLog(FreemarkerHelper.class); + + public StringWriter mergeToTemplate(String templateName, Map map, Configuration config) { + + Template template = null; + try { + template = config.getTemplate(templateName); + } catch (IOException e) { + log.error("Cannot get template " + templateName); + } + StringWriter sw = new StringWriter(); + if (template != null) { + try { + template.process(map, sw); + } catch (TemplateException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + return sw; + } + + public String mergeMapToTemplate(String templateName, Map map, Configuration config) { + return mergeToTemplate(templateName, map, config).toString(); + } + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java index 4f57a6234..68eed2dde 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java @@ -50,7 +50,7 @@ import freemarker.template.TemplateModelException; public class FreemarkerHttpServlet extends VitroHttpServlet { private static final long serialVersionUID = 1L; - private static final Log log = LogFactory.getLog(FreemarkerHttpServlet.class.getName()); + private static final Log log = LogFactory.getLog(FreemarkerHttpServlet.class); private static final int FILTER_SECURITY_LEVEL = LoginFormBean.EDITOR; public void doGet( HttpServletRequest request, HttpServletResponse response ) @@ -375,27 +375,9 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { return ""; } - protected StringWriter mergeToTemplate(String templateName, Map map, Configuration config) { - - Template template = null; - try { - template = config.getTemplate(templateName); - } catch (IOException e) { - log.error("Cannot get template " + templateName); - } - StringWriter sw = new StringWriter(); - if (template != null) { - try { - template.process(map, sw); - } catch (TemplateException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - return sw; + protected StringWriter mergeToTemplate(String templateName, Map map, Configuration config) { + FreemarkerHelper helper = new FreemarkerHelper(); + return helper.mergeToTemplate(templateName, map, config); } protected String mergeBodyToTemplate(String templateName, Map map, Configuration config) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TestController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TestController.java index c9cb30460..e4a79aba7 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TestController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TestController.java @@ -69,6 +69,9 @@ public class TestController extends FreemarkerHttpServlet { body.put("zoo1", zoo1); body.put("zoo2", zoo2); + body.put("trueStatement", true); + body.put("falseStatement", false); + getBerries(body); body.put("bookTitle", "Pride and Prejudice"); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/DumpDirective.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/DumpDirective.java index 67220005c..b6329acd4 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/DumpDirective.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/DumpDirective.java @@ -4,20 +4,22 @@ package edu.cornell.mannlib.vitro.webapp.web.directives; import java.io.IOException; import java.io.Writer; -import java.util.Iterator; +import java.util.HashMap; import java.util.Map; -import java.util.Set; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHelper; import freemarker.core.Environment; import freemarker.template.Configuration; +import freemarker.template.SimpleDate; import freemarker.template.SimpleScalar; +import freemarker.template.SimpleSequence; +import freemarker.template.TemplateBooleanModel; import freemarker.template.TemplateDirectiveBody; import freemarker.template.TemplateDirectiveModel; import freemarker.template.TemplateException; import freemarker.template.TemplateHashModel; import freemarker.template.TemplateModel; import freemarker.template.TemplateModelException; -import freemarker.template.utility.DeepUnwrap; public class DumpDirective implements TemplateDirectiveModel { @@ -43,15 +45,45 @@ public class DumpDirective implements TemplateDirectiveModel { String var = ((SimpleScalar)o).getAsString(); TemplateHashModel dataModel = env.getDataModel(); - TemplateModel val = dataModel.get(var); - String output = var + ": " + val.toString(); + TemplateModel val = dataModel.get(var); + + Configuration config = env.getConfiguration(); + String templateName = "dump-var.ftl"; + String includeTemplate; + Object value = val; + String type = null; + + if (val instanceof SimpleScalar) { + includeTemplate = "dump-string.ftl"; + type = "string"; + } else if (val instanceof SimpleDate) { + includeTemplate = "dump-string.ftl"; + value = value.toString(); + type = "date"; + } else if (val instanceof TemplateBooleanModel) { + includeTemplate = "dump-string.ftl"; + value = ((TemplateBooleanModel) val).getAsBoolean() ? "true" : "false"; + type = "boolean"; + } else if (val instanceof SimpleSequence){ + includeTemplate = "dump-array.ftl"; + type = "array"; + } else { + includeTemplate = "dump-string.ftl"; + value = value.toString(); + type = "object"; + } + + Map map = new HashMap(); + map.put("var", var); + map.put("value", value); + map.put("includeTemplate", includeTemplate); + map.put("type", type); + + FreemarkerHelper helper = new FreemarkerHelper(); + String output = helper.mergeMapToTemplate(templateName, map, config); - // RY Improve by making presentation of various types more nuanced - // Also merge to a template for formatting: - // get config from environment; get a template from config - // merge as in FreeMarkerHttpServlet.mergeToTemplate() Writer out = env.getOut(); - out.write(output + "
"); + out.write(output); } diff --git a/webapp/web/css/dump.css b/webapp/web/css/dump.css new file mode 100644 index 000000000..c3cb632fe --- /dev/null +++ b/webapp/web/css/dump.css @@ -0,0 +1,9 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +/* Styles for Freemarker template variable dump */ + +.dump { + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; + padding: 5em 0; +} diff --git a/webapp/web/templates/freemarker/body/partials/dump/dump-array.ftl b/webapp/web/templates/freemarker/body/partials/dump/dump-array.ftl new file mode 100644 index 000000000..85969ea48 --- /dev/null +++ b/webapp/web/templates/freemarker/body/partials/dump/dump-array.ftl @@ -0,0 +1,9 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + +<#-- Template for dumping string values --> + +
    +<#list value as item> +
  • ${item_index}: ${item}
  • + +
\ No newline at end of file diff --git a/webapp/web/templates/freemarker/body/partials/dump/dump-hash.ftl b/webapp/web/templates/freemarker/body/partials/dump/dump-hash.ftl new file mode 100644 index 000000000..e69de29bb diff --git a/webapp/web/templates/freemarker/body/partials/dump/dump-string.ftl b/webapp/web/templates/freemarker/body/partials/dump/dump-string.ftl new file mode 100644 index 000000000..daf9f0b9a --- /dev/null +++ b/webapp/web/templates/freemarker/body/partials/dump/dump-string.ftl @@ -0,0 +1,6 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + +<#-- Template for dumping string values --> + +${value} + diff --git a/webapp/web/templates/freemarker/body/partials/dump/dump-var.ftl b/webapp/web/templates/freemarker/body/partials/dump/dump-var.ftl new file mode 100644 index 000000000..bef6ec915 --- /dev/null +++ b/webapp/web/templates/freemarker/body/partials/dump/dump-var.ftl @@ -0,0 +1,17 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + +<#-- Template for dumping a template variable --> + +
+
+ +
Freemarker template variable dump
+ +Variable ${var}:
+Type: ${type}
+Value: +<#include includeTemplate /> + +
+ +
\ No newline at end of file diff --git a/webapp/web/templates/freemarker/body/test.ftl b/webapp/web/templates/freemarker/body/test.ftl index 9eda8098c..80bfc4dd6 100644 --- a/webapp/web/templates/freemarker/body/test.ftl +++ b/webapp/web/templates/freemarker/body/test.ftl @@ -49,6 +49,8 @@ <@dump var="now" /> <@dump var="urls" /> <@dump var="fruit" /> +<@dump var="trueStatement" /> +<@dump var="falseStatement" /> <@dumpDataModel /> ${stylesheets.addFromTheme("/sstest.css", "/sstest2.css")}