001
014
015 package com.liferay.portlet.documentlibrary.util;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.portlet.LiferayWindowState;
020 import com.liferay.portal.kernel.util.GetterUtil;
021 import com.liferay.portal.kernel.util.ParamUtil;
022 import com.liferay.portal.kernel.util.PrefsPropsUtil;
023 import com.liferay.portal.kernel.util.PropsKeys;
024 import com.liferay.portal.kernel.util.StringBundler;
025 import com.liferay.portal.kernel.util.StringPool;
026 import com.liferay.portal.kernel.util.StringUtil;
027 import com.liferay.portal.kernel.util.WebKeys;
028 import com.liferay.portal.theme.ThemeDisplay;
029 import com.liferay.portal.util.PortalUtil;
030 import com.liferay.portlet.PortletPreferencesFactoryUtil;
031 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
032 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
033 import com.liferay.portlet.documentlibrary.model.DLFolder;
034 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
035 import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
036
037 import java.util.Collections;
038 import java.util.HashMap;
039 import java.util.HashSet;
040 import java.util.List;
041 import java.util.Map;
042 import java.util.Set;
043
044 import javax.portlet.PortletPreferences;
045 import javax.portlet.PortletURL;
046 import javax.portlet.RenderResponse;
047
048 import javax.servlet.http.HttpServletRequest;
049
050
054 public class DLUtil {
055
056 public static void addPortletBreadcrumbEntries(
057 DLFileEntry fileEntry, HttpServletRequest request,
058 RenderResponse renderResponse)
059 throws Exception {
060
061 DLFolder folder = fileEntry.getFolder();
062
063 if (folder.getFolderId() !=
064 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
065
066 addPortletBreadcrumbEntries(folder, request, renderResponse);
067 }
068
069 PortletURL portletURL = renderResponse.createRenderURL();
070
071 portletURL.setParameter(
072 "struts_action", "/document_library/view_file_entry");
073 portletURL.setParameter(
074 "folderId", String.valueOf(fileEntry.getFolderId()));
075 portletURL.setParameter("name", fileEntry.getName());
076
077 PortalUtil.addPortletBreadcrumbEntry(
078 request, fileEntry.getTitle(), portletURL.toString());
079 }
080
081 public static void addPortletBreadcrumbEntries(
082 DLFileShortcut fileShortcut, HttpServletRequest request,
083 RenderResponse renderResponse)
084 throws Exception {
085
086 DLFolder folder = fileShortcut.getFolder();
087
088 if (folder.getFolderId() !=
089 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
090
091 addPortletBreadcrumbEntries(folder, request, renderResponse);
092 }
093
094 PortletURL portletURL = renderResponse.createRenderURL();
095
096 portletURL.setParameter(
097 "struts_action", "/document_library/view_file_shortcut");
098 portletURL.setParameter(
099 "fileShortcutId", String.valueOf(fileShortcut.getFileShortcutId()));
100
101 PortalUtil.addPortletBreadcrumbEntry(
102 request, fileShortcut.getToTitle(), portletURL.toString());
103 }
104
105 public static void addPortletBreadcrumbEntries(
106 long folderId, HttpServletRequest request,
107 RenderResponse renderResponse)
108 throws Exception {
109
110 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
111 DLFolder folder = DLFolderLocalServiceUtil.getFolder(folderId);
112
113 if (folder.getFolderId() !=
114 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
115
116 addPortletBreadcrumbEntries(folder, request, renderResponse);
117 }
118 }
119 }
120
121 public static void addPortletBreadcrumbEntries(
122 DLFolder folder, HttpServletRequest request,
123 RenderResponse renderResponse)
124 throws Exception {
125
126 String strutsAction = ParamUtil.getString(
127 request, "struts_action");
128
129 long groupId = ParamUtil.getLong(request, "groupId");
130
131 PortletURL portletURL = renderResponse.createRenderURL();
132
133 if (strutsAction.equals("/journal/select_document_library") ||
134 strutsAction.equals("/document_library/select_file_entry") ||
135 strutsAction.equals("/document_library/select_folder") ||
136 strutsAction.equals("/document_library_display/select_folder")) {
137
138 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
139 WebKeys.THEME_DISPLAY);
140
141 portletURL.setWindowState(LiferayWindowState.POP_UP);
142
143 portletURL.setParameter("struts_action", strutsAction);
144 portletURL.setParameter("groupId", String.valueOf(groupId));
145
146 PortalUtil.addPortletBreadcrumbEntry(
147 request, themeDisplay.translate("documents-home"),
148 portletURL.toString());
149 }
150 else {
151 portletURL.setParameter("struts_action", "/document_library/view");
152 }
153
154 PortletPreferences preferences =
155 PortletPreferencesFactoryUtil.getPortletPreferences(
156 request, PortalUtil.getPortletId(request));
157
158 long defaultFolderId = GetterUtil.getLong(
159 preferences.getValue(
160 "rootFolderId",
161 String.valueOf(DLFolderConstants.DEFAULT_PARENT_FOLDER_ID)));
162
163 List<DLFolder> ancestorFolders = Collections.EMPTY_LIST;
164
165 if (folder.getFolderId() != defaultFolderId) {
166 ancestorFolders = folder.getAncestors();
167
168 int indexOfRootFolder = -1;
169
170 for (int i = 0; i < ancestorFolders.size(); i++) {
171 DLFolder ancestorFolder = ancestorFolders.get(i);
172
173 if (defaultFolderId == ancestorFolder.getFolderId()) {
174 indexOfRootFolder = i;
175 }
176 }
177
178 if (indexOfRootFolder > -1) {
179 ancestorFolders = ancestorFolders.subList(0, indexOfRootFolder);
180 }
181 }
182
183 Collections.reverse(ancestorFolders);
184
185 for (DLFolder ancestorFolder : ancestorFolders) {
186 portletURL.setParameter(
187 "folderId", String.valueOf(ancestorFolder.getFolderId()));
188
189 PortalUtil.addPortletBreadcrumbEntry(
190 request, ancestorFolder.getName(), portletURL.toString());
191 }
192
193 portletURL.setParameter(
194 "folderId", String.valueOf(folder.getFolderId()));
195
196 if ((folder.getFolderId() !=
197 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) &&
198 (folder.getFolderId() != defaultFolderId)) {
199
200 PortalUtil.addPortletBreadcrumbEntry(
201 request, folder.getName(), portletURL.toString());
202 }
203 }
204
205 public static int compareVersions(String version1, String version2) {
206 int[] splitVersion1 = StringUtil.split(version1, StringPool.PERIOD, 0);
207 int[] splitVersion2 = StringUtil.split(version2, StringPool.PERIOD, 0);
208
209 if ((splitVersion1.length != 2) && (splitVersion2.length != 2)) {
210 return 0;
211 }
212 else if ((splitVersion1.length != 2)) {
213 return -1;
214 }
215 else if ((splitVersion2.length != 2)) {
216 return 1;
217 }
218
219 if (splitVersion1[0] > splitVersion2[0]) {
220 return 1;
221 }
222 else if (splitVersion1[0] < splitVersion2[0]) {
223 return -1;
224 }
225 else if (splitVersion1[1] > splitVersion2[1]) {
226 return 1;
227 }
228 else if (splitVersion1[1] < splitVersion2[1]) {
229 return -1;
230 }
231
232 return 0;
233 }
234
235 public static String getFileIcon(String extension) {
236 return _instance._getFileIcon(extension);
237 }
238
239 public static String getGenericName(String extension) {
240 return _instance._getGenericName(extension);
241 }
242
243 public static String getLockId(long groupId, long folderId, String name) {
244 StringBundler sb = new StringBundler(5);
245
246 sb.append(groupId);
247 sb.append(StringPool.POUND);
248 sb.append(folderId);
249 sb.append(StringPool.POUND);
250 sb.append(name);
251
252 return sb.toString();
253 }
254
255 private DLUtil() {
256 _fileIcons = new HashSet<String>();
257
258 String[] fileIcons = null;
259
260 try {
261 fileIcons = PrefsPropsUtil.getStringArray(
262 PropsKeys.DL_FILE_ICONS, StringPool.COMMA);
263 }
264 catch (Exception e) {
265 _log.error(e, e);
266
267 fileIcons = new String[] {StringPool.BLANK};
268 }
269
270 for (int i = 0; i < fileIcons.length; i++) {
271
272
273
274 if (!StringPool.STAR.equals(fileIcons[i])) {
275
276
277
278 String extension = fileIcons[i];
279 extension = extension.substring(1, extension.length());
280
281 _fileIcons.add(extension);
282 }
283 }
284
285 _genericNames = new HashMap<String, String>();
286
287 _genericNames.put("lar", "compressed");
288 _genericNames.put("rar", "compressed");
289 _genericNames.put("zip", "compressed");
290
291 _genericNames.put("doc", "document");
292 _genericNames.put("docx", "document");
293 _genericNames.put("rtf", "document");
294 _genericNames.put("odt", "document");
295
296 _genericNames.put("flv", "flash");
297 _genericNames.put("swf", "flash");
298
299 _genericNames.put("bmp", "image");
300 _genericNames.put("gif", "image");
301 _genericNames.put("jpeg", "image");
302 _genericNames.put("jpg", "image");
303 _genericNames.put("odg", "image");
304 _genericNames.put("png", "image");
305 _genericNames.put("svg", "image");
306
307 _genericNames.put("acc", "music");
308 _genericNames.put("mid", "music");
309 _genericNames.put("mp3", "music");
310 _genericNames.put("wav", "music");
311 _genericNames.put("wma", "music");
312
313 _genericNames.put("pdf", "pdf");
314
315 _genericNames.put("key", "presentation");
316 _genericNames.put("odp", "presentation");
317 _genericNames.put("pps", "presentation");
318 _genericNames.put("ppt", "presentation");
319 _genericNames.put("pptx", "presentation");
320
321 _genericNames.put("csv", "spreadsheet");
322 _genericNames.put("ods", "spreadsheet");
323 _genericNames.put("xls", "spreadsheet");
324 _genericNames.put("xlsx", "spreadsheet");
325
326 _genericNames.put("avi", "video");
327 _genericNames.put("mov", "video");
328 _genericNames.put("mp4", "video");
329 _genericNames.put("mpg", "video");
330 _genericNames.put("qt", "video");
331 _genericNames.put("rm", "video");
332 _genericNames.put("wmv", "video");
333 }
334
335 private String _getFileIcon(String extension) {
336 if (!_fileIcons.contains(extension)) {
337 extension = _DEFAULT_FILE_ICON;
338 }
339
340 return extension;
341 }
342
343 private String _getGenericName(String extension) {
344 String genericName = _genericNames.get(extension);
345
346 if (genericName == null) {
347 genericName = _DEFAULT_GENERIC_NAME;
348 }
349
350 return genericName;
351 }
352
353 private static final String _DEFAULT_GENERIC_NAME = "default";
354
355 private static final String _DEFAULT_FILE_ICON = "page";
356
357 private static Log _log = LogFactoryUtil.getLog(DLUtil.class);
358
359 private static DLUtil _instance = new DLUtil();
360
361 private Map<String, String> _genericNames;
362 private Set<String> _fileIcons;
363
364 }