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.portlet.bookmarks.util;
24  
25  import com.liferay.portal.kernel.language.LanguageUtil;
26  import com.liferay.portal.kernel.portlet.LiferayWindowState;
27  import com.liferay.portal.kernel.util.OrderByComparator;
28  import com.liferay.portal.kernel.util.ParamUtil;
29  import com.liferay.portal.kernel.util.StringPool;
30  import com.liferay.portlet.bookmarks.model.BookmarksEntry;
31  import com.liferay.portlet.bookmarks.model.BookmarksFolder;
32  import com.liferay.portlet.bookmarks.service.BookmarksEntryLocalServiceUtil;
33  import com.liferay.portlet.bookmarks.service.BookmarksFolderLocalServiceUtil;
34  import com.liferay.portlet.bookmarks.util.comparator.EntryCreateDateComparator;
35  import com.liferay.portlet.bookmarks.util.comparator.EntryModifiedDateComparator;
36  import com.liferay.portlet.bookmarks.util.comparator.EntryNameComparator;
37  import com.liferay.portlet.bookmarks.util.comparator.EntryPriorityComparator;
38  import com.liferay.portlet.bookmarks.util.comparator.EntryURLComparator;
39  import com.liferay.portlet.bookmarks.util.comparator.EntryVisitsComparator;
40  
41  import javax.portlet.PortletURL;
42  import javax.portlet.RenderRequest;
43  import javax.portlet.RenderResponse;
44  
45  import javax.servlet.jsp.PageContext;
46  
47  /**
48   * <a href="BookmarksUtil.java.html"><b><i>View Source</i></b></a>
49   *
50   * @author Brian Wing Shun Chan
51   *
52   */
53  public class BookmarksUtil {
54  
55      public static String getBreadcrumbs(
56              long folderId, long entryId, PageContext pageContext,
57              RenderRequest renderRequest, RenderResponse renderResponse)
58          throws Exception {
59  
60          if (entryId > 0) {
61              BookmarksEntry entry =
62                  BookmarksEntryLocalServiceUtil.getEntry(entryId);
63  
64              return getBreadcrumbs(
65                  entry.getFolder(), entry, pageContext, renderRequest,
66                  renderResponse);
67          }
68          else {
69              BookmarksFolder folder = null;
70  
71              try {
72                  folder = BookmarksFolderLocalServiceUtil.getFolder(folderId);
73              }
74              catch (Exception e) {
75              }
76  
77              return getBreadcrumbs(
78                  folder, null, pageContext, renderRequest, renderResponse);
79          }
80      }
81  
82      public static String getBreadcrumbs(
83              BookmarksFolder folder, BookmarksEntry entry,
84              PageContext pageContext, RenderRequest renderRequest,
85              RenderResponse renderResponse)
86          throws Exception {
87  
88          String strutsAction = ParamUtil.getString(
89              renderRequest, "struts_action");
90  
91          boolean selectFolder = strutsAction.equals("/bookmarks/select_folder");
92  
93          if ((entry != null) && (folder == null)) {
94              folder = entry.getFolder();
95          }
96  
97          PortletURL foldersURL = renderResponse.createRenderURL();
98  
99          if (selectFolder) {
100             foldersURL.setWindowState(LiferayWindowState.POP_UP);
101 
102             foldersURL.setParameter(
103                 "struts_action", "/bookmarks/select_folder");
104         }
105         else {
106             //foldersURL.setWindowState(WindowState.MAXIMIZED);
107 
108             foldersURL.setParameter("struts_action", "/bookmarks/view");
109         }
110 
111         String foldersLink =
112             "<a href=\"" + foldersURL.toString() + "\">" +
113                 LanguageUtil.get(pageContext, "folders") + "</a>";
114 
115         if (folder == null) {
116             return "<span class=\"first last\">" + foldersLink + "</span>";
117         }
118 
119         String breadcrumbs = StringPool.BLANK;
120 
121         if (folder != null) {
122             for (int i = 0;; i++) {
123                 folder = folder.toEscapedModel();
124 
125                 PortletURL portletURL = renderResponse.createRenderURL();
126 
127                 if (selectFolder) {
128                     portletURL.setWindowState(LiferayWindowState.POP_UP);
129 
130                     portletURL.setParameter(
131                         "struts_action", "/bookmarks/select_folder");
132                     portletURL.setParameter(
133                         "folderId", String.valueOf(folder.getFolderId()));
134                 }
135                 else {
136                     //portletURL.setWindowState(WindowState.MAXIMIZED);
137 
138                     portletURL.setParameter("struts_action", "/bookmarks/view");
139                     portletURL.setParameter(
140                         "folderId", String.valueOf(folder.getFolderId()));
141                 }
142 
143                 String folderLink =
144                     "<a href=\"" + portletURL.toString() + "\">" +
145                         folder.getName() + "</a>";
146 
147                 if (i == 0) {
148                     if (entry != null) {
149                         breadcrumbs += folderLink;
150                     }
151                     else {
152                         breadcrumbs =
153                             "<span class=\"last\">" + folderLink + "</span>";
154                     }
155                 }
156                 else {
157                     breadcrumbs = folderLink + " &raquo; " + breadcrumbs;
158                 }
159 
160                 if (folder.isRoot()) {
161                     break;
162                 }
163 
164                 folder = BookmarksFolderLocalServiceUtil.getFolder(
165                     folder.getParentFolderId());
166             }
167         }
168 
169         breadcrumbs =
170             "<span class=\"first\">" + foldersLink + " &raquo; </span>" +
171                 breadcrumbs;
172 
173         if (entry != null) {
174             entry = entry.toEscapedModel();
175 
176             PortletURL entryURL = renderResponse.createRenderURL();
177 
178             //entryURL.setWindowState(WindowState.MAXIMIZED);
179 
180             entryURL.setParameter("struts_action", "/bookmarks/edit_entry");
181             entryURL.setParameter(
182                 "entryId", String.valueOf(entry.getEntryId()));
183 
184             String entryLink =
185                 "<span class=\"last\"><a href=\"" + entryURL.toString() +
186                     "\">" + entry.getEntryId() + "</a></span>";
187 
188             breadcrumbs = breadcrumbs + " &raquo; " + entryLink;
189         }
190 
191         return breadcrumbs;
192     }
193 
194     public static OrderByComparator getEntriesOrderByComparator(
195         String orderByCol, String orderByType) {
196 
197         boolean orderByAsc = false;
198 
199         if (orderByType.equals("asc")) {
200             orderByAsc = true;
201         }
202 
203         OrderByComparator orderByComparator = null;
204 
205         if (orderByCol.equals("create-date")) {
206             orderByComparator = new EntryCreateDateComparator(orderByAsc);
207         }
208         else if (orderByCol.equals("modified-date")) {
209             orderByComparator = new EntryModifiedDateComparator(orderByAsc);
210         }
211         else if (orderByCol.equals("name")) {
212             orderByComparator = new EntryNameComparator(orderByAsc);
213         }
214         else if (orderByCol.equals("priority")) {
215             orderByComparator = new EntryPriorityComparator(orderByAsc);
216         }
217         else if (orderByCol.equals("url")) {
218             orderByComparator = new EntryURLComparator(orderByAsc);
219         }
220         else if (orderByCol.equals("visits")) {
221             orderByComparator = new EntryVisitsComparator(orderByAsc);
222         }
223 
224         return orderByComparator;
225     }
226 
227 }