1
22
23 package com.liferay.portal.kernel.dao.search;
24
25 import com.liferay.portal.kernel.util.OrderByComparator;
26 import com.liferay.portal.kernel.util.ParamUtil;
27
28 import java.util.ArrayList;
29 import java.util.List;
30 import java.util.Map;
31
32 import javax.portlet.PortletRequest;
33 import javax.portlet.PortletURL;
34
35
41 public class SearchContainer<R> {
42
43 public static final int DEFAULT_CUR = 1;
44
45 public static final String DEFAULT_CUR_PARAM = "cur";
46
47
50 public static final int DEFAULT_CUR_VALUE = DEFAULT_CUR;
51
52 public static final int DEFAULT_DELTA = 20;
53
54 public static final String DEFAULT_DELTA_PARAM = "delta";
55
56 public static final int DEFAULT_MAX_PAGES = 25;
57
58 public static final String DEFAULT_ORDER_BY_COL_PARAM = "orderByCol";
59
60 public static final String DEFAULT_ORDER_BY_TYPE_PARAM = "orderByType";
61
62 public static final int MAX_DELTA = 200;
63
64 public SearchContainer() {
65 }
66
67 public SearchContainer(
68 PortletRequest portletRequest, PortletURL iteratorURL,
69 List<String> headerNames, String emptyResultsMessage) {
70
71 this(
72 portletRequest, null, null, DEFAULT_CUR_PARAM, DEFAULT_DELTA,
73 iteratorURL, headerNames, emptyResultsMessage);
74 }
75
76 public SearchContainer(
77 PortletRequest portletRequest, DisplayTerms displayTerms,
78 DisplayTerms searchTerms, String curParam, int delta,
79 PortletURL iteratorURL, List<String> headerNames,
80 String emptyResultsMessage) {
81
82 _portletRequest = portletRequest;
83 _displayTerms = displayTerms;
84 _searchTerms = searchTerms;
85
86 _curParam = curParam;
87
88 _cur = ParamUtil.getInteger(portletRequest, _curParam, DEFAULT_CUR);
89
90 if (_cur < 1) {
91 _cur = DEFAULT_CUR;
92 }
93
94 setDelta(ParamUtil.getInteger(portletRequest, _deltaParam, delta));
95
96 _iteratorURL = iteratorURL;
97
98 _iteratorURL.setParameter(_curParam, String.valueOf(_cur));
99 _iteratorURL.setParameter(_deltaParam, String.valueOf(_delta));
100 _iteratorURL.setParameter(
101 DisplayTerms.KEYWORDS,
102 ParamUtil.getString(portletRequest, DisplayTerms.KEYWORDS));
103 _iteratorURL.setParameter(
104 DisplayTerms.ADVANCED_SEARCH,
105 String.valueOf(
106 ParamUtil.getBoolean(
107 portletRequest, DisplayTerms.ADVANCED_SEARCH)));
108 _iteratorURL.setParameter(
109 DisplayTerms.AND_OPERATOR,
110 String.valueOf(
111 ParamUtil.getBoolean(
112 portletRequest, DisplayTerms.AND_OPERATOR, true)));
113
114 if (headerNames != null) {
115 _headerNames = new ArrayList<String>(headerNames.size());
116
117 _headerNames.addAll(headerNames);
118 }
119
120 _emptyResultsMessage = emptyResultsMessage;
121 }
122
123 public int getCur() {
124 return _cur;
125 }
126
127 public String getCurParam() {
128 return _curParam;
129 }
130
131
134 public int getCurValue() {
135 return getCur();
136 }
137
138 public int getDelta() {
139 return _delta;
140 }
141
142 public String getDeltaParam() {
143 return _deltaParam;
144 }
145
146 public DisplayTerms getDisplayTerms() {
147 return _displayTerms;
148 }
149
150 public String getEmptyResultsMessage() {
151 return _emptyResultsMessage;
152 }
153
154 public int getEnd() {
155 return _end;
156 }
157
158 public List<String> getHeaderNames() {
159 return _headerNames;
160 }
161
162 public String getId() {
163 return _id;
164 }
165
166 public PortletURL getIteratorURL() {
167 return _iteratorURL;
168 }
169
170 public int getMaxPages() {
171 return _maxPages;
172 }
173
174 public Map<String, String> getOrderableHeaders() {
175 return _orderableHeaders;
176 }
177
178 public String getOrderByCol() {
179 return _orderByCol;
180 }
181
182 public String getOrderByColParam() {
183 return _orderByColParam;
184 }
185
186 public OrderByComparator getOrderByComparator() {
187 return _orderByComparator;
188 }
189
190 public String getOrderByType() {
191 return _orderByType;
192 }
193
194 public String getOrderByTypeParam() {
195 return _orderByTypeParam;
196 }
197
198 public PortletRequest getPortletRequest() {
199 return _portletRequest;
200 }
201
202 public int getResultEnd() {
203 return _resultEnd;
204 }
205
206 public List<ResultRow> getResultRows() {
207 return _resultRows;
208 }
209
210 public List<R> getResults() {
211 return _results;
212 }
213
214 public RowChecker getRowChecker() {
215 return _rowChecker;
216 }
217
218 public DisplayTerms getSearchTerms() {
219 return _searchTerms;
220 }
221
222 public int getStart() {
223 return _start;
224 }
225
226 public int getTotal() {
227 return _total;
228 }
229
230 public boolean isHover() {
231 return _hover;
232 }
233
234 public void setDelta(int delta) {
235 if (delta <= 0) {
236 _delta = DEFAULT_DELTA;
237 }
238 else if (delta > MAX_DELTA) {
239 _delta = MAX_DELTA;
240 }
241 else {
242 _delta = delta;
243 }
244
245 _calculateStartAndEnd();
246 }
247
248 public void setDeltaParam(String deltaParam) {
249 _deltaParam = deltaParam;
250 }
251
252 public void setEmptyResultsMessage(String emptyResultsMessage) {
253 _emptyResultsMessage = emptyResultsMessage;
254 }
255
256 public void setHeaderNames(List<String> headerNames) {
257 _headerNames = headerNames;
258 }
259
260 public void setHover(boolean hover) {
261 _hover = hover;
262 }
263
264 public void setId(String id) {
265 _id = id;
266 }
267
268 public void setIteratorURL(PortletURL iteratorURL) {
269 _iteratorURL = iteratorURL;
270 }
271
272 public void setMaxPages(int maxPages) {
273 _maxPages = maxPages;
274 }
275
276 public void setOrderableHeaders(Map<String, String> orderableHeaders) {
277 _orderableHeaders = orderableHeaders;
278 }
279
280 public void setOrderByCol(String orderByCol) {
281 _orderByCol = orderByCol;
282
283 _iteratorURL.setParameter(_orderByColParam, _orderByCol);
284 }
285
286 public void setOrderByColParam(String orderByColParam) {
287 _orderByColParam = orderByColParam;
288 }
289
290 public void setOrderByComparator(OrderByComparator orderByComparator) {
291 _orderByComparator = orderByComparator;
292 }
293
294 public void setOrderByType(String orderByType) {
295 _orderByType = orderByType;
296
297 _iteratorURL.setParameter(_orderByTypeParam, _orderByType);
298 }
299
300 public void setOrderByTypeParam(String orderByTypeParam) {
301 _orderByTypeParam = orderByTypeParam;
302 }
303
304 public void setResults(List<R> results) {
305 _results = results;
306 }
307
308 public void setRowChecker(RowChecker rowChecker) {
309 _rowChecker = rowChecker;
310 }
311
312 public void setTotal(int total) {
313 _total = total;
314
315 if (((_cur - 1) * _delta) > _total) {
316 _cur = DEFAULT_CUR;
317 }
318
319 _calculateStartAndEnd();
320 }
321
322 private void _calculateStartAndEnd() {
323 _start = (_cur - 1) * _delta;
324 _end = _start + _delta;
325
326 _resultEnd = _end;
327
328 if (_resultEnd > _total) {
329 _resultEnd = _total;
330 }
331 }
332
333 private int _cur;
334 private String _curParam = DEFAULT_CUR_PARAM;
335 private int _delta = DEFAULT_DELTA;
336 private String _deltaParam = DEFAULT_DELTA_PARAM;
337 private DisplayTerms _displayTerms;
338 private String _emptyResultsMessage;
339 private int _end;
340 private List<String> _headerNames;
341 private boolean _hover = true;
342 private String _id;
343 private PortletURL _iteratorURL;
344 private int _maxPages = DEFAULT_MAX_PAGES;
345 private Map<String, String> _orderableHeaders;
346 private String _orderByCol;
347 private String _orderByColParam = DEFAULT_ORDER_BY_COL_PARAM;
348 private OrderByComparator _orderByComparator;
349 private String _orderByType;
350 private String _orderByTypeParam = DEFAULT_ORDER_BY_TYPE_PARAM;
351 private PortletRequest _portletRequest;
352 private int _resultEnd;
353 private List<ResultRow> _resultRows = new ArrayList<ResultRow>();
354 private List<R> _results = new ArrayList<R>();
355 private RowChecker _rowChecker;
356 private DisplayTerms _searchTerms;
357 private int _start;
358 private int _total;
359
360 }