NIHVIVO-1521 AutocompleteController no longer extends FreemarkerHttpServlet.
This commit is contained in:
parent
171548efef
commit
a38a81b2e6
2 changed files with 63 additions and 21 deletions
|
@ -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<String, Object> 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<String, Object> map = new HashMap<String, Object>();
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue