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;
|
package edu.cornell.mannlib.vitro.webapp.controller.ajax;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
import javax.servlet.http.HttpServlet;
|
import javax.servlet.http.HttpServlet;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
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.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.
|
* A base class for servlets that handle AJAX requests.
|
||||||
*/
|
*/
|
||||||
public abstract class VitroAjaxController extends HttpServlet {
|
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
|
* Sub-classes must implement this method to verify that the user is
|
||||||
* authorized to execute this request.
|
* authorized to execute this request.
|
||||||
|
@ -51,4 +67,30 @@ public abstract class VitroAjaxController extends HttpServlet {
|
||||||
doGet(req, resp);
|
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.TopDocs;
|
||||||
import org.apache.lucene.search.WildcardQuery;
|
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.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.controller.freemarker.TemplateProcessingHelper.TemplateProcessingException;
|
||||||
import edu.cornell.mannlib.vitro.webapp.flags.PortalFlag;
|
import edu.cornell.mannlib.vitro.webapp.flags.PortalFlag;
|
||||||
import edu.cornell.mannlib.vitro.webapp.search.SearchException;
|
import edu.cornell.mannlib.vitro.webapp.search.SearchException;
|
||||||
|
@ -44,7 +45,7 @@ import freemarker.template.Configuration;
|
||||||
* through a Lucene search.
|
* through a Lucene search.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class AutocompleteController extends FreemarkerHttpServlet{
|
public class AutocompleteController extends VitroAjaxController {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
private static final Log log = LogFactory.getLog(AutocompleteController.class);
|
private static final Log log = LogFactory.getLog(AutocompleteController.class);
|
||||||
|
@ -56,18 +57,12 @@ public class AutocompleteController extends FreemarkerHttpServlet{
|
||||||
String NORESULT_MSG = "";
|
String NORESULT_MSG = "";
|
||||||
private int defaultMaxSearchSize= 1000;
|
private int defaultMaxSearchSize= 1000;
|
||||||
|
|
||||||
public void doPost(HttpServletRequest request, HttpServletResponse response)
|
protected void doRequest(VitroRequest vreq, HttpServletResponse response)
|
||||||
throws ServletException, IOException {
|
|
||||||
doGet(request, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void doGet(HttpServletRequest request, HttpServletResponse response)
|
|
||||||
throws IOException, ServletException {
|
throws IOException, ServletException {
|
||||||
|
|
||||||
Map<String, Object> map = new HashMap<String, Object>();
|
Map<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
||||||
VitroRequest vreq = new VitroRequest(request);
|
Configuration config = getFreemarkerConfiguration(vreq);
|
||||||
Configuration config = getConfig(vreq);
|
|
||||||
PortalFlag portalFlag = vreq.getPortalFlag();
|
PortalFlag portalFlag = vreq.getPortalFlag();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -76,7 +71,7 @@ public class AutocompleteController extends FreemarkerHttpServlet{
|
||||||
if( vreq.getWebappDaoFactory() == null
|
if( vreq.getWebappDaoFactory() == null
|
||||||
|| vreq.getWebappDaoFactory().getIndividualDao() == null ){
|
|| vreq.getWebappDaoFactory().getIndividualDao() == null ){
|
||||||
log.error("makeUsableBeans() could not get IndividualDao ");
|
log.error("makeUsableBeans() could not get IndividualDao ");
|
||||||
doSearchError(map, config, request, response);
|
doSearchError(map, config, vreq, response);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,7 +83,7 @@ public class AutocompleteController extends FreemarkerHttpServlet{
|
||||||
Query query = getQuery(vreq, portalFlag, analyzer, qtxt);
|
Query query = getQuery(vreq, portalFlag, analyzer, qtxt);
|
||||||
if (query == null ) {
|
if (query == null ) {
|
||||||
log.debug("query for '" + qtxt +"' is null.");
|
log.debug("query for '" + qtxt +"' is null.");
|
||||||
doNoQuery(map, config, request, response);
|
doNoQuery(map, config, vreq, response);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
log.debug("query for '" + qtxt +"' is " + query.toString());
|
log.debug("query for '" + qtxt +"' is " + query.toString());
|
||||||
|
@ -106,20 +101,20 @@ public class AutocompleteController extends FreemarkerHttpServlet{
|
||||||
topDocs = searcherForRequest.search(query,null,maxHitSize);
|
topDocs = searcherForRequest.search(query,null,maxHitSize);
|
||||||
}catch (Exception ex){
|
}catch (Exception ex){
|
||||||
log.error(ex);
|
log.error(ex);
|
||||||
doFailedSearch(map, config, request, response);
|
doFailedSearch(map, config, vreq, response);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( topDocs == null || topDocs.scoreDocs == null){
|
if( topDocs == null || topDocs.scoreDocs == null){
|
||||||
log.error("topDocs for a search was null");
|
log.error("topDocs for a search was null");
|
||||||
doFailedSearch(map, config, request, response);
|
doFailedSearch(map, config, vreq, response);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hitsLength = topDocs.scoreDocs.length;
|
int hitsLength = topDocs.scoreDocs.length;
|
||||||
if ( hitsLength < 1 ){
|
if ( hitsLength < 1 ){
|
||||||
doFailedSearch(map, config, request, response);
|
doFailedSearch(map, config, vreq, response);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
log.debug("found "+hitsLength+" hits");
|
log.debug("found "+hitsLength+" hits");
|
||||||
|
@ -140,14 +135,14 @@ public class AutocompleteController extends FreemarkerHttpServlet{
|
||||||
|
|
||||||
Collections.sort(results);
|
Collections.sort(results);
|
||||||
map.put("results", results);
|
map.put("results", results);
|
||||||
writeTemplate(TEMPLATE_DEFAULT, map, config, request, response);
|
writeTemplate(TEMPLATE_DEFAULT, map, config, vreq, response);
|
||||||
|
|
||||||
} catch (TemplateProcessingException e) {
|
} catch (TemplateProcessingException e) {
|
||||||
log.error(e, e);
|
log.error(e, e);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
log.error("AutocompleteController(): " + e);
|
log.error("AutocompleteController(): " + e);
|
||||||
try {
|
try {
|
||||||
doSearchError(map, config, request, response);
|
doSearchError(map, config, vreq, response);
|
||||||
} catch (TemplateProcessingException e1) {
|
} catch (TemplateProcessingException e1) {
|
||||||
log.error(e1.getMessage(), e1);
|
log.error(e1.getMessage(), e1);
|
||||||
}
|
}
|
||||||
|
@ -170,7 +165,7 @@ public class AutocompleteController extends FreemarkerHttpServlet{
|
||||||
return (Analyzer)obj;
|
return (Analyzer)obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Query getQuery(VitroRequest request, PortalFlag portalState,
|
private Query getQuery(VitroRequest vreq, PortalFlag portalState,
|
||||||
Analyzer analyzer, String querystr) throws SearchException{
|
Analyzer analyzer, String querystr) throws SearchException{
|
||||||
|
|
||||||
Query query = null;
|
Query query = null;
|
||||||
|
@ -185,12 +180,12 @@ public class AutocompleteController extends FreemarkerHttpServlet{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
query = makeNameQuery(querystr, analyzer, request);
|
query = makeNameQuery(querystr, analyzer, vreq);
|
||||||
|
|
||||||
// Filter by type
|
// Filter by type
|
||||||
{
|
{
|
||||||
BooleanQuery boolQuery = new BooleanQuery();
|
BooleanQuery boolQuery = new BooleanQuery();
|
||||||
String typeParam = (String) request.getParameter("type");
|
String typeParam = (String) vreq.getParameter("type");
|
||||||
boolQuery.add( new TermQuery(
|
boolQuery.add( new TermQuery(
|
||||||
new Term(VitroLuceneTermNames.RDFTYPE,
|
new Term(VitroLuceneTermNames.RDFTYPE,
|
||||||
typeParam)),
|
typeParam)),
|
||||||
|
@ -394,6 +389,11 @@ public class AutocompleteController extends FreemarkerHttpServlet{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean testIsAuthorized(HttpServletRequest request) {
|
||||||
|
return LoginStatusBean.getBean(request).isLoggedIn();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue