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