1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
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  /**
36   * <a href="SearchContainer.java.html"><b><i>View Source</i></b></a>
37   *
38   * @author Brian Wing Shun Chan
39   *
40   */
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      /**
48       * @deprecated Use <code>DEFAULT_CUR</code>.
49       */
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     /**
132      * @deprecated Use <code>getCur</code>.
133      */
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 }