View Javadoc
1   /*
2    * Copyright 2012-2017 CodeLibs Project and the Others.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
15   */
16  package org.codelibs.fess.entity;
17  
18  import static org.codelibs.core.stream.StreamUtil.stream;
19  
20  import java.util.Locale;
21  import java.util.Map;
22  
23  import javax.servlet.http.HttpServletRequest;
24  
25  import org.codelibs.core.lang.StringUtil;
26  
27  public interface SearchRequestParams {
28  
29      String getQuery();
30  
31      Map<String, String[]> getFields();
32  
33      String[] getLanguages();
34  
35      GeoInfo getGeoInfo();
36  
37      FacetInfo getFacetInfo();
38  
39      String getSort();
40  
41      int getStartPosition();
42  
43      int getPageSize();
44  
45      String[] getExtraQueries();
46  
47      Object getAttribute(String name);
48  
49      Locale getLocale();
50  
51      SearchRequestType getType();
52  
53      String getSimilarDocHash();
54  
55      public default String[] simplifyArray(final String[] values) {
56          return stream(values).get(stream -> stream.filter(StringUtil::isNotBlank).distinct().toArray(n -> new String[n]));
57      }
58  
59      public default String[] getParamValueArray(final HttpServletRequest request, final String param) {
60          return simplifyArray(request.getParameterValues(param));
61      }
62  
63      public default FacetInfo createFacetInfo(final HttpServletRequest request) {
64          final String[] fields = getParamValueArray(request, "facet.field");
65          final String[] queries = getParamValueArray(request, "facet.query");
66          if (fields.length == 0 && queries.length == 0) {
67              return null;
68          }
69          final FacetInfo facetInfo = new FacetInfo();
70          facetInfo.field = fields;
71          facetInfo.query = queries;
72          final String sizeStr = request.getParameter("facet.size");
73          if (StringUtil.isNotBlank(sizeStr)) {
74              facetInfo.size = Integer.parseInt(sizeStr);
75          }
76          final String minDocCountStr = request.getParameter("facet.minDocCount");
77          if (StringUtil.isNotBlank(minDocCountStr)) {
78              facetInfo.minDocCount = Long.parseLong(minDocCountStr);
79          }
80          final String sort = request.getParameter("facet.sort");
81          if (StringUtil.isNotBlank(sort)) {
82              facetInfo.sort = sort;
83          }
84          final String missing = request.getParameter("facet.missing");
85          if (StringUtil.isNotBlank(missing)) {
86              facetInfo.missing = missing;
87          }
88          return facetInfo;
89      }
90  
91      public default GeoInfo createGeoInfo(final HttpServletRequest request) {
92          return new GeoInfo(request);
93      }
94  
95      public enum SearchRequestType {
96          SEARCH, ADMIN_SEARCH, JSON, GSA, SUGGEST;
97      }
98  }