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 c173b0fe8..a62c9a02e 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 @@ -137,8 +137,10 @@ public class FreeMarkerHttpServlet extends VitroHttpServlet { setLoginInfo(); setCopyrightInfo(); setThemeInfo(themeDir); - setScriptAndStylesheetObjects(themeDir); - + setScriptAndStylesheetObjects(themeDir); + + setSharedVariable("dump", new edu.cornell.mannlib.vitro.webapp.web.directives.DumpDirective()); + setSharedVariable("dumpDataModel", new edu.cornell.mannlib.vitro.webapp.web.directives.DumpDataModelDirective()); } private void setScriptAndStylesheetObjects(String themeDir) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/DumpDataModelDirective.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/DumpDataModelDirective.java new file mode 100644 index 000000000..b065e9020 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/DumpDataModelDirective.java @@ -0,0 +1,80 @@ +package edu.cornell.mannlib.vitro.webapp.web.directives; + +import java.io.IOException; +import java.io.Writer; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; + +import freemarker.core.Environment; +import freemarker.template.Configuration; +import freemarker.template.SimpleScalar; +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 DumpDataModelDirective implements TemplateDirectiveModel { + + @SuppressWarnings({ "unchecked", "deprecation" }) + @Override + public void execute(Environment env, Map params, TemplateModel[] loopVars, + TemplateDirectiveBody body) throws TemplateException, IOException { + + if (params.size() != 0) { + throw new TemplateModelException( + "The dump directive doesn't allow parameters."); + } + if (loopVars.length != 0) { + 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."); + } + + TemplateHashModel dataModel = env.getDataModel(); + String output = "Data model: "; + + Map dm = (Map) DeepUnwrap.permissiveUnwrap(dataModel); + Set varNames = dm.keySet(); + for (Object varName : varNames) { + output += (String) varName + ", "; + } + + // Add shared variables + Configuration config = env.getConfiguration(); + Set sharedVars = config.getSharedVariableNames(); + Iterator i = sharedVars.iterator(); + while (i.hasNext()) { + String sv = (String) i.next(); + TemplateModel tm = config.getSharedVariable(sv); + if (tm instanceof TemplateDirectiveModel || + // Legacy built-ins that are added to all configurations + tm instanceof freemarker.template.utility.CaptureOutput || + tm instanceof freemarker.template.utility.StandardCompress || + tm instanceof freemarker.template.utility.HtmlEscape || + tm instanceof freemarker.template.utility.NormalizeNewlines || + tm instanceof freemarker.template.utility.XmlEscape) { + continue; + } + output += sv + ", "; + } + + output = output.replaceAll(", $", "."); + + + // 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 + "
"); + + } + +} 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 05f48c8f6..f3038ebb9 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 @@ -41,41 +41,8 @@ public class DumpDirective implements TemplateDirectiveModel { String var = ((SimpleScalar)o).getAsString(); TemplateHashModel dataModel = env.getDataModel(); - String output; - - if (var.equals("data_model")) { - output = "Data model: "; - Map dm = (Map) DeepUnwrap.permissiveUnwrap(dataModel); - Set varNames = dm.keySet(); - for (Object varName : varNames) { - output += (String) varName + ", "; - } - - // Add shared variables - Configuration config = env.getConfiguration(); - Set sharedVars = config.getSharedVariableNames(); - Iterator i = sharedVars.iterator(); - while (i.hasNext()) { - String sv = (String) i.next(); - TemplateModel tm = config.getSharedVariable(sv); - if (tm instanceof TemplateDirectiveModel || - // Legacy built-ins that are added to all configurations - tm instanceof freemarker.template.utility.CaptureOutput || - tm instanceof freemarker.template.utility.StandardCompress || - tm instanceof freemarker.template.utility.HtmlEscape || - tm instanceof freemarker.template.utility.NormalizeNewlines || - tm instanceof freemarker.template.utility.XmlEscape) { - continue; - } - output += sv + ", "; - } - - output = output.replaceAll(", $", "."); - - } else { - TemplateModel val = dataModel.get(var); - output = var + ": " + val.toString(); - } + TemplateModel val = dataModel.get(var); + String output = var + ": " + val.toString(); // RY Improve by making presentation of various types more nuanced // Also merge to a template for formatting diff --git a/webapp/web/templates/freemarker/body/test.ftl b/webapp/web/templates/freemarker/body/test.ftl index 6c8f78b72..0372b012b 100644 --- a/webapp/web/templates/freemarker/body/test.ftl +++ b/webapp/web/templates/freemarker/body/test.ftl @@ -25,6 +25,6 @@

Animal: ${animal}

-<@dump var="fruit" /> +<@dump var="now" /> <@dump var="urls" /> -<@dump var="data_model" /> +<@dump var="fruit" />