diff --git a/webapp/config/web.xml b/webapp/config/web.xml
index 380837662..11e989210 100644
--- a/webapp/config/web.xml
+++ b/webapp/config/web.xml
@@ -833,15 +833,6 @@
ObjectPropertyStatementListingController
/listObjectPropertyStatements
-
-
- EntityListController
- edu.cornell.mannlib.vitro.webapp.controller.EntityListController
-
-
- EntityListController
- /entitylist
-
IndividualListController
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 98b4f7ada..678728242 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
@@ -2,11 +2,11 @@
package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
+import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -33,8 +33,8 @@ public class FreemarkerComponentGenerator extends FreemarkerHttpServlet {
Configuration config = getConfig(vreq);
// root is the map used to create the page shell - header, footer, menus, etc.
- Map root = getSharedVariables(vreq);
- setUpRoot(vreq, root);
+ Map root = getSharedVariables(vreq, new HashMap());
+ root.putAll(getRootValues(vreq));
request.setAttribute("ftl_identity", get("identity", root, config));
request.setAttribute("ftl_menu", get("menu", root, config));
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 94c79da2e..0a7853918 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
@@ -82,16 +82,18 @@ public class FreemarkerHttpServlet extends VitroHttpServlet {
return getConfigForTheme(themeDir);
}
- @SuppressWarnings("unchecked")
protected Configuration getConfigForTheme(String themeDir) {
// The template loader is theme-specific because it specifies the theme template directory as a location to
// load templates from. Thus configurations are associated with themes rather than portals.
+ @SuppressWarnings("unchecked")
Map themeToConfigMap = (Map) (getServletContext().getAttribute("themeToConfigMap"));
if( themeToConfigMap == null ) {
log.error("The templating system is not configured correctly. Make sure that you have the FreemarkerSetup context listener in your web.xml.");
- return null; // RY should we throw an error here instead?
+ // We'll end up with a blank page as well as errors in the log, which is probably fine.
+ // Doesn't seem like we should throw a checked exception in this case.
+ return null;
} else if (themeToConfigMap.containsKey(themeDir)) {
return themeToConfigMap.get(themeDir);
} else {
@@ -226,26 +228,23 @@ public class FreemarkerHttpServlet extends VitroHttpServlet {
protected void doTemplate(VitroRequest vreq, HttpServletResponse response, ResponseValues values) {
Configuration config = getConfig(vreq);
+ Map bodyMap = values.getMap();
// 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);
+ Map sharedVariables = getSharedVariables(vreq, bodyMap);
// root is the map used to create the page shell - header, footer, menus, etc.
Map root = new HashMap(sharedVariables);
// body is the map used to create the page body
Map body = new HashMap(sharedVariables);
- setUpRoot(vreq, root);
+ root.putAll(getRootValues(vreq));
// Add the values that we got, and merge to the template.
- body.putAll(values.getMap());
- root.put("body", mergeMapToTemplate(values.getTemplateName(), body, config));
-
- // Subclass processing may have changed the title, so put the new value in the root map. (E.g., the title may
- // include an individual's name, which is only discovered when processing the body.)
- root.put("title", body.get("title"));
+ body.putAll(bodyMap);
+ root.put("body", mergeMapToTemplate(values.getTemplateName(), body, config));
writePage(root, config, response);
}
@@ -278,7 +277,7 @@ public class FreemarkerHttpServlet extends VitroHttpServlet {
// 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
// we'll get all the shared variables here, and put them in both root and body maps.
- protected Map getSharedVariables(VitroRequest vreq) {
+ protected Map getSharedVariables(VitroRequest vreq, Map bodyMap) {
Map map = new HashMap();
@@ -289,7 +288,16 @@ public class FreemarkerHttpServlet extends VitroHttpServlet {
String siteName = portal.getAppName();
map.put("siteName", siteName);
- map.put("title", getTitle(siteName));
+
+ // In some cases the title is determined during the subclass processRequest() method; e.g.,
+ // for an Individual profile page, the title should be the Individual's label. In that case,
+ // put that title in the sharedVariables map because it's needed by the page root map as well
+ // to generate the element. Otherwise, use the getTitle() method to generate the title.
+ String title = (String) bodyMap.get("title");
+ if (StringUtils.isEmpty(title)) {
+ title = getTitle(siteName);
+ }
+ map.put("title", title);
String themeDir = getThemeDir(portal);
UrlBuilder urlBuilder = new UrlBuilder(portal);
@@ -305,7 +313,7 @@ public class FreemarkerHttpServlet extends VitroHttpServlet {
map.put("scripts", getScriptList(themeDir));
map.put("headScripts", getScriptList(themeDir));
- addDirectives(map);
+ map.putAll(getDirectives());
return map;
}
@@ -369,18 +377,21 @@ public class FreemarkerHttpServlet extends VitroHttpServlet {
}
// Add any Java directives the templates should have access to
- private void addDirectives(Map map) {
+ private Map getDirectives() {
+ Map map = new HashMap();
map.put("describe", new edu.cornell.mannlib.vitro.webapp.web.directives.dump.DescribeDirective());
map.put("dump", new edu.cornell.mannlib.vitro.webapp.web.directives.dump.DumpDirective());
map.put("dumpAll", new edu.cornell.mannlib.vitro.webapp.web.directives.dump.DumpAllDirective());
map.put("help", new edu.cornell.mannlib.vitro.webapp.web.directives.dump.HelpDirective());
+ return map;
}
// Add variables that should be available only to the page's root map, not to the body.
// RY This is protected instead of private so FreeMarkerComponentGenerator can access.
// Once we don't need that (i.e., jsps have been eliminated) we can make it private.
- protected void setUpRoot(VitroRequest vreq, Map root) {
+ protected Map getRootValues(VitroRequest vreq) {
+ Map root = new HashMap();
root.put("tabMenu", getTabMenu(vreq));
Portal portal = vreq.getPortal();
@@ -389,7 +400,7 @@ public class FreemarkerHttpServlet extends VitroHttpServlet {
PortalWebUtil.populateSearchOptions(portal, appBean, vreq.getWebappDaoFactory().getPortalDao());
PortalWebUtil.populateNavigationChoices(portal, vreq, appBean, vreq.getWebappDaoFactory().getPortalDao());
- addLoginInfo(vreq, root);
+ root.putAll(getLoginValues(vreq));
root.put("copyright", getCopyrightInfo(portal));
@@ -406,6 +417,7 @@ public class FreemarkerHttpServlet extends VitroHttpServlet {
root.put("bannerImage", UrlBuilder.getUrl(themeDir + "site_icons/" + bannerImage));
}
+ return root;
}
private TabMenu getTabMenu(VitroRequest vreq) {
@@ -415,7 +427,7 @@ public class FreemarkerHttpServlet extends VitroHttpServlet {
return new TabMenu(vreq, portalId);
}
- private final void addLoginInfo(VitroRequest vreq, Map root) {
+ private final Map getLoginValues(VitroRequest vreq) {
String loginName = null;
int securityLevel;
@@ -425,18 +437,23 @@ public class FreemarkerHttpServlet extends VitroHttpServlet {
if (loginBean != null && loginBean.testSessionLevel(vreq) > -1) {
loginName = loginBean.getLoginName();
securityLevel = Integer.parseInt(loginBean.getLoginRole());
- }
+ }
+
+ Map map = new HashMap();
+
if (loginName != null) {
- root.put("loginName", loginName);
+ map.put("loginName", loginName);
securityLevel = Integer.parseInt(loginBean.getLoginRole());
if (securityLevel >= FILTER_SECURITY_LEVEL) {
ApplicationBean appBean = vreq.getAppBean();
if (appBean.isFlag1Active()) {
- root.put("showFlag1SearchField", true);
+ map.put("showFlag1SearchField", true);
}
}
- }
+ }
+
+ return map;
}
private final Map getCopyrightInfo(Portal portal) {
@@ -509,7 +526,7 @@ public class FreemarkerHttpServlet extends VitroHttpServlet {
new FreemarkerComponentGenerator(request);
}
- public static interface ResponseValues {
+ protected static interface ResponseValues {
// enum ResponseType {
// TEMPLATE, REDIRECT, FORWARD, EXCEPTION
// }
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/login/LoginTemplateHelper.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/login/LoginTemplateHelper.java
index 1f1836a95..1613e8c9d 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/login/LoginTemplateHelper.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/login/LoginTemplateHelper.java
@@ -163,10 +163,10 @@ public class LoginTemplateHelper extends LoginTemplateHelperBase {
private String doTemplate(VitroRequest vreq, TemplateResponseValues values) {
// Set it up like FreeMarkerHttpServlet.doGet() would do.
Configuration config = getConfig(vreq);
- Map sharedVariables = getSharedVariables(vreq);
+ Map sharedVariables = getSharedVariables(vreq, new HashMap());
Map root = new HashMap(sharedVariables);
Map body = new HashMap(sharedVariables);
- setUpRoot(vreq, root);
+ root.putAll(getRootValues(vreq));
// Add the values that we got, and merge to the template.
body.putAll(values.getMap());