[VIVO-1379] Add CTSA search endpoints to VIVO
This commit is contained in:
parent
e3c804088c
commit
d508f09ed9
3 changed files with 147 additions and 0 deletions
|
@ -0,0 +1,133 @@
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.search.controller;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.ApplicationBean;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.ApplicationDao;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.annotation.WebServlet;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletRequestWrapper;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
@WebServlet(name = "FedSearchController", urlPatterns = {"/FS.xml","/ctsasearch"} ) // fedsearch
|
||||||
|
public class FedSearchController extends PagedSearchController {
|
||||||
|
private static final Log log = LogFactory.getLog(FedSearchController.class);
|
||||||
|
|
||||||
|
private String classgroup;
|
||||||
|
private String populationType;
|
||||||
|
|
||||||
|
private String getClassgroup(HttpServletRequest req) {
|
||||||
|
if (classgroup == null) {
|
||||||
|
ConfigurationProperties configuration = ConfigurationProperties.getBean(req.getSession().getServletContext());
|
||||||
|
classgroup = configuration.getProperty("ctsa.classgroup", "http://vivoweb.org/ontology#vitroClassGrouppeople");
|
||||||
|
}
|
||||||
|
|
||||||
|
return classgroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getPopulationType(HttpServletRequest req) {
|
||||||
|
if (populationType == null) {
|
||||||
|
ConfigurationProperties configuration = ConfigurationProperties.getBean(req.getSession().getServletContext());
|
||||||
|
populationType = configuration.getProperty("ctsa.classgroup.type", "faculty,staff,students");
|
||||||
|
}
|
||||||
|
|
||||||
|
return populationType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
|
||||||
|
StringBuffer url = request.getRequestURL();
|
||||||
|
String uri = request.getRequestURI();
|
||||||
|
String serverBase = url.substring(0, url.indexOf(uri));
|
||||||
|
|
||||||
|
if (request.getRequestURI().contains("FS.xml")) {
|
||||||
|
try {
|
||||||
|
VitroRequest vreq = new VitroRequest(request);
|
||||||
|
Map<String, Object> body = new HashMap<String, Object>();
|
||||||
|
response.setCharacterEncoding("UTF-8");
|
||||||
|
response.setContentType("text/xml;charset=UTF-8");
|
||||||
|
response.setHeader("Content-Disposition", "attachment; filename=search.xml");
|
||||||
|
|
||||||
|
ApplicationDao aDao = vreq.getUnfilteredWebappDaoFactory().getApplicationDao();
|
||||||
|
ApplicationBean applicationForEditing = aDao.getApplicationBean();
|
||||||
|
|
||||||
|
body.put("ApplicationName", applicationForEditing.getApplicationName());
|
||||||
|
body.put("serverBase", serverBase);
|
||||||
|
|
||||||
|
writeTemplate("search-fs.ftl", body, request, response);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e, e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
Map<String, String[]> additionalParams = new TreeMap<>();
|
||||||
|
|
||||||
|
String classgroup = getClassgroup(request);
|
||||||
|
|
||||||
|
additionalParams.put("classgroup", new String[] { classgroup });
|
||||||
|
|
||||||
|
VitroRequest vreq = new VitroRequest(new RequestWrapper(request, additionalParams));
|
||||||
|
ResponseValues rvalues = processRequest(vreq);
|
||||||
|
|
||||||
|
response.setCharacterEncoding("UTF-8");
|
||||||
|
response.setContentType("text/xml;charset=UTF-8");
|
||||||
|
response.setHeader("Content-Disposition", "attachment; filename=search.xml");
|
||||||
|
Map<String, Object> body = new HashMap<String, Object>();
|
||||||
|
body.putAll(rvalues.getMap());
|
||||||
|
body.put("serverBase", serverBase);
|
||||||
|
body.put("classgroup", classgroup);
|
||||||
|
body.put("populationType", getPopulationType(request));
|
||||||
|
writeTemplate("search-fsresult.ftl", body, request, response);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class RequestWrapper extends HttpServletRequestWrapper {
|
||||||
|
private Map<String, String[]> allParameters = null;
|
||||||
|
|
||||||
|
public RequestWrapper(HttpServletRequest request, final Map<String, String[]> additionalParams) {
|
||||||
|
super(request);
|
||||||
|
allParameters = new TreeMap<String, String[]>();
|
||||||
|
allParameters.putAll(super.getParameterMap());
|
||||||
|
allParameters.putAll(additionalParams);
|
||||||
|
allParameters = Collections.unmodifiableMap(allParameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, String[]> getParameterMap() {
|
||||||
|
return allParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getParameter(final String name) {
|
||||||
|
String[] strings = getParameterMap().get(name);
|
||||||
|
if (strings != null) {
|
||||||
|
return strings[0];
|
||||||
|
}
|
||||||
|
return super.getParameter(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Enumeration<String> getParameterNames() {
|
||||||
|
return Collections.enumeration(getParameterMap().keySet());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getParameterValues(final String name) {
|
||||||
|
return getParameterMap().get(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
<#-- $This file is distributed under the terms of the license in LICENSE$ -->
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<site-description>
|
||||||
|
<name>${ApplicationName}</name>
|
||||||
|
<aggregate-query>${serverBase}${urls.base}/ctsasearch?querytext=</aggregate-query>
|
||||||
|
</site-description>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<#-- $This file is distributed under the terms of the license in LICENSE$ -->
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<aggregation-result>
|
||||||
|
<count>${hitCount}</count>
|
||||||
|
<population-type>${populationType}</population-type>
|
||||||
|
<preview-URL>${serverBase}${urls.base}/search?classgroup=${classgroup?url}&querytext=${querytext?url}</preview-URL>
|
||||||
|
<search-results-URL>${serverBase}${urls.base}/search?classgroup=${classgroup?url}&querytext=${querytext?url}</search-results-URL>
|
||||||
|
</aggregation-result>
|
Loading…
Add table
Reference in a new issue