From a38a81b2e6bc7b0fa914b31f5c69445fad3722bd Mon Sep 17 00:00:00 2001 From: rjy7 Date: Thu, 3 Mar 2011 20:39:05 +0000 Subject: [PATCH] NIHVIVO-1521 AutocompleteController no longer extends FreemarkerHttpServlet. --- .../controller/ajax/VitroAjaxController.java | 42 +++++++++++++++++++ .../controller/AutocompleteController.java | 42 +++++++++---------- 2 files changed, 63 insertions(+), 21 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/ajax/VitroAjaxController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/ajax/VitroAjaxController.java index 12b90dfdd..e7a2111d7 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/ajax/VitroAjaxController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/ajax/VitroAjaxController.java @@ -3,18 +3,34 @@ package edu.cornell.mannlib.vitro.webapp.controller.ajax; import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; +import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; 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.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerConfigurationLoader; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.TemplateProcessingHelper; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.TemplateProcessingHelper.TemplateProcessingException; +import edu.cornell.mannlib.vitro.webapp.search.controller.AutocompleteController; +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; /** * A base class for servlets that handle AJAX requests. */ public abstract class VitroAjaxController extends HttpServlet { + + private static final Log log = LogFactory.getLog(VitroAjaxController.class); + /** * Sub-classes must implement this method to verify that the user is * authorized to execute this request. @@ -50,5 +66,31 @@ public abstract class VitroAjaxController extends HttpServlet { throws ServletException, IOException { doGet(req, resp); } + + /** + * Returns the current Freemarker Configuration so the controller can process + * its data through a template. + */ + protected final Configuration getFreemarkerConfiguration(VitroRequest vreq) { + ServletContext context = getServletContext(); + FreemarkerConfigurationLoader loader = + FreemarkerConfigurationLoader.getFreemarkerConfigurationLoader(context); + return loader.getConfig(vreq); + } + + /** + * Process data through a Freemarker template and output the result. + */ + protected void writeTemplate(String templateName, Map map, + Configuration config, HttpServletRequest request, HttpServletResponse response) { + Template template = null; + try { + template = config.getTemplate(templateName); + PrintWriter out = response.getWriter(); + template.process(map, out); + } catch (Exception e) { + log.error(e, e); + } + } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java index 927ade094..ec7becfed 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java @@ -29,8 +29,9 @@ import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.WildcardQuery; +import edu.cornell.mannlib.vedit.beans.LoginStatusBean; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; -import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet; +import edu.cornell.mannlib.vitro.webapp.controller.ajax.VitroAjaxController; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.TemplateProcessingHelper.TemplateProcessingException; import edu.cornell.mannlib.vitro.webapp.flags.PortalFlag; import edu.cornell.mannlib.vitro.webapp.search.SearchException; @@ -44,7 +45,7 @@ import freemarker.template.Configuration; * through a Lucene search. */ -public class AutocompleteController extends FreemarkerHttpServlet{ +public class AutocompleteController extends VitroAjaxController { private static final long serialVersionUID = 1L; private static final Log log = LogFactory.getLog(AutocompleteController.class); @@ -56,18 +57,12 @@ public class AutocompleteController extends FreemarkerHttpServlet{ String NORESULT_MSG = ""; private int defaultMaxSearchSize= 1000; - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - doGet(request, response); - } - - public void doGet(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { + protected void doRequest(VitroRequest vreq, HttpServletResponse response) + throws IOException, ServletException { Map map = new HashMap(); - VitroRequest vreq = new VitroRequest(request); - Configuration config = getConfig(vreq); + Configuration config = getFreemarkerConfiguration(vreq); PortalFlag portalFlag = vreq.getPortalFlag(); try { @@ -76,7 +71,7 @@ public class AutocompleteController extends FreemarkerHttpServlet{ if( vreq.getWebappDaoFactory() == null || vreq.getWebappDaoFactory().getIndividualDao() == null ){ log.error("makeUsableBeans() could not get IndividualDao "); - doSearchError(map, config, request, response); + doSearchError(map, config, vreq, response); return; } @@ -88,7 +83,7 @@ public class AutocompleteController extends FreemarkerHttpServlet{ Query query = getQuery(vreq, portalFlag, analyzer, qtxt); if (query == null ) { log.debug("query for '" + qtxt +"' is null."); - doNoQuery(map, config, request, response); + doNoQuery(map, config, vreq, response); return; } log.debug("query for '" + qtxt +"' is " + query.toString()); @@ -106,20 +101,20 @@ public class AutocompleteController extends FreemarkerHttpServlet{ topDocs = searcherForRequest.search(query,null,maxHitSize); }catch (Exception ex){ log.error(ex); - doFailedSearch(map, config, request, response); + doFailedSearch(map, config, vreq, response); return; } } if( topDocs == null || topDocs.scoreDocs == null){ log.error("topDocs for a search was null"); - doFailedSearch(map, config, request, response); + doFailedSearch(map, config, vreq, response); return; } int hitsLength = topDocs.scoreDocs.length; if ( hitsLength < 1 ){ - doFailedSearch(map, config, request, response); + doFailedSearch(map, config, vreq, response); return; } log.debug("found "+hitsLength+" hits"); @@ -140,14 +135,14 @@ public class AutocompleteController extends FreemarkerHttpServlet{ Collections.sort(results); map.put("results", results); - writeTemplate(TEMPLATE_DEFAULT, map, config, request, response); + writeTemplate(TEMPLATE_DEFAULT, map, config, vreq, response); } catch (TemplateProcessingException e) { log.error(e, e); } catch (Throwable e) { log.error("AutocompleteController(): " + e); try { - doSearchError(map, config, request, response); + doSearchError(map, config, vreq, response); } catch (TemplateProcessingException e1) { log.error(e1.getMessage(), e1); } @@ -170,7 +165,7 @@ public class AutocompleteController extends FreemarkerHttpServlet{ return (Analyzer)obj; } - private Query getQuery(VitroRequest request, PortalFlag portalState, + private Query getQuery(VitroRequest vreq, PortalFlag portalState, Analyzer analyzer, String querystr) throws SearchException{ Query query = null; @@ -185,12 +180,12 @@ public class AutocompleteController extends FreemarkerHttpServlet{ return null; } - query = makeNameQuery(querystr, analyzer, request); + query = makeNameQuery(querystr, analyzer, vreq); // Filter by type { BooleanQuery boolQuery = new BooleanQuery(); - String typeParam = (String) request.getParameter("type"); + String typeParam = (String) vreq.getParameter("type"); boolQuery.add( new TermQuery( new Term(VitroLuceneTermNames.RDFTYPE, typeParam)), @@ -393,6 +388,11 @@ public class AutocompleteController extends FreemarkerHttpServlet{ return label.compareTo(sr.getLabel()); } } + + @Override + protected boolean testIsAuthorized(HttpServletRequest request) { + return LoginStatusBean.getBean(request).isLoggedIn(); + }