diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/IndexController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/IndexController.java index 2fe635183..2979adf2b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/IndexController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/IndexController.java @@ -2,22 +2,23 @@ package edu.cornell.mannlib.vitro.webapp.search.controller; -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import edu.cornell.mannlib.vedit.beans.LoginFormBean; -import edu.cornell.mannlib.vitro.webapp.auth.policy.JenaNetidPolicy.ContextSetup; -import edu.cornell.mannlib.vitro.webapp.controller.Controllers; -import edu.cornell.mannlib.vitro.webapp.search.IndexingException; -import edu.cornell.mannlib.vitro.webapp.search.indexing.IndexBuilder; +import java.io.IOException; +import java.util.Map; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import edu.cornell.mannlib.vedit.beans.LoginFormBean; +import edu.cornell.mannlib.vitro.webapp.controller.Controllers; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreeMarkerHttpServlet; +import edu.cornell.mannlib.vitro.webapp.search.IndexingException; +import edu.cornell.mannlib.vitro.webapp.search.indexing.IndexBuilder; +import freemarker.template.Configuration; /** * Accepts requests to rebuild or update the search index. It uses @@ -32,41 +33,82 @@ import edu.cornell.mannlib.vitro.webapp.search.indexing.IndexBuilder; * @author bdc34 * */ -public class IndexController extends HttpServlet { +public class IndexController extends FreeMarkerHttpServlet { private static final Log log = LogFactory.getLog(IndexController.class.getName()); - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException,IOException { - doGet(request, response); - } - - public void doGet( HttpServletRequest request, HttpServletResponse response ) - throws IOException, ServletException { - - Object obj = request.getSession().getAttribute("loginHandler"); - LoginFormBean loginHandler = null; - if( obj != null && obj instanceof LoginFormBean ) - loginHandler = ((LoginFormBean)obj); - if( loginHandler == null || - ! "authenticated".equalsIgnoreCase(loginHandler.getLoginStatus()) || - Integer.parseInt(loginHandler.getLoginRole()) <= 5 ){ - - String redirectURL=request.getContextPath() + Controllers.SITE_ADMIN + "?login=block"; - response.sendRedirect(redirectURL); - return; - } - - try { - IndexBuilder builder = (IndexBuilder)getServletContext().getAttribute(IndexBuilder.class.getName()); - if( request.getParameter("update") != null ){ - builder.doUpdateIndex(); - }else{ - builder.doIndexRebuild(); - } - - } catch (IndexingException e) { - log.error("IndexController -- Error building index: " + e); - } +// public void doPost(HttpServletRequest request, HttpServletResponse response) +// throws ServletException,IOException { +// doGet(request, response); +// } +// +// public void doGet( HttpServletRequest request, HttpServletResponse response ) +// throws IOException, ServletException { +// +// Object obj = request.getSession().getAttribute("loginHandler"); +// LoginFormBean loginHandler = null; +// if( obj != null && obj instanceof LoginFormBean ) +// loginHandler = ((LoginFormBean)obj); +// if( loginHandler == null || +// ! "authenticated".equalsIgnoreCase(loginHandler.getLoginStatus()) || +// Integer.parseInt(loginHandler.getLoginRole()) <= 5 ){ +// +// String redirectURL=request.getContextPath() + Controllers.SITE_ADMIN + "?login=block"; +// response.sendRedirect(redirectURL); +// return; +// } +// +// long start = System.currentTimeMillis(); +// try { +// IndexBuilder builder = (IndexBuilder)getServletContext().getAttribute(IndexBuilder.class.getName()); +// if( request.getParameter("update") != null ){ +// builder.doUpdateIndex(); +// }else{ +// builder.doIndexRebuild(); +// } +// +// } catch (IndexingException e) { +// log.error("IndexController -- Error building index: " + e); +// } +// long delta = System.currentTimeMillis() - start; +// String msg = "Search index complete. Elapsed time " + delta + " msec."; +// } + + + protected String getTitle(String siteName) { + return "Full Search Index Rebuild"; + } + + protected String getBody(VitroRequest request, Map body, Configuration config) { + + Object obj = request.getSession().getAttribute("loginHandler"); + LoginFormBean loginHandler = null; + if( obj != null && obj instanceof LoginFormBean ) + loginHandler = ((LoginFormBean)obj); + if( loginHandler == null || + ! "authenticated".equalsIgnoreCase(loginHandler.getLoginStatus()) || + Integer.parseInt(loginHandler.getLoginRole()) <= 5 ){ + + body.put("message","You must login to rebuild the search index."); + return mergeBodyToTemplate("message.ftl", body, config); + } + + long start = System.currentTimeMillis(); + try { + IndexBuilder builder = (IndexBuilder)getServletContext().getAttribute(IndexBuilder.class.getName()); + if( request.getParameter("update") != null ){ + builder.doUpdateIndex(); + }else{ + builder.doIndexRebuild(); + } + + } catch (IndexingException e) { + log.error("Error rebuilding search index",e); + body.put("errorMessage", "There was an error while rebuilding the search index. " + e.getMessage()); + return mergeBodyToTemplate("errorMessage.ftl", body, config); + } + + body.put("message","Search index complete. Elapsed time " + (System.currentTimeMillis() - start) + " msec."); + return mergeBodyToTemplate("message.ftl", body, config); } }