001
014
015 package com.liferay.portal.kernel.dao.search;
016
017 import com.liferay.portal.kernel.util.GetterUtil;
018 import com.liferay.portal.kernel.util.OrderByComparator;
019 import com.liferay.portal.kernel.util.ParamUtil;
020 import com.liferay.portal.kernel.util.PropsKeys;
021 import com.liferay.portal.kernel.util.PropsUtil;
022 import com.liferay.portal.kernel.util.StringPool;
023 import com.liferay.portal.kernel.util.StringUtil;
024
025 import java.util.ArrayList;
026 import java.util.List;
027 import java.util.Map;
028
029 import javax.portlet.PortletRequest;
030 import javax.portlet.PortletURL;
031
032
035 public class SearchContainer<R> {
036
037 public static final int DEFAULT_CUR = 1;
038
039 public static final String DEFAULT_CUR_PARAM = "cur";
040
041
044 public static final int DEFAULT_CUR_VALUE = DEFAULT_CUR;
045
046 public static final int DEFAULT_DELTA = GetterUtil.getInteger(
047 PropsUtil.get(PropsKeys.SEARCH_CONTAINER_PAGE_DEFAULT_DELTA));
048
049 public static final boolean DEFAULT_DELTA_CONFIGURABLE = true;
050
051 public static final String DEFAULT_DELTA_PARAM = "delta";
052
053
056 public static final int DEFAULT_MAX_PAGES = 25;
057
058 public static final String DEFAULT_ORDER_BY_COL_PARAM = "orderByCol";
059
060 public static final String DEFAULT_ORDER_BY_TYPE_PARAM = "orderByType";
061
062 public static final int MAX_DELTA = 200;
063
064 public SearchContainer() {
065 }
066
067 public SearchContainer(
068 PortletRequest portletRequest, PortletURL iteratorURL,
069 List<String> headerNames, String emptyResultsMessage) {
070
071 this(
072 portletRequest, null, null, DEFAULT_CUR_PARAM, DEFAULT_DELTA,
073 iteratorURL, headerNames, emptyResultsMessage);
074 }
075
076 public SearchContainer(
077 PortletRequest portletRequest, DisplayTerms displayTerms,
078 DisplayTerms searchTerms, String curParam, int delta,
079 PortletURL iteratorURL, List<String> headerNames,
080 String emptyResultsMessage) {
081
082 this (
083 portletRequest, displayTerms, searchTerms, curParam, 0, delta,
084 iteratorURL, headerNames, emptyResultsMessage);
085 }
086
087 public SearchContainer(
088 PortletRequest portletRequest, DisplayTerms displayTerms,
089 DisplayTerms searchTerms, String curParam, int cur, int delta,
090 PortletURL iteratorURL, List<String> headerNames,
091 String emptyResultsMessage) {
092
093 _portletRequest = portletRequest;
094 _displayTerms = displayTerms;
095 _searchTerms = searchTerms;
096
097 _curParam = curParam;
098
099 if (cur < 1) {
100 _cur = ParamUtil.getInteger(portletRequest, _curParam, DEFAULT_CUR);
101
102 if (_cur < 1) {
103 _cur = DEFAULT_CUR;
104 }
105 }
106 else {
107 _cur = cur;
108 }
109
110 if (!_curParam.equals(DEFAULT_CUR_PARAM)) {
111 _deltaParam =
112 DEFAULT_DELTA_PARAM +
113 StringUtil.replace(
114 _curParam, DEFAULT_CUR_PARAM, StringPool.BLANK);
115 }
116
117 setDelta(ParamUtil.getInteger(portletRequest, _deltaParam, delta));
118
119 _iteratorURL = iteratorURL;
120
121 _iteratorURL.setParameter(_curParam, String.valueOf(_cur));
122 _iteratorURL.setParameter(_deltaParam, String.valueOf(_delta));
123 _iteratorURL.setParameter(
124 DisplayTerms.KEYWORDS,
125 ParamUtil.getString(portletRequest, DisplayTerms.KEYWORDS));
126 _iteratorURL.setParameter(
127 DisplayTerms.ADVANCED_SEARCH,
128 String.valueOf(
129 ParamUtil.getBoolean(
130 portletRequest, DisplayTerms.ADVANCED_SEARCH)));
131 _iteratorURL.setParameter(
132 DisplayTerms.AND_OPERATOR,
133 String.valueOf(
134 ParamUtil.getBoolean(
135 portletRequest, DisplayTerms.AND_OPERATOR, true)));
136
137 if (headerNames != null) {
138 _headerNames = new ArrayList<String>(headerNames.size());
139
140 _headerNames.addAll(headerNames);
141 }
142
143 _emptyResultsMessage = emptyResultsMessage;
144 }
145
146 public int getCur() {
147 return _cur;
148 }
149
150 public String getCurParam() {
151 return _curParam;
152 }
153
154
157 public int getCurValue() {
158 return getCur();
159 }
160
161 public int getDelta() {
162 return _delta;
163 }
164
165 public String getDeltaParam() {
166 return _deltaParam;
167 }
168
169 public DisplayTerms getDisplayTerms() {
170 return _displayTerms;
171 }
172
173 public String getEmptyResultsMessage() {
174 return _emptyResultsMessage;
175 }
176
177 public int getEnd() {
178 return _end;
179 }
180
181 public List<String> getHeaderNames() {
182 return _headerNames;
183 }
184
185 public String getId() {
186 return _id;
187 }
188
189 public PortletURL getIteratorURL() {
190 return _iteratorURL;
191 }
192
193
196 public int getMaxPages() {
197 return _maxPages;
198 }
199
200 public Map<String, String> getOrderableHeaders() {
201 return _orderableHeaders;
202 }
203
204 public String getOrderByCol() {
205 return _orderByCol;
206 }
207
208 public String getOrderByColParam() {
209 return _orderByColParam;
210 }
211
212 public OrderByComparator getOrderByComparator() {
213 return _orderByComparator;
214 }
215
216 public String getOrderByJS() {
217 return _orderByJS;
218 }
219
220 public String getOrderByType() {
221 return _orderByType;
222 }
223
224 public String getOrderByTypeParam() {
225 return _orderByTypeParam;
226 }
227
228 public PortletRequest getPortletRequest() {
229 return _portletRequest;
230 }
231
232 public int getResultEnd() {
233 return _resultEnd;
234 }
235
236 public List<ResultRow> getResultRows() {
237 return _resultRows;
238 }
239
240 public List<R> getResults() {
241 return _results;
242 }
243
244 public RowChecker getRowChecker() {
245 return _rowChecker;
246 }
247
248 public DisplayTerms getSearchTerms() {
249 return _searchTerms;
250 }
251
252 public int getStart() {
253 return _start;
254 }
255
256 public int getTotal() {
257 return _total;
258 }
259
260 public boolean isDeltaConfigurable() {
261 return _deltaConfigurable;
262 }
263
264 public boolean isHover() {
265 return _hover;
266 }
267
268 public void setDelta(int delta) {
269 if (delta <= 0) {
270 _delta = DEFAULT_DELTA;
271 }
272 else if (delta > MAX_DELTA) {
273 _delta = MAX_DELTA;
274 }
275 else {
276 _delta = delta;
277 }
278
279 _calculateStartAndEnd();
280 }
281
282 public void setDeltaConfigurable(boolean deltaConfigurable) {
283 _deltaConfigurable = deltaConfigurable;
284 }
285
286 public void setDeltaParam(String deltaParam) {
287 _deltaParam = deltaParam;
288 }
289
290 public void setEmptyResultsMessage(String emptyResultsMessage) {
291 _emptyResultsMessage = emptyResultsMessage;
292 }
293
294 public void setHeaderNames(List<String> headerNames) {
295 _headerNames = headerNames;
296 }
297
298 public void setHover(boolean hover) {
299 _hover = hover;
300 }
301
302 public void setId(String id) {
303 _id = id;
304 }
305
306 public void setIteratorURL(PortletURL iteratorURL) {
307 _iteratorURL = iteratorURL;
308 }
309
310
313 public void setMaxPages(int maxPages) {
314 _maxPages = maxPages;
315 }
316
317 public void setOrderableHeaders(Map<String, String> orderableHeaders) {
318 _orderableHeaders = orderableHeaders;
319 }
320
321 public void setOrderByCol(String orderByCol) {
322 _orderByCol = orderByCol;
323
324 _iteratorURL.setParameter(_orderByColParam, _orderByCol);
325 }
326
327 public void setOrderByColParam(String orderByColParam) {
328 _orderByColParam = orderByColParam;
329 }
330
331 public void setOrderByComparator(OrderByComparator orderByComparator) {
332 _orderByComparator = orderByComparator;
333 }
334
335 public void setOrderByJS(String orderByJS) {
336 _orderByJS = orderByJS;
337 }
338
339 public void setOrderByType(String orderByType) {
340 _orderByType = orderByType;
341
342 _iteratorURL.setParameter(_orderByTypeParam, _orderByType);
343 }
344
345 public void setOrderByTypeParam(String orderByTypeParam) {
346 _orderByTypeParam = orderByTypeParam;
347 }
348
349 public void setResults(List<R> results) {
350 _results = results;
351 }
352
353 public void setRowChecker(RowChecker rowChecker) {
354 _rowChecker = rowChecker;
355 }
356
357 public void setTotal(int total) {
358 _total = total;
359
360 if (((_cur - 1) * _delta) >= _total) {
361 _cur = DEFAULT_CUR;
362 }
363
364 _calculateStartAndEnd();
365 }
366
367 private void _calculateStartAndEnd() {
368 _start = (_cur - 1) * _delta;
369 _end = _start + _delta;
370
371 _resultEnd = _end;
372
373 if (_resultEnd > _total) {
374 _resultEnd = _total;
375 }
376 }
377
378 private int _cur;
379 private String _curParam = DEFAULT_CUR_PARAM;
380 private int _delta = DEFAULT_DELTA;
381 private boolean _deltaConfigurable = DEFAULT_DELTA_CONFIGURABLE;
382 private String _deltaParam = DEFAULT_DELTA_PARAM;
383 private DisplayTerms _displayTerms;
384 private String _emptyResultsMessage;
385 private int _end;
386 private List<String> _headerNames;
387 private boolean _hover = true;
388 private String _id;
389 private PortletURL _iteratorURL;
390
391
394 private int _maxPages = DEFAULT_MAX_PAGES;
395
396 private Map<String, String> _orderableHeaders;
397 private String _orderByCol;
398 private String _orderByColParam = DEFAULT_ORDER_BY_COL_PARAM;
399 private OrderByComparator _orderByComparator;
400 private String _orderByJS;
401 private String _orderByType;
402 private String _orderByTypeParam = DEFAULT_ORDER_BY_TYPE_PARAM;
403 private PortletRequest _portletRequest;
404 private int _resultEnd;
405 private List<ResultRow> _resultRows = new ArrayList<ResultRow>();
406 private List<R> _results = new ArrayList<R>();
407 private RowChecker _rowChecker;
408 private DisplayTerms _searchTerms;
409 private int _start;
410 private int _total;
411
412 }