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