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 5ef15d567..861bc718f 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 @@ -57,7 +57,8 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { TITLED_ERROR_MESSAGE("error-titled.ftl"), MESSAGE("message.ftl"), TITLED_MESSAGE("message-titled.ftl"), - PAGE_DEFAULT("page.ftl"); + PAGE_DEFAULT("page.ftl"), + SETUP("setup.ftl"); private final String filename; @@ -162,19 +163,21 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { Configuration config = getConfig(vreq); Map bodyMap = values.getMap(); + TemplateProcessingHelper helper = new TemplateProcessingHelper(config, vreq, getServletContext()); // We can't use shared variables in the Freemarker configuration to store anything // except theme-specific data, because multiple portals or apps might share the same theme. So instead // just put the shared variables in both root and body. Map sharedVariables = getSharedVariables(vreq, bodyMap); - + + //helper.processSetupTemplate(config, vreq, sharedVariables); + // root is the map used to create the page shell - header, footer, menus, etc. - Map root = new HashMap(sharedVariables); - + Map root = new HashMap(sharedVariables); root.putAll(getPageTemplateValues(vreq)); // Tell the template and any directives it uses that we're processing a page template. root.put("templateType", PAGE_TEMPLATE_TYPE); - + // Add the values that we got, and merge to the template. String bodyTemplate = values.getTemplateName(); String bodyString; @@ -198,6 +201,11 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { writePage(root, config, vreq, response); } + private void processSetupTemplate(Configuration config, HttpServletRequest request, Map map) { + TemplateProcessingHelper helper = new TemplateProcessingHelper(config, request, getServletContext()); + helper.processTemplate(Template.SETUP.toString(), map); + } + protected void doRedirect(HttpServletRequest request, HttpServletResponse response, ResponseValues values) throws ServletException, IOException { String redirectUrl = values.getRedirectUrl(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TemplateProcessingHelper.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TemplateProcessingHelper.java index 9d5b2590b..a3366e487 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TemplateProcessingHelper.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TemplateProcessingHelper.java @@ -26,28 +26,30 @@ public class TemplateProcessingHelper { private Configuration config = null; private HttpServletRequest request = null; private ServletContext context = null; + //private Map templateDataModel = null; - public TemplateProcessingHelper(Configuration config, HttpServletRequest request, ServletContext context) { + TemplateProcessingHelper(Configuration config, HttpServletRequest request, ServletContext context) { this.config = config; this.request = request; this.context = context; + //this.templateDataModel = new HashMap(); } - - public StringWriter processTemplate(String templateName, Map map) { + + protected StringWriter processTemplate(String templateName, Map map) { Template template = getTemplate(templateName); StringWriter sw = new StringWriter(); processTemplate(template, map, sw); return sw; } - public StringWriter processTemplate(ResponseValues values) { + protected StringWriter processTemplate(ResponseValues values) { if (values == null) { return null; } return processTemplate(values.getTemplateName(), values.getMap()); } - public void processTemplate(Template template, Map map, Writer writer) { + private void processTemplate(Template template, Map map, Writer writer) { try { Environment env = template.createProcessingEnvironment(map, writer); @@ -64,15 +66,15 @@ public class TemplateProcessingHelper { } // In fact, we can put StringWriter objects directly into the data model, so perhaps we should eliminate the processTemplateToString() methods. - public String processTemplateToString(String templateName, Map map) { + protected String processTemplateToString(String templateName, Map map) { return processTemplate(templateName, map).toString(); } - public String processTemplateToString(ResponseValues values) { + protected String processTemplateToString(ResponseValues values) { return processTemplate(values).toString(); } - public Template getTemplate(String templateName) { + private Template getTemplate(String templateName) { Template template = null; try { template = config.getTemplate(templateName); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/BaseTemplateDirectiveModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/BaseTemplateDirectiveModel.java index 4c472f69a..263b8dd75 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/BaseTemplateDirectiveModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/BaseTemplateDirectiveModel.java @@ -2,6 +2,8 @@ package edu.cornell.mannlib.vitro.webapp.web.directives; +import java.io.IOException; +import java.io.StringWriter; import java.util.HashMap; import java.util.Map; @@ -14,7 +16,9 @@ import org.apache.commons.logging.LogFactory; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.TemplateProcessingHelper; import freemarker.core.Environment; import freemarker.template.Configuration; +import freemarker.template.Template; import freemarker.template.TemplateDirectiveModel; +import freemarker.template.TemplateException; public abstract class BaseTemplateDirectiveModel implements TemplateDirectiveModel { @@ -38,18 +42,32 @@ public abstract class BaseTemplateDirectiveModel implements TemplateDirectiveMod return directiveName; } - protected String mergeToHelpTemplate(Map map, Environment environment) { - TemplateProcessingHelper helper = getFreemarkerHelper(environment); - return helper.processTemplateToString("help-directive.ftl", map); + protected String mergeToHelpTemplate(Map map, Environment env) { + return processTemplateToString("help-directive.ftl", map, env); } - public static TemplateProcessingHelper getFreemarkerHelper(Environment env) { - Configuration config = env.getConfiguration(); - // In a directive, custom attributes for request and context are available in the Environment. - // They are put there when the enclosing template is processed. - HttpServletRequest request = (HttpServletRequest) env.getCustomAttribute("request"); - ServletContext context = (ServletContext) env.getCustomAttribute("context"); - return new TemplateProcessingHelper(config, request, context); + public static String processTemplateToString(String templateName, Map map, Environment env) { + Template template = getTemplate(templateName, env); + StringWriter sw = new StringWriter(); + try { + template.process(map, sw); + } catch (TemplateException e) { + log.error("Template Exception creating processing environment", e); + } catch (IOException e) { + log.error("IOException creating processing environment", e); + } + return sw.toString(); } - + + private static Template getTemplate(String templateName, Environment env) { + Template template = null; + try { + template = env.getConfiguration().getTemplate(templateName); + } catch (IOException e) { + // RY Should probably throw this error instead. + log.error("Cannot get template " + templateName, e); + } + return template; + } + } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/dump/DumpHelper.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/dump/DumpHelper.java index 24525f83c..74e9e222d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/dump/DumpHelper.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/directives/dump/DumpHelper.java @@ -27,20 +27,19 @@ public class DumpHelper { private static final Log log = LogFactory.getLog(DumpHelper.class); - private Environment environment = null; + private Environment env = null; public DumpHelper(Environment env) { - environment = env; + this.env = env; } public String getVariableDump(String varName) { Map map = getVariableDumpData(varName); - TemplateProcessingHelper helper = BaseTemplateDirectiveModel.getFreemarkerHelper(environment); - return helper.processTemplateToString("dump-var.ftl", map); + return BaseTemplateDirectiveModel.processTemplateToString("dump-var.ftl", map, env); } public Map getVariableDumpData(String varName) { - TemplateHashModel dataModel = environment.getDataModel(); + TemplateHashModel dataModel = env.getDataModel(); TemplateModel tm = null; try { @@ -115,10 +114,8 @@ public class DumpHelper { } public void writeDump(String templateName, Map map, String modelName) { - - TemplateProcessingHelper helper = BaseTemplateDirectiveModel.getFreemarkerHelper(environment); - String output = helper.processTemplateToString(templateName, map); - Writer out = environment.getOut(); + String output = BaseTemplateDirectiveModel.processTemplateToString(templateName, map, env); + Writer out = env.getOut(); try { out.write(output); } catch (IOException e) { diff --git a/webapp/web/templates/freemarker/body/partials/dump/help-directive.ftl b/webapp/web/templates/freemarker/body/partials/dump/help-directive.ftl index 65fb7dd00..e54c1c081 100644 --- a/webapp/web/templates/freemarker/body/partials/dump/help-directive.ftl +++ b/webapp/web/templates/freemarker/body/partials/dump/help-directive.ftl @@ -12,15 +12,16 @@

Comments: ${comments}

-

Parameters:

+

Parameters: <#if params?? && params?keys?has_content> +

    <#list params?keys as param>
  • ${param}: ${params[param]}
<#else> -

none

+ none


diff --git a/webapp/web/templates/freemarker/body/test.ftl b/webapp/web/templates/freemarker/body/test.ftl index 42e773781..83f9eb889 100644 --- a/webapp/web/templates/freemarker/body/test.ftl +++ b/webapp/web/templates/freemarker/body/test.ftl @@ -7,3 +7,8 @@ <@widget name="test" /> ${stylesheets.add("/css/testfrombody.css")} +${scripts.add("/js/jstest.js")} + +${bodyClass} + +
    <@list.firstLastList>
  • apples
  • bananas