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