From 1590d5883024fe4d643aca38b4d19509fab58033 Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Wed, 24 Feb 2021 01:17:53 +0100 Subject: [PATCH] Process query builder rules in custom search controller --- .../controller/CustomSearchController.java | 50 ++++++++++++++++++- .../body/search/search-pagedResults.ftl | 7 +++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/CustomSearchController.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/CustomSearchController.java index 2de8bb6ae..23af21f0d 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/CustomSearchController.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/search/controller/CustomSearchController.java @@ -5,6 +5,7 @@ package edu.cornell.mannlib.vitro.webapp.search.controller; import java.io.IOException; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Base64; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -126,6 +127,39 @@ public class CustomSearchController extends FreemarkerHttpServlet { } } } + + @Override + public void doPost(HttpServletRequest request, HttpServletResponse response) + throws IOException, ServletException { + VitroRequest vreq = new VitroRequest(request); + boolean wasXmlRequested = isRequestedFormatXml(vreq); + boolean wasCSVRequested = isRequestedFormatCSV(vreq); + if( !wasXmlRequested && !wasCSVRequested){ + super.doGet(vreq,response); + }else if (wasXmlRequested){ + try { + ResponseValues rvalues = processRequest(vreq); + + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/xml;charset=UTF-8"); + response.setHeader("Content-Disposition", "attachment; filename=search.xml"); + writeTemplate(rvalues.getTemplateName(), rvalues.getMap(), request, response); + } catch (Exception e) { + log.error(e, e); + } + }else if (wasCSVRequested){ + try { + ResponseValues rvalues = processRequest(vreq); + + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/csv;charset=UTF-8"); + response.setHeader("Content-Disposition", "attachment; filename=search.csv"); + writeTemplate(rvalues.getTemplateName(), rvalues.getMap(), request, response); + } catch (Exception e) { + log.error(e, e); + } + } + } @Override protected ResponseValues processRequest(VitroRequest vreq) { @@ -156,6 +190,8 @@ public class CustomSearchController extends FreemarkerHttpServlet { int startIndex = getStartIndex(vreq); int hitsPerPage = getHitsPerPage( vreq ); + String queryBuilderRules = getQueryBuilderRules(vreq); + String queryText = vreq.getParameter(PARAM_QUERY_TEXT); log.debug("Query text is \""+ queryText + "\""); @@ -281,7 +317,9 @@ public class CustomSearchController extends FreemarkerHttpServlet { body.put("nextPage", getNextPageLink(startIndex, hitsPerPage, vreq.getServletPath(), pagingLinkParams)); } - + if (queryBuilderRules != null) { + body.put("queryBuilderRules", queryBuilderRules); + } // VIVO OpenSocial Extension by UCSF try { OpenSocialManager openSocialManager = new OpenSocialManager(vreq, "search"); @@ -314,6 +352,16 @@ public class CustomSearchController extends FreemarkerHttpServlet { } } + private String getQueryBuilderRules(VitroRequest vreq) { + String rules = null; + try { + rules = vreq.getParameter("queryBuilderRules"); + } catch (Throwable e) { + log.error(e); + } + return rules; + } + private int getHitsPerPage(VitroRequest vreq) { int hitsPerPage = DEFAULT_HITS_PER_PAGE; try{ diff --git a/webapp/src/main/webapp/templates/freemarker/body/search/search-pagedResults.ftl b/webapp/src/main/webapp/templates/freemarker/body/search/search-pagedResults.ftl index d9c940758..981e4d626 100644 --- a/webapp/src/main/webapp/templates/freemarker/body/search/search-pagedResults.ftl +++ b/webapp/src/main/webapp/templates/freemarker/body/search/search-pagedResults.ftl @@ -152,8 +152,15 @@ $('input[type=checkbox]').removeAttr('checked'); fillOutForm(compilationName); }); } + function fillOutForm(compilationName){ var iframeDoc = document.getElementById('newCompilationIframe').contentWindow.document; + var rules = $('#builder').queryBuilder('getRules'); + var query = format_query_string(rules,""); + iframeDoc.getElementById('queryBuilderRules').value = JSON.stringify(rules); + iframeDoc.getElementById('rawQueryString').value = query; + + iframeDoc.getElementById('newCompilationLabel').value = compilationName; var excerpts = $('.virtualArticlePart').toArray(); for (i = 0;i < excerpts.length;i++){