001    /**
002     * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.bookmarks.util;
016    
017    import com.liferay.portal.kernel.exception.SystemException;
018    import com.liferay.portal.kernel.portlet.LiferayWindowState;
019    import com.liferay.portal.kernel.util.GetterUtil;
020    import com.liferay.portal.kernel.util.LocaleUtil;
021    import com.liferay.portal.kernel.util.LocalizationUtil;
022    import com.liferay.portal.kernel.util.OrderByComparator;
023    import com.liferay.portal.kernel.util.ParamUtil;
024    import com.liferay.portal.kernel.util.PropsKeys;
025    import com.liferay.portal.kernel.util.StringPool;
026    import com.liferay.portal.kernel.util.Validator;
027    import com.liferay.portal.theme.ThemeDisplay;
028    import com.liferay.portal.util.PortalUtil;
029    import com.liferay.portal.util.PropsUtil;
030    import com.liferay.portal.util.PropsValues;
031    import com.liferay.portal.util.WebKeys;
032    import com.liferay.portlet.bookmarks.model.BookmarksEntry;
033    import com.liferay.portlet.bookmarks.model.BookmarksFolder;
034    import com.liferay.portlet.bookmarks.model.BookmarksFolderConstants;
035    import com.liferay.portlet.bookmarks.service.BookmarksFolderLocalServiceUtil;
036    import com.liferay.portlet.bookmarks.util.comparator.EntryCreateDateComparator;
037    import com.liferay.portlet.bookmarks.util.comparator.EntryModifiedDateComparator;
038    import com.liferay.portlet.bookmarks.util.comparator.EntryNameComparator;
039    import com.liferay.portlet.bookmarks.util.comparator.EntryPriorityComparator;
040    import com.liferay.portlet.bookmarks.util.comparator.EntryURLComparator;
041    import com.liferay.portlet.bookmarks.util.comparator.EntryVisitsComparator;
042    import com.liferay.util.ContentUtil;
043    
044    import java.util.Collections;
045    import java.util.List;
046    import java.util.Locale;
047    import java.util.Map;
048    
049    import javax.portlet.PortletPreferences;
050    import javax.portlet.PortletURL;
051    import javax.portlet.RenderResponse;
052    
053    import javax.servlet.http.HttpServletRequest;
054    
055    /**
056     * @author Brian Wing Shun Chan
057     */
058    public class BookmarksUtil {
059    
060            public static void addPortletBreadcrumbEntries(
061                            BookmarksEntry entry, HttpServletRequest request,
062                            RenderResponse renderResponse)
063                    throws Exception {
064    
065                    BookmarksFolder folder = entry.getFolder();
066    
067                    if (folder.getFolderId() !=
068                                    BookmarksFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
069    
070                            addPortletBreadcrumbEntries(folder, request, renderResponse);
071                    }
072    
073                    BookmarksEntry unescapedEntry = entry.toUnescapedModel();
074    
075                    PortletURL portletURL = renderResponse.createRenderURL();
076    
077                    portletURL.setParameter("struts_action", "/bookmarks/view_entry");
078                    portletURL.setParameter("entryId", String.valueOf(entry.getEntryId()));
079    
080                    PortalUtil.addPortletBreadcrumbEntry(
081                            request, unescapedEntry.getName(), portletURL.toString());
082            }
083    
084            public static void addPortletBreadcrumbEntries(
085                            BookmarksFolder folder, HttpServletRequest request,
086                            RenderResponse renderResponse)
087                    throws Exception {
088    
089                    String strutsAction = ParamUtil.getString(request, "struts_action");
090    
091                    PortletURL portletURL = renderResponse.createRenderURL();
092    
093                    if (strutsAction.equals("/bookmarks/select_folder")) {
094                            ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
095                                    WebKeys.THEME_DISPLAY);
096    
097                            portletURL.setWindowState(LiferayWindowState.POP_UP);
098    
099                            portletURL.setParameter(
100                                    "struts_action", "/bookmarks/select_folder");
101    
102                            PortalUtil.addPortletBreadcrumbEntry(
103                                    request, themeDisplay.translate("home"), portletURL.toString());
104                    }
105                    else {
106                            portletURL.setParameter("struts_action", "/bookmarks/view");
107                    }
108    
109                    List<BookmarksFolder> ancestorFolders = folder.getAncestors();
110    
111                    Collections.reverse(ancestorFolders);
112    
113                    for (BookmarksFolder ancestorFolder : ancestorFolders) {
114                            portletURL.setParameter(
115                                    "folderId", String.valueOf(ancestorFolder.getFolderId()));
116    
117                            PortalUtil.addPortletBreadcrumbEntry(
118                                    request, ancestorFolder.getName(), portletURL.toString());
119                    }
120    
121                    portletURL.setParameter(
122                            "folderId", String.valueOf(folder.getFolderId()));
123    
124                    if (folder.getFolderId() !=
125                                    BookmarksFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
126    
127                            BookmarksFolder unescapedFolder = folder.toUnescapedModel();
128    
129                            PortalUtil.addPortletBreadcrumbEntry(
130                                    request, unescapedFolder.getName(), portletURL.toString());
131                    }
132            }
133    
134            public static void addPortletBreadcrumbEntries(
135                            long folderId, HttpServletRequest request,
136                            RenderResponse renderResponse)
137                    throws Exception {
138    
139                    if (folderId == BookmarksFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
140                            return;
141                    }
142    
143                    BookmarksFolder folder = BookmarksFolderLocalServiceUtil.getFolder(
144                            folderId);
145    
146                    addPortletBreadcrumbEntries(folder, request, renderResponse);
147            }
148    
149            public static Map<Locale, String> getEmailEntryAddedBodyMap(
150                    PortletPreferences preferences) {
151    
152                    Map<Locale, String> map = LocalizationUtil.getLocalizationMap(
153                            preferences, "emailEntryAddedBody");
154    
155                    Locale defaultLocale = LocaleUtil.getDefault();
156    
157                    String defaultValue = map.get(defaultLocale);
158    
159                    if (Validator.isNotNull(defaultValue)) {
160                            return map;
161                    }
162    
163                    map.put(
164                            defaultLocale,
165                            ContentUtil.get(
166                                    PropsUtil.get(PropsKeys.BOOKMARKS_EMAIL_ENTRY_ADDED_BODY)));
167    
168                    return map;
169            }
170    
171            public static boolean getEmailEntryAddedEnabled(
172                    PortletPreferences preferences) {
173    
174                    String emailEntryAddedEnabled = preferences.getValue(
175                            "emailEntryAddedEnabled", StringPool.BLANK);
176    
177                    if (Validator.isNotNull(emailEntryAddedEnabled)) {
178                            return GetterUtil.getBoolean(emailEntryAddedEnabled);
179                    }
180                    else {
181                            return GetterUtil.getBoolean(
182                                    PropsUtil.get(PropsKeys.BOOKMARKS_EMAIL_ENTRY_ADDED_ENABLED));
183                    }
184            }
185    
186            public static Map<Locale, String> getEmailEntryAddedSubjectMap(
187                    PortletPreferences preferences) {
188    
189                    Map<Locale, String> map = LocalizationUtil.getLocalizationMap(
190                            preferences, "emailEntryAddedSubject");
191    
192                    Locale defaultLocale = LocaleUtil.getDefault();
193    
194                    String defaultValue = map.get(defaultLocale);
195    
196                    if (Validator.isNotNull(defaultValue)) {
197                            return map;
198                    }
199    
200                    map.put(
201                            defaultLocale,
202                            ContentUtil.get(
203                                    PropsUtil.get(PropsKeys.BOOKMARKS_EMAIL_ENTRY_ADDED_SUBJECT)));
204    
205                    return map;
206            }
207    
208            public static Map<Locale, String> getEmailEntryUpdatedBodyMap(
209                    PortletPreferences preferences) {
210    
211                    Map<Locale, String> map = LocalizationUtil.getLocalizationMap(
212                            preferences, "emailEntryUpdatedBody");
213    
214                    Locale defaultLocale = LocaleUtil.getDefault();
215    
216                    String defaultValue = map.get(defaultLocale);
217    
218                    if (Validator.isNotNull(defaultValue)) {
219                            return map;
220                    }
221    
222                    map.put(
223                            defaultLocale,
224                            ContentUtil.get(
225                                    PropsUtil.get(PropsKeys.BOOKMARKS_EMAIL_ENTRY_UPDATED_BODY)));
226    
227                    return map;
228            }
229    
230            public static boolean getEmailEntryUpdatedEnabled(
231                    PortletPreferences preferences) {
232    
233                    String emailEntryUpdatedEnabled = preferences.getValue(
234                            "emailEntryUpdatedEnabled", StringPool.BLANK);
235    
236                    if (Validator.isNotNull(emailEntryUpdatedEnabled)) {
237                            return GetterUtil.getBoolean(emailEntryUpdatedEnabled);
238                    }
239                    else {
240                            return GetterUtil.getBoolean(
241                                    PropsUtil.get(PropsKeys.BOOKMARKS_EMAIL_ENTRY_UPDATED_ENABLED));
242                    }
243            }
244    
245            public static Map<Locale, String> getEmailEntryUpdatedSubjectMap(
246                    PortletPreferences preferences) {
247    
248                    Map<Locale, String> map = LocalizationUtil.getLocalizationMap(
249                            preferences, "emailEntryUpdatedSubject");
250    
251                    Locale defaultLocale = LocaleUtil.getDefault();
252    
253                    String defaultValue = map.get(defaultLocale);
254    
255                    if (Validator.isNotNull(defaultValue)) {
256                            return map;
257                    }
258    
259                    map.put(
260                            defaultLocale,
261                            ContentUtil.get(
262                                    PropsUtil.get(
263                                            PropsKeys.BOOKMARKS_EMAIL_ENTRY_UPDATED_SUBJECT)));
264    
265                    return map;
266            }
267    
268            public static String getEmailFromAddress(
269                            PortletPreferences preferences, long companyId)
270                    throws SystemException {
271    
272                    return PortalUtil.getEmailFromAddress(
273                            preferences, companyId, PropsValues.BOOKMARKS_EMAIL_FROM_ADDRESS);
274            }
275    
276            public static String getEmailFromName(
277                            PortletPreferences preferences, long companyId)
278                    throws SystemException {
279    
280                    return PortalUtil.getEmailFromName(
281                            preferences, companyId, PropsValues.BOOKMARKS_EMAIL_FROM_NAME);
282            }
283    
284            public static OrderByComparator getEntryOrderByComparator(
285                    String orderByCol, String orderByType) {
286    
287                    boolean orderByAsc = false;
288    
289                    if (orderByType.equals("asc")) {
290                            orderByAsc = true;
291                    }
292    
293                    OrderByComparator orderByComparator = null;
294    
295                    if (orderByCol.equals("create-date")) {
296                            orderByComparator = new EntryCreateDateComparator(orderByAsc);
297                    }
298                    else if (orderByCol.equals("modified-date")) {
299                            orderByComparator = new EntryModifiedDateComparator(orderByAsc);
300                    }
301                    else if (orderByCol.equals("name")) {
302                            orderByComparator = new EntryNameComparator(orderByAsc);
303                    }
304                    else if (orderByCol.equals("priority")) {
305                            orderByComparator = new EntryPriorityComparator(orderByAsc);
306                    }
307                    else if (orderByCol.equals("url")) {
308                            orderByComparator = new EntryURLComparator(orderByAsc);
309                    }
310                    else if (orderByCol.equals("visits")) {
311                            orderByComparator = new EntryVisitsComparator(orderByAsc);
312                    }
313    
314                    return orderByComparator;
315            }
316    
317    }