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                    PortletURL portletURL = renderResponse.createRenderURL();
074    
075                    portletURL.setParameter("struts_action", "/bookmarks/view_entry");
076                    portletURL.setParameter("entryId", String.valueOf(entry.getEntryId()));
077    
078                    PortalUtil.addPortletBreadcrumbEntry(
079                            request, entry.getName(), portletURL.toString());
080            }
081    
082            public static void addPortletBreadcrumbEntries(
083                            BookmarksFolder folder, HttpServletRequest request,
084                            RenderResponse renderResponse)
085                    throws Exception {
086    
087                    String strutsAction = ParamUtil.getString(request, "struts_action");
088    
089                    PortletURL portletURL = renderResponse.createRenderURL();
090    
091                    if (strutsAction.equals("/bookmarks/select_folder")) {
092                            ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
093                                    WebKeys.THEME_DISPLAY);
094    
095                            portletURL.setWindowState(LiferayWindowState.POP_UP);
096    
097                            portletURL.setParameter(
098                                    "struts_action", "/bookmarks/select_folder");
099    
100                            PortalUtil.addPortletBreadcrumbEntry(
101                                    request, themeDisplay.translate("home"), portletURL.toString());
102                    }
103                    else {
104                            portletURL.setParameter("struts_action", "/bookmarks/view");
105                    }
106    
107                    List<BookmarksFolder> ancestorFolders = folder.getAncestors();
108    
109                    Collections.reverse(ancestorFolders);
110    
111                    for (BookmarksFolder ancestorFolder : ancestorFolders) {
112                            portletURL.setParameter(
113                                    "folderId", String.valueOf(ancestorFolder.getFolderId()));
114    
115                            PortalUtil.addPortletBreadcrumbEntry(
116                                    request, ancestorFolder.getName(), portletURL.toString());
117                    }
118    
119                    portletURL.setParameter(
120                            "folderId", String.valueOf(folder.getFolderId()));
121    
122                    if (folder.getFolderId() !=
123                                    BookmarksFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
124    
125                            PortalUtil.addPortletBreadcrumbEntry(
126                                    request, folder.getName(), portletURL.toString());
127                    }
128            }
129    
130            public static void addPortletBreadcrumbEntries(
131                            long folderId, HttpServletRequest request,
132                            RenderResponse renderResponse)
133                    throws Exception {
134    
135                    if (folderId == BookmarksFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
136                            return;
137                    }
138    
139                    BookmarksFolder folder = BookmarksFolderLocalServiceUtil.getFolder(
140                            folderId);
141    
142                    addPortletBreadcrumbEntries(folder, request, renderResponse);
143            }
144    
145            public static Map<Locale, String> getEmailEntryAddedBodyMap(
146                    PortletPreferences preferences) {
147    
148                    Map<Locale, String> map = LocalizationUtil.getLocalizationMap(
149                            preferences, "emailEntryAddedBody");
150    
151                    Locale defaultLocale = LocaleUtil.getDefault();
152    
153                    String defaultValue = map.get(defaultLocale);
154    
155                    if (Validator.isNotNull(defaultValue)) {
156                            return map;
157                    }
158    
159                    map.put(
160                            defaultLocale,
161                            ContentUtil.get(
162                                    PropsUtil.get(PropsKeys.BOOKMARKS_EMAIL_ENTRY_ADDED_BODY)));
163    
164                    return map;
165            }
166    
167            public static boolean getEmailEntryAddedEnabled(
168                    PortletPreferences preferences) {
169    
170                    String emailEntryAddedEnabled = preferences.getValue(
171                            "emailEntryAddedEnabled", StringPool.BLANK);
172    
173                    if (Validator.isNotNull(emailEntryAddedEnabled)) {
174                            return GetterUtil.getBoolean(emailEntryAddedEnabled);
175                    }
176                    else {
177                            return GetterUtil.getBoolean(
178                                    PropsUtil.get(PropsKeys.BOOKMARKS_EMAIL_ENTRY_ADDED_ENABLED));
179                    }
180            }
181    
182            public static Map<Locale, String> getEmailEntryAddedSubjectMap(
183                    PortletPreferences preferences) {
184    
185                    Map<Locale, String> map = LocalizationUtil.getLocalizationMap(
186                            preferences, "emailEntryAddedSubject");
187    
188                    Locale defaultLocale = LocaleUtil.getDefault();
189    
190                    String defaultValue = map.get(defaultLocale);
191    
192                    if (Validator.isNotNull(defaultValue)) {
193                            return map;
194                    }
195    
196                    map.put(
197                            defaultLocale,
198                            ContentUtil.get(
199                                    PropsUtil.get(PropsKeys.BOOKMARKS_EMAIL_ENTRY_ADDED_SUBJECT)));
200    
201                    return map;
202            }
203    
204            public static Map<Locale, String> getEmailEntryUpdatedBodyMap(
205                    PortletPreferences preferences) {
206    
207                    Map<Locale, String> map = LocalizationUtil.getLocalizationMap(
208                            preferences, "emailEntryUpdatedBody");
209    
210                    Locale defaultLocale = LocaleUtil.getDefault();
211    
212                    String defaultValue = map.get(defaultLocale);
213    
214                    if (Validator.isNotNull(defaultValue)) {
215                            return map;
216                    }
217    
218                    map.put(
219                            defaultLocale,
220                            ContentUtil.get(
221                                    PropsUtil.get(PropsKeys.BOOKMARKS_EMAIL_ENTRY_UPDATED_BODY)));
222    
223                    return map;
224            }
225    
226            public static boolean getEmailEntryUpdatedEnabled(
227                    PortletPreferences preferences) {
228    
229                    String emailEntryUpdatedEnabled = preferences.getValue(
230                            "emailEntryUpdatedEnabled", StringPool.BLANK);
231    
232                    if (Validator.isNotNull(emailEntryUpdatedEnabled)) {
233                            return GetterUtil.getBoolean(emailEntryUpdatedEnabled);
234                    }
235                    else {
236                            return GetterUtil.getBoolean(
237                                    PropsUtil.get(PropsKeys.BOOKMARKS_EMAIL_ENTRY_UPDATED_ENABLED));
238                    }
239            }
240    
241            public static Map<Locale, String> getEmailEntryUpdatedSubjectMap(
242                    PortletPreferences preferences) {
243    
244                    Map<Locale, String> map = LocalizationUtil.getLocalizationMap(
245                            preferences, "emailEntryUpdatedSubject");
246    
247                    Locale defaultLocale = LocaleUtil.getDefault();
248    
249                    String defaultValue = map.get(defaultLocale);
250    
251                    if (Validator.isNotNull(defaultValue)) {
252                            return map;
253                    }
254    
255                    map.put(
256                            defaultLocale,
257                            ContentUtil.get(
258                                    PropsUtil.get(
259                                            PropsKeys.BOOKMARKS_EMAIL_ENTRY_UPDATED_SUBJECT)));
260    
261                    return map;
262            }
263    
264            public static String getEmailFromAddress(
265                            PortletPreferences preferences, long companyId)
266                    throws SystemException {
267    
268                    return PortalUtil.getEmailFromAddress(
269                            preferences, companyId, PropsValues.BOOKMARKS_EMAIL_FROM_ADDRESS);
270            }
271    
272            public static String getEmailFromName(
273                            PortletPreferences preferences, long companyId)
274                    throws SystemException {
275    
276                    return PortalUtil.getEmailFromName(
277                            preferences, companyId, PropsValues.BOOKMARKS_EMAIL_FROM_NAME);
278            }
279    
280            public static OrderByComparator getEntryOrderByComparator(
281                    String orderByCol, String orderByType) {
282    
283                    boolean orderByAsc = false;
284    
285                    if (orderByType.equals("asc")) {
286                            orderByAsc = true;
287                    }
288    
289                    OrderByComparator orderByComparator = null;
290    
291                    if (orderByCol.equals("create-date")) {
292                            orderByComparator = new EntryCreateDateComparator(orderByAsc);
293                    }
294                    else if (orderByCol.equals("modified-date")) {
295                            orderByComparator = new EntryModifiedDateComparator(orderByAsc);
296                    }
297                    else if (orderByCol.equals("name")) {
298                            orderByComparator = new EntryNameComparator(orderByAsc);
299                    }
300                    else if (orderByCol.equals("priority")) {
301                            orderByComparator = new EntryPriorityComparator(orderByAsc);
302                    }
303                    else if (orderByCol.equals("url")) {
304                            orderByComparator = new EntryURLComparator(orderByAsc);
305                    }
306                    else if (orderByCol.equals("visits")) {
307                            orderByComparator = new EntryVisitsComparator(orderByAsc);
308                    }
309    
310                    return orderByComparator;
311            }
312    
313    }