diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FreeMarkerComponentGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FreeMarkerComponentGenerator.java new file mode 100644 index 000000000..fa6b0f583 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FreeMarkerComponentGenerator.java @@ -0,0 +1,50 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.controller; + +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * TEMPORARY for transition from JSP to FreeMarker. Once transition + * is complete and no more pages are generated in JSP, this can be removed. + * + * @author rjy7 + * + */ +public class FreeMarkerComponentGenerator extends FreeMarkerHttpServlet { + + private static final long serialVersionUID = 1L; + private static final Log log = LogFactory.getLog(FreeMarkerHttpServlet.class.getName()); + + FreeMarkerComponentGenerator(HttpServletRequest request, HttpServletResponse response) { + doSetup(request, response); + } + + public String getIdentity() { + return get("identity"); + } + + public String getMenu() { + return get("menu"); + } + + public String getSearch() { + return get("search"); + } + + public String getFooter() { + return get("footer"); + } + + private String get(String templateName) { + String template = "components/" + templateName + ".ftl"; + return mergeToTemplate(template, root).toString(); + } + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FreeMarkerHttpServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FreeMarkerHttpServlet.java index f4fd9efff..7ec482dd4 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FreeMarkerHttpServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FreeMarkerHttpServlet.java @@ -47,6 +47,7 @@ public class FreeMarkerHttpServlet extends VitroHttpServlet { public static Configuration config = null; public static String contextPath = null; + public static ServletContext context = null; protected VitroRequest vreq; protected HttpServletResponse response; @@ -60,6 +61,7 @@ public class FreeMarkerHttpServlet extends VitroHttpServlet { throws IOException, ServletException { try { + callSuperGet(request, response); // RY Yuck...redo doSetup(request, response); setTitle(); setBody(); @@ -167,8 +169,7 @@ public class FreeMarkerHttpServlet extends VitroHttpServlet { } } - protected void doSetup(HttpServletRequest request, HttpServletResponse response) { - + protected void callSuperGet(HttpServletRequest request, HttpServletResponse response) { try { super.doGet(request,response); } catch (ServletException e) { @@ -177,7 +178,12 @@ public class FreeMarkerHttpServlet extends VitroHttpServlet { } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); - } + } + } + + // RY This needs to be broken out as is for FreeMarkerComponentGenerator, which should not + // include callSuperGet(). So it's only temporary. + protected void doSetup(HttpServletRequest request, HttpServletResponse response) { vreq = new VitroRequest(request); this.response = response; @@ -294,10 +300,8 @@ public class FreeMarkerHttpServlet extends VitroHttpServlet { // and we have multi-portal installations, and (b) we need to support theme-switching on the fly. // To make more efficient, we could do this once, and then have a listener that does it again // when theme is switched.BUT this doesn't support (a), only (b), so we have to do it on every request. - private final void setTemplateLoader() { + protected final void setTemplateLoader() { - // RY If this is needed in other methods, put in instance var - ServletContext context = getServletContext(); String themeTemplateDir = context.getRealPath(portal.getThemeDir()) + "/ftl"; String vitroTemplateDir = context.getRealPath("/templates/freemarker"); @@ -324,5 +328,18 @@ public class FreeMarkerHttpServlet extends VitroHttpServlet { private TabMenu getTabMenu(int portalId) { return new TabMenu(vreq, portalId); } - + + // TEMPORARY for transition from JSP to FreeMarker. Once transition + // is complete and no more pages are generated in JSP, this can be removed. + // Do this if FreeMarker is configured (i.e., not Datastar) and if we are not in + // a FreeMarkerHttpServlet, which will generate identity, menu, and footer from the page template. + // It's a static method because it needs to be called from JSPs that don't go through a servlet. + public static void getFreeMarkerComponentsForJsp(HttpServletRequest request, HttpServletResponse response) { + FreeMarkerComponentGenerator fcg = new FreeMarkerComponentGenerator(request, response); + request.setAttribute("ftl_identity", fcg.getIdentity()); + request.setAttribute("ftl_menu", fcg.getMenu()); + request.setAttribute("ftl_search", fcg.getSearch()); + request.setAttribute("ftl_footer", fcg.getFooter()); + } + } \ No newline at end of file diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroHttpServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroHttpServlet.java index bcccac4a5..acc375490 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroHttpServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroHttpServlet.java @@ -63,7 +63,16 @@ public class VitroHttpServlet extends HttpServlet request.getAttribute("webappDaoFactory") == null ){ log.warn("request scope was not prepared by VitroRequestPrep"); } + + // TEMPORARY for transition from JSP to FreeMarker. Once transition + // is complete and no more pages are generated in JSP, this can be removed. + // Do this if FreeMarker is configured (i.e., not Datastar) and if we are not in + // a FreeMarkerHttpServlet, which will generate identity, menu, and footer from the page template. + if ( FreeMarkerHttpServlet.config != null && !(this instanceof FreeMarkerHttpServlet) ) { + FreeMarkerHttpServlet.getFreeMarkerComponentsForJsp(request, response); + } } + /** * doPost does the same thing as the doGet method diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/FreeMarkerSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/FreeMarkerSetup.java index aa7b3566b..f3e771e7d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/FreeMarkerSetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/FreeMarkerSetup.java @@ -59,8 +59,11 @@ public class FreeMarkerSetup implements ServletContextListener { String contextPath = sc.getContextPath(); FreeMarkerHttpServlet.contextPath = contextPath; + FreeMarkerHttpServlet.context = sc; ViewObject.contextPath = contextPath; + // For JSP => FreeMarker transition. + } public void contextDestroyed(ServletContextEvent event) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/StringUtils.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/StringUtils.java index c37e37a02..9dfd13e69 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/StringUtils.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/StringUtils.java @@ -76,9 +76,8 @@ public class StringUtils { return quotedList(Arrays.asList(stringArray), glue); } - // Because we can't use Java 1.6 String.isEmpty() public static boolean isEmpty(String s) { - return s == null || s.length() <= 0; + return s == null || s.isEmpty(); } public static boolean equalsOneOf(String s, String... strings) { diff --git a/webapp/web/templates/freemarker/page/default.ftl b/webapp/web/templates/freemarker/page/default.ftl index 9439704d3..b829896be 100644 --- a/webapp/web/templates/freemarker/page/default.ftl +++ b/webapp/web/templates/freemarker/page/default.ftl @@ -10,6 +10,7 @@ <#include "/components/identity.ftl"> + <#-- Note to UI team: do not change this div without also making the change in menu.jsp -->