001
014
015 package com.liferay.portlet.bookmarks.util;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.language.LanguageUtil;
019 import com.liferay.portal.kernel.log.Log;
020 import com.liferay.portal.kernel.log.LogFactoryUtil;
021 import com.liferay.portal.kernel.portlet.LiferayWindowState;
022 import com.liferay.portal.kernel.search.Document;
023 import com.liferay.portal.kernel.search.Field;
024 import com.liferay.portal.kernel.search.Hits;
025 import com.liferay.portal.kernel.util.GetterUtil;
026 import com.liferay.portal.kernel.util.HtmlUtil;
027 import com.liferay.portal.kernel.util.OrderByComparator;
028 import com.liferay.portal.kernel.util.ParamUtil;
029 import com.liferay.portal.kernel.util.StringBundler;
030 import com.liferay.portal.kernel.util.StringPool;
031 import com.liferay.portal.model.Company;
032 import com.liferay.portal.theme.ThemeDisplay;
033 import com.liferay.portal.util.PortalUtil;
034 import com.liferay.portal.util.PortletKeys;
035 import com.liferay.portal.util.WebKeys;
036 import com.liferay.portlet.PortletURLFactoryUtil;
037 import com.liferay.portlet.bookmarks.model.BookmarksEntry;
038 import com.liferay.portlet.bookmarks.model.BookmarksFolder;
039 import com.liferay.portlet.bookmarks.model.BookmarksFolderConstants;
040 import com.liferay.portlet.bookmarks.service.BookmarksEntryLocalServiceUtil;
041 import com.liferay.portlet.bookmarks.service.BookmarksFolderLocalServiceUtil;
042 import com.liferay.portlet.bookmarks.util.comparator.EntryCreateDateComparator;
043 import com.liferay.portlet.bookmarks.util.comparator.EntryModifiedDateComparator;
044 import com.liferay.portlet.bookmarks.util.comparator.EntryNameComparator;
045 import com.liferay.portlet.bookmarks.util.comparator.EntryPriorityComparator;
046 import com.liferay.portlet.bookmarks.util.comparator.EntryURLComparator;
047 import com.liferay.portlet.bookmarks.util.comparator.EntryVisitsComparator;
048
049 import java.util.ArrayList;
050 import java.util.Collections;
051 import java.util.LinkedHashMap;
052 import java.util.List;
053 import java.util.Map;
054
055 import javax.portlet.PortletRequest;
056 import javax.portlet.PortletURL;
057 import javax.portlet.RenderResponse;
058
059 import javax.servlet.http.HttpServletRequest;
060
061
064 public class BookmarksUtil {
065
066 public static void addPortletBreadcrumbEntries(
067 BookmarksEntry entry, HttpServletRequest request,
068 RenderResponse renderResponse)
069 throws Exception {
070
071 BookmarksFolder folder = entry.getFolder();
072
073 if (folder.getFolderId() !=
074 BookmarksFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
075
076 addPortletBreadcrumbEntries(folder, request, renderResponse);
077 }
078
079 BookmarksEntry unescapedEntry = entry.toUnescapedModel();
080
081 PortletURL portletURL = renderResponse.createRenderURL();
082
083 portletURL.setParameter("struts_action", "/bookmarks/view_entry");
084 portletURL.setParameter("entryId", String.valueOf(entry.getEntryId()));
085
086 PortalUtil.addPortletBreadcrumbEntry(
087 request, unescapedEntry.getName(), portletURL.toString());
088 }
089
090 public static void addPortletBreadcrumbEntries(
091 BookmarksFolder folder, HttpServletRequest request,
092 RenderResponse renderResponse)
093 throws Exception {
094
095 String strutsAction = ParamUtil.getString(request, "struts_action");
096
097 PortletURL portletURL = renderResponse.createRenderURL();
098
099 if (strutsAction.equals("/bookmarks/select_folder")) {
100 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
101 WebKeys.THEME_DISPLAY);
102
103 portletURL.setParameter(
104 "struts_action", "/bookmarks/select_folder");
105 portletURL.setWindowState(LiferayWindowState.POP_UP);
106
107 PortalUtil.addPortletBreadcrumbEntry(
108 request, themeDisplay.translate("home"), portletURL.toString());
109 }
110 else {
111 portletURL.setParameter("struts_action", "/bookmarks/view");
112 }
113
114 List<BookmarksFolder> ancestorFolders = folder.getAncestors();
115
116 Collections.reverse(ancestorFolders);
117
118 for (BookmarksFolder ancestorFolder : ancestorFolders) {
119 portletURL.setParameter(
120 "folderId", String.valueOf(ancestorFolder.getFolderId()));
121
122 PortalUtil.addPortletBreadcrumbEntry(
123 request, ancestorFolder.getName(), portletURL.toString());
124 }
125
126 portletURL.setParameter(
127 "folderId", String.valueOf(folder.getFolderId()));
128
129 if (folder.getFolderId() !=
130 BookmarksFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
131
132 BookmarksFolder unescapedFolder = folder.toUnescapedModel();
133
134 PortalUtil.addPortletBreadcrumbEntry(
135 request, unescapedFolder.getName(), portletURL.toString());
136 }
137 }
138
139 public static void addPortletBreadcrumbEntries(
140 long folderId, HttpServletRequest request,
141 RenderResponse renderResponse)
142 throws Exception {
143
144 if (folderId == BookmarksFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
145 return;
146 }
147
148 BookmarksFolder folder = BookmarksFolderLocalServiceUtil.getFolder(
149 folderId);
150
151 addPortletBreadcrumbEntries(folder, request, renderResponse);
152 }
153
154 public static String getAbsolutePath(
155 PortletRequest portletRequest, long folderId)
156 throws PortalException {
157
158 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
159 WebKeys.THEME_DISPLAY);
160
161 if (folderId == BookmarksFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
162 return themeDisplay.translate("home");
163 }
164
165 BookmarksFolder folder =
166 BookmarksFolderLocalServiceUtil.fetchBookmarksFolder(folderId);
167
168 List<BookmarksFolder> folders = folder.getAncestors();
169
170 StringBundler sb = new StringBundler((folders.size() * 3) + 5);
171
172 sb.append(themeDisplay.translate("home"));
173 sb.append(StringPool.SPACE);
174
175 Collections.reverse(folders);
176
177 for (BookmarksFolder curFolder : folders) {
178 sb.append(StringPool.RAQUO_CHAR);
179 sb.append(StringPool.SPACE);
180 sb.append(curFolder.getName());
181 }
182
183 sb.append(StringPool.RAQUO_CHAR);
184 sb.append(StringPool.SPACE);
185 sb.append(folder.getName());
186
187 return sb.toString();
188 }
189
190 public static String getControlPanelLink(
191 PortletRequest portletRequest, long folderId)
192 throws PortalException {
193
194 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
195 WebKeys.THEME_DISPLAY);
196
197 PortletURL portletURL = PortletURLFactoryUtil.create(
198 portletRequest, PortletKeys.BOOKMARKS_ADMIN,
199 PortalUtil.getControlPanelPlid(themeDisplay.getCompanyId()),
200 PortletRequest.RENDER_PHASE);
201
202 portletURL.setParameter("struts_action", "/bookmarks/view");
203 portletURL.setParameter("folderId", String.valueOf(folderId));
204
205 return portletURL.toString();
206 }
207
208 public static Map<String, String> getEmailDefinitionTerms(
209 PortletRequest portletRequest, String emailFromAddress,
210 String emailFromName) {
211
212 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
213 WebKeys.THEME_DISPLAY);
214
215 Map<String, String> definitionTerms =
216 new LinkedHashMap<String, String>();
217
218 definitionTerms.put(
219 "[$BOOKMARKS_ENTRY_USER_NAME$]",
220 LanguageUtil.get(
221 themeDisplay.getLocale(),
222 "the-user-who-added-the-bookmark-entry"));
223 definitionTerms.put(
224 "[$BOOKMARKS_ENTRY_STATUS_BY_USER_NAME$]",
225 LanguageUtil.get(
226 themeDisplay.getLocale(),
227 "the-user-who-updated-the-bookmark-entry"));
228 definitionTerms.put(
229 "[$BOOKMARKS_ENTRY_URL$]",
230 LanguageUtil.get(
231 themeDisplay.getLocale(), "the-bookmark-entry-url"));
232 definitionTerms.put(
233 "[$FROM_ADDRESS$]", HtmlUtil.escape(emailFromAddress));
234 definitionTerms.put("[$FROM_NAME$]", HtmlUtil.escape(emailFromName));
235
236 Company company = themeDisplay.getCompany();
237
238 definitionTerms.put("[$PORTAL_URL$]", company.getVirtualHostname());
239
240 definitionTerms.put(
241 "[$PORTLET_NAME$]", PortalUtil.getPortletTitle(portletRequest));
242 definitionTerms.put(
243 "[$TO_ADDRESS$]",
244 LanguageUtil.get(
245 themeDisplay.getLocale(),
246 "the-address-of-the-email-recipient"));
247 definitionTerms.put(
248 "[$TO_NAME$]",
249 LanguageUtil.get(
250 themeDisplay.getLocale(), "the-name-of-the-email-recipient"));
251
252 return definitionTerms;
253 }
254
255 public static List<Object> getEntries(Hits hits) {
256 List<Object> entries = new ArrayList<Object>();
257
258 for (Document document : hits.getDocs()) {
259 String entryClassName = document.get(Field.ENTRY_CLASS_NAME);
260 long entryClassPK = GetterUtil.getLong(
261 document.get(Field.ENTRY_CLASS_PK));
262
263 try {
264 Object obj = null;
265
266 if (entryClassName.equals(BookmarksEntry.class.getName())) {
267 obj = BookmarksEntryLocalServiceUtil.getEntry(entryClassPK);
268 }
269 else if (entryClassName.equals(
270 BookmarksFolder.class.getName())) {
271
272 obj = BookmarksFolderLocalServiceUtil.getFolder(
273 entryClassPK);
274 }
275
276 entries.add(obj);
277 }
278 catch (Exception e) {
279 if (_log.isWarnEnabled()) {
280 _log.warn(
281 "Bookmarks search index is stale and contains entry " +
282 entryClassPK);
283 }
284
285 continue;
286 }
287 }
288
289 return entries;
290 }
291
292 public static OrderByComparator<BookmarksEntry> getEntryOrderByComparator(
293 String orderByCol, String orderByType) {
294
295 boolean orderByAsc = false;
296
297 if (orderByType.equals("asc")) {
298 orderByAsc = true;
299 }
300
301 OrderByComparator<BookmarksEntry> orderByComparator = null;
302
303 if (orderByCol.equals("create-date")) {
304 orderByComparator = new EntryCreateDateComparator(orderByAsc);
305 }
306 else if (orderByCol.equals("modified-date")) {
307 orderByComparator = new EntryModifiedDateComparator(orderByAsc);
308 }
309 else if (orderByCol.equals("name")) {
310 orderByComparator = new EntryNameComparator(orderByAsc);
311 }
312 else if (orderByCol.equals("priority")) {
313 orderByComparator = new EntryPriorityComparator(orderByAsc);
314 }
315 else if (orderByCol.equals("url")) {
316 orderByComparator = new EntryURLComparator(orderByAsc);
317 }
318 else if (orderByCol.equals("visits")) {
319 orderByComparator = new EntryVisitsComparator(orderByAsc);
320 }
321
322 return orderByComparator;
323 }
324
325 private static final Log _log = LogFactoryUtil.getLog(BookmarksUtil.class);
326
327 }