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}
#if>
- Parameters:
+ Parameters:
<#if params?? && params?keys?has_content>
+
<#list params?keys as param>
- ${param}: ${params[param]}
#list>
<#else>
- none
+ none
#if>
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
@list.firstLastList>