1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.web.base;
17
18 import static org.codelibs.core.stream.StreamUtil.stream;
19
20 import java.util.HashMap;
21 import java.util.Locale;
22 import java.util.Map;
23
24 import org.codelibs.core.lang.StringUtil;
25 import org.codelibs.fess.entity.FacetInfo;
26 import org.codelibs.fess.entity.GeoInfo;
27 import org.codelibs.fess.entity.HighlightInfo;
28 import org.codelibs.fess.entity.SearchRequestParams;
29 import org.codelibs.fess.mylasta.direction.FessConfig;
30 import org.codelibs.fess.util.ComponentUtil;
31 import org.lastaflute.web.util.LaRequestUtil;
32 import org.lastaflute.web.validation.theme.conversion.ValidateTypeFailure;
33
34 import jakarta.validation.constraints.Size;
35
36
37
38
39
40
41 public class SearchForm extends SearchRequestParams {
42
43
44
45
46 public Map<String, String[]> fields = new HashMap<>();
47
48
49
50
51 public Map<String, String[]> as = new HashMap<>();
52
53
54
55
56 @Size(max = 1000)
57 public String q;
58
59
60
61
62 @Size(max = 1000)
63 public String sort;
64
65
66
67
68 @ValidateTypeFailure
69 public Integer num;
70
71
72
73
74 public String[] lang;
75
76
77
78
79 public String[] ex_q;
80
81
82
83
84 @ValidateTypeFailure
85 public Integer start;
86
87
88
89
90 @ValidateTypeFailure
91 public Integer offset;
92
93
94
95
96 @ValidateTypeFailure
97 public Integer pn;
98
99
100
101
102 @Size(max = 1000)
103 public String sdh;
104
105
106
107
108 @Size(max = 100)
109 public String track_total_hits;
110
111
112
113
114 public SearchForm() {
115 super();
116 }
117
118
119
120 @Override
121 public int getStartPosition() {
122 if (start == null) {
123 start = ComponentUtil.getFessConfig().getPagingSearchPageStartAsInteger();
124 }
125 return start;
126 }
127
128 @Override
129 public int getOffset() {
130 if (offset == null) {
131 offset = 0;
132 }
133 return offset;
134 }
135
136 @Override
137 public int getPageSize() {
138 final FessConfig fessConfig = ComponentUtil.getFessConfig();
139 if (num == null) {
140 num = fessConfig.getPagingSearchPageSizeAsInteger();
141 } else {
142 try {
143 if (num.intValue() > fessConfig.getPagingSearchPageMaxSizeAsInteger().intValue() || num.intValue() <= 0) {
144 num = fessConfig.getPagingSearchPageMaxSizeAsInteger();
145 }
146 } catch (final NumberFormatException e) {
147 num = fessConfig.getPagingSearchPageSizeAsInteger();
148 }
149 }
150 return num;
151 }
152
153 @Override
154 public String getQuery() {
155 return q;
156 }
157
158 @Override
159 public String[] getExtraQueries() {
160 return stream(ex_q).get(stream -> stream.filter(StringUtil::isNotBlank).distinct().toArray(n -> new String[n]));
161 }
162
163 @Override
164 public Map<String, String[]> getFields() {
165 return fields;
166 }
167
168 @Override
169 public String[] getLanguages() {
170 return stream(lang).get(stream -> stream.filter(StringUtil::isNotBlank).distinct().toArray(n -> new String[n]));
171 }
172
173 @Override
174 public GeoInfo getGeoInfo() {
175 return LaRequestUtil.getOptionalRequest()
176 .map(this::createGeoInfo)
177 .orElseGet(() -> ComponentUtil.getQueryHelper().getDefaultGeoInfo());
178 }
179
180 @Override
181 public FacetInfo getFacetInfo() {
182 return ComponentUtil.getQueryHelper().getDefaultFacetInfo();
183 }
184
185 @Override
186 public HighlightInfo getHighlightInfo() {
187 return ComponentUtil.getViewHelper().createHighlightInfo();
188 }
189
190 @Override
191 public String getSort() {
192 return sort;
193 }
194
195 @Override
196 public Object getAttribute(final String name) {
197 return LaRequestUtil.getOptionalRequest().map(req -> req.getAttribute(name)).orElse(null);
198 }
199
200 @Override
201 public Locale getLocale() {
202 return ComponentUtil.getRequestManager().getUserLocale();
203 }
204
205 @Override
206 public SearchRequestType getType() {
207 return SearchRequestType.SEARCH;
208 }
209
210 @Override
211 public String getSimilarDocHash() {
212 return sdh;
213 }
214
215 @Override
216 public Map<String, String[]> getConditions() {
217 return as;
218 }
219
220 @Override
221 public String getTrackTotalHits() {
222 return track_total_hits;
223 }
224
225 }