From da5d7191fd06f72dcee1ced4612ea9da60604eb2 Mon Sep 17 00:00:00 2001
From: Shinsuke Sugaya <shinsuke@apache.org>
Date: Thu, 28 Mar 2019 18:00:30 +0900
Subject: [PATCH] fix #2068 add requiredfields

---
 .../org/codelibs/fess/api/gsa/GsaApiManager.java | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/codelibs/fess/api/gsa/GsaApiManager.java b/src/main/java/org/codelibs/fess/api/gsa/GsaApiManager.java
index ddcb04bb4..210098522 100644
--- a/src/main/java/org/codelibs/fess/api/gsa/GsaApiManager.java
+++ b/src/main/java/org/codelibs/fess/api/gsa/GsaApiManager.java
@@ -66,6 +66,7 @@ public class GsaApiManager extends BaseApiManager implements WebApiManager {
     private static final String OUTPUT_XML = "xml"; // or xml_no_dtd
     // http://www.google.com/google.dtd.
 
+    @Deprecated
     private static final String GSA_META_SUFFIX = "_s";
 
     protected String gsaPathPrefix = "/gsa";
@@ -112,8 +113,7 @@ public class GsaApiManager extends BaseApiManager implements WebApiManager {
         appendParam(buf, name, value, URLEncoder.encode(value, Constants.UTF_8));
     }
 
-    protected void appendParam(final StringBuilder buf, final String name, final String value, final String original)
-            throws UnsupportedEncodingException {
+    protected void appendParam(final StringBuilder buf, final String name, final String value, final String original) {
         buf.append("<PARAM name=\"");
         buf.append(escapeXml(name));
         buf.append("\" value=\"");
@@ -434,7 +434,7 @@ public class GsaApiManager extends BaseApiManager implements WebApiManager {
         }
     }
 
-    protected static class GsaRequestParams extends SearchRequestParams {
+    protected class GsaRequestParams extends SearchRequestParams {
 
         private final HttpServletRequest request;
 
@@ -462,7 +462,15 @@ public class GsaApiManager extends BaseApiManager implements WebApiManager {
 
         @Override
         public String[] getExtraQueries() {
-            return getParamValueArray(request, "ex_q");
+            final List<String> queryList = new ArrayList<>();
+            for (final String s : getParamValueArray(request, "ex_q")) {
+                queryList.add(s.trim());
+            }
+            final String requiredFields = request.getParameter("requiredfields");
+            if (StringUtil.isNotBlank(requiredFields)) {
+                queryList.add(gsaMetaPrefix + requiredFields.replace(".", " AND " + gsaMetaPrefix).replace("|", " OR " + gsaMetaPrefix));
+            }
+            return queryList.toArray(new String[queryList.size()]);
         }
 
         @Override
-- 
GitLab