1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 }