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.portlet.journal.search;
21  
22  import com.liferay.portal.kernel.dao.search.SearchContainer;
23  import com.liferay.portal.kernel.log.Log;
24  import com.liferay.portal.kernel.log.LogFactoryUtil;
25  import com.liferay.portal.kernel.util.JavaConstants;
26  import com.liferay.portal.kernel.util.OrderByComparator;
27  import com.liferay.portal.kernel.util.ParamUtil;
28  import com.liferay.portal.kernel.util.Validator;
29  import com.liferay.portal.util.PortletKeys;
30  import com.liferay.portlet.PortalPreferences;
31  import com.liferay.portlet.PortletPreferencesFactoryUtil;
32  import com.liferay.portlet.journal.model.JournalArticle;
33  import com.liferay.portlet.journal.util.JournalUtil;
34  
35  import java.util.ArrayList;
36  import java.util.HashMap;
37  import java.util.List;
38  import java.util.Map;
39  
40  import javax.portlet.PortletConfig;
41  import javax.portlet.PortletRequest;
42  import javax.portlet.PortletURL;
43  
44  /**
45   * <a href="ArticleSearch.java.html"><b><i>View Source</i></b></a>
46   *
47   * @author Brian Wing Shun Chan
48   *
49   */
50  public class ArticleSearch extends SearchContainer<JournalArticle> {
51  
52      static List<String> headerNames = new ArrayList<String>();
53      static Map<String, String> orderableHeaders = new HashMap<String, String>();
54  
55      static {
56          headerNames.add("id");
57          headerNames.add("name");
58          headerNames.add("version");
59          headerNames.add("modified-date");
60          headerNames.add("display-date");
61          headerNames.add("author");
62  
63          orderableHeaders.put("id", "id");
64          orderableHeaders.put("name", "title");
65          orderableHeaders.put("version", "version");
66          orderableHeaders.put("modified-date", "modified-date");
67          orderableHeaders.put("display-date", "display-date");
68      }
69  
70      public static final String EMPTY_RESULTS_MESSAGE =
71          "no-articles-were-found";
72  
73      public ArticleSearch(
74          PortletRequest portletRequest, PortletURL iteratorURL) {
75  
76          super(
77              portletRequest, new ArticleDisplayTerms(portletRequest),
78              new ArticleSearchTerms(portletRequest), DEFAULT_CUR_PARAM,
79              DEFAULT_DELTA, iteratorURL, headerNames, EMPTY_RESULTS_MESSAGE);
80  
81          PortletConfig portletConfig =
82              (PortletConfig)portletRequest.getAttribute(
83                  JavaConstants.JAVAX_PORTLET_CONFIG);
84  
85          ArticleDisplayTerms displayTerms =
86              (ArticleDisplayTerms)getDisplayTerms();
87          ArticleSearchTerms searchTerms = (ArticleSearchTerms)getSearchTerms();
88  
89          if (!portletConfig.getPortletName().equals(PortletKeys.JOURNAL)) {
90              displayTerms.setStatus("approved");
91              searchTerms.setStatus("approved");
92          }
93  
94          iteratorURL.setParameter(
95              ArticleDisplayTerms.GROUP_ID,
96              String.valueOf(displayTerms.getGroupId()));
97          iteratorURL.setParameter(
98              ArticleDisplayTerms.ARTICLE_ID, displayTerms.getArticleId());
99          iteratorURL.setParameter(
100             ArticleDisplayTerms.VERSION,
101             String.valueOf(displayTerms.getVersion()));
102         iteratorURL.setParameter(
103             ArticleDisplayTerms.TITLE, displayTerms.getTitle());
104         iteratorURL.setParameter(
105             ArticleDisplayTerms.DESCRIPTION, displayTerms.getDescription());
106         iteratorURL.setParameter(
107             ArticleDisplayTerms.CONTENT, displayTerms.getContent());
108         iteratorURL.setParameter(
109             ArticleDisplayTerms.TYPE, displayTerms.getType());
110         iteratorURL.setParameter(
111             ArticleDisplayTerms.STRUCTURE_ID, displayTerms.getStructureId());
112         iteratorURL.setParameter(
113             ArticleDisplayTerms.TEMPLATE_ID, displayTerms.getTemplateId());
114         iteratorURL.setParameter(
115             ArticleDisplayTerms.STATUS, displayTerms.getStatus());
116 
117         try {
118             PortalPreferences prefs =
119                 PortletPreferencesFactoryUtil.getPortalPreferences(
120                     portletRequest);
121 
122             String orderByCol = ParamUtil.getString(
123                 portletRequest, "orderByCol");
124             String orderByType = ParamUtil.getString(
125                 portletRequest, "orderByType");
126 
127             if (Validator.isNotNull(orderByCol) &&
128                 Validator.isNotNull(orderByType)) {
129 
130                 prefs.setValue(
131                     PortletKeys.JOURNAL, "articles-order-by-col", orderByCol);
132                 prefs.setValue(
133                     PortletKeys.JOURNAL, "articles-order-by-type", orderByType);
134             }
135             else {
136                 orderByCol = prefs.getValue(
137                     PortletKeys.JOURNAL, "articles-order-by-col", "id");
138                 orderByType = prefs.getValue(
139                     PortletKeys.JOURNAL, "articles-order-by-type", "asc");
140             }
141 
142             OrderByComparator orderByComparator =
143                 JournalUtil.getArticleOrderByComparator(
144                     orderByCol, orderByType);
145 
146             setOrderableHeaders(orderableHeaders);
147             setOrderByCol(orderByCol);
148             setOrderByType(orderByType);
149             setOrderByComparator(orderByComparator);
150         }
151         catch (Exception e) {
152             _log.error(e);
153         }
154     }
155 
156     private static Log _log = LogFactoryUtil.getLog(ArticleSearch.class);
157 
158 }