001
014
015 package com.liferay.portlet.documentlibrary.util;
016
017 import com.liferay.portal.kernel.configuration.Filter;
018 import com.liferay.portal.kernel.exception.PortalException;
019 import com.liferay.portal.kernel.exception.SystemException;
020 import com.liferay.portal.kernel.log.Log;
021 import com.liferay.portal.kernel.log.LogFactoryUtil;
022 import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
023 import com.liferay.portal.kernel.portlet.LiferayWindowState;
024 import com.liferay.portal.kernel.repository.model.FileEntry;
025 import com.liferay.portal.kernel.repository.model.FileVersion;
026 import com.liferay.portal.kernel.repository.model.Folder;
027 import com.liferay.portal.kernel.util.GetterUtil;
028 import com.liferay.portal.kernel.util.HtmlUtil;
029 import com.liferay.portal.kernel.util.HttpUtil;
030 import com.liferay.portal.kernel.util.OrderByComparator;
031 import com.liferay.portal.kernel.util.ParamUtil;
032 import com.liferay.portal.kernel.util.PrefsParamUtil;
033 import com.liferay.portal.kernel.util.PrefsPropsUtil;
034 import com.liferay.portal.kernel.util.PropsKeys;
035 import com.liferay.portal.kernel.util.PropsUtil;
036 import com.liferay.portal.kernel.util.SetUtil;
037 import com.liferay.portal.kernel.util.StringBundler;
038 import com.liferay.portal.kernel.util.StringPool;
039 import com.liferay.portal.kernel.util.StringUtil;
040 import com.liferay.portal.kernel.util.Validator;
041 import com.liferay.portal.kernel.util.WebKeys;
042 import com.liferay.portal.kernel.workflow.WorkflowConstants;
043 import com.liferay.portal.model.Group;
044 import com.liferay.portal.service.WorkflowDefinitionLinkLocalServiceUtil;
045 import com.liferay.portal.theme.PortletDisplay;
046 import com.liferay.portal.theme.ThemeDisplay;
047 import com.liferay.portal.util.PortalUtil;
048 import com.liferay.portal.util.PortletKeys;
049 import com.liferay.portlet.PortletPreferencesFactoryUtil;
050 import com.liferay.portlet.PortletURLFactoryUtil;
051 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
052 import com.liferay.portlet.documentlibrary.model.DLFileEntryTypeConstants;
053 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
054 import com.liferay.portlet.documentlibrary.model.DLFolder;
055 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
056 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
057 import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
058 import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelCreateDateComparator;
059 import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelModifiedDateComparator;
060 import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelNameComparator;
061 import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelReadCountComparator;
062 import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelSizeComparator;
063
064 import java.util.Arrays;
065 import java.util.Collections;
066 import java.util.Date;
067 import java.util.HashMap;
068 import java.util.HashSet;
069 import java.util.List;
070 import java.util.Map;
071 import java.util.Set;
072 import java.util.TreeSet;
073
074 import javax.portlet.PortletPreferences;
075 import javax.portlet.PortletRequest;
076 import javax.portlet.PortletURL;
077 import javax.portlet.RenderResponse;
078
079 import javax.servlet.http.HttpServletRequest;
080
081
085 public class DLUtil {
086
087 public static final String MANUAL_CHECK_IN_REQUIRED =
088 "manualCheckInRequired";
089
090 public static final String MANUAL_CHECK_IN_REQUIRED_PATH =
091 StringPool.SLASH + MANUAL_CHECK_IN_REQUIRED;
092
093 public static final String WEBDAV_CHECK_IN_MODE = "webDAVCheckInMode";
094
095 public static void addPortletBreadcrumbEntries(
096 DLFileShortcut dlFileShortcut, HttpServletRequest request,
097 RenderResponse renderResponse)
098 throws Exception {
099
100 Folder folder = dlFileShortcut.getFolder();
101
102 if (folder.getFolderId() !=
103 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
104
105 addPortletBreadcrumbEntries(folder, request, renderResponse);
106 }
107
108 PortletURL portletURL = renderResponse.createRenderURL();
109
110 portletURL.setParameter(
111 "struts_action", "/document_library/view_file_entry");
112 portletURL.setParameter(
113 "fileEntryId", String.valueOf(dlFileShortcut.getToFileEntryId()));
114
115 PortalUtil.addPortletBreadcrumbEntry(
116 request, dlFileShortcut.getToTitle(), portletURL.toString());
117 }
118
119 public static void addPortletBreadcrumbEntries(
120 FileEntry fileEntry, HttpServletRequest request,
121 RenderResponse renderResponse)
122 throws Exception {
123
124 Folder folder = fileEntry.getFolder();
125
126 if (folder.getFolderId() !=
127 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
128
129 addPortletBreadcrumbEntries(folder, request, renderResponse);
130 }
131
132 PortletURL portletURL = renderResponse.createRenderURL();
133
134 portletURL.setParameter(
135 "struts_action", "/document_library/view_file_entry");
136 portletURL.setParameter(
137 "fileEntryId", String.valueOf(fileEntry.getFileEntryId()));
138
139 PortalUtil.addPortletBreadcrumbEntry(
140 request, fileEntry.getTitle(), portletURL.toString());
141 }
142
143 public static void addPortletBreadcrumbEntries(
144 Folder folder, HttpServletRequest request,
145 LiferayPortletResponse liferayPortletResponse)
146 throws Exception {
147
148 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
149 WebKeys.THEME_DISPLAY);
150
151 PortletURL portletURL = liferayPortletResponse.createRenderURL();
152
153 portletURL.setParameter("struts_action", "/document_library/view");
154
155 Map<String, Object> data = new HashMap<String, Object>();
156
157 data.put("direction-right", Boolean.TRUE.toString());
158 data.put("folder-id", _getDefaultFolderId(request));
159
160 PortalUtil.addPortletBreadcrumbEntry(
161 request, themeDisplay.translate("home"), portletURL.toString(),
162 data);
163
164 addPortletBreadcrumbEntries(folder, request, portletURL);
165 }
166
167 public static void addPortletBreadcrumbEntries(
168 Folder folder, HttpServletRequest request, PortletURL portletURL)
169 throws Exception {
170
171 long defaultFolderId = _getDefaultFolderId(request);
172
173 List<Folder> ancestorFolders = Collections.emptyList();
174
175 if ((folder != null) && (folder.getFolderId() != defaultFolderId)) {
176 ancestorFolders = folder.getAncestors();
177
178 int indexOfRootFolder = -1;
179
180 for (int i = 0; i < ancestorFolders.size(); i++) {
181 Folder ancestorFolder = ancestorFolders.get(i);
182
183 if (defaultFolderId == ancestorFolder.getFolderId()) {
184 indexOfRootFolder = i;
185 }
186 }
187
188 if (indexOfRootFolder > -1) {
189 ancestorFolders = ancestorFolders.subList(0, indexOfRootFolder);
190 }
191 }
192
193 Collections.reverse(ancestorFolders);
194
195 for (Folder ancestorFolder : ancestorFolders) {
196 portletURL.setParameter(
197 "folderId", String.valueOf(ancestorFolder.getFolderId()));
198
199 Map<String, Object> data = new HashMap<String, Object>();
200
201 data.put("direction-right", Boolean.TRUE.toString());
202 data.put("folder-id", ancestorFolder.getFolderId());
203
204 PortalUtil.addPortletBreadcrumbEntry(
205 request, ancestorFolder.getName(), portletURL.toString(), data);
206 }
207
208 long folderId = DLFolderConstants.DEFAULT_PARENT_FOLDER_ID;
209
210 if (folder != null) {
211 folderId = folder.getFolderId();
212 }
213
214 portletURL.setParameter("folderId", String.valueOf(folderId));
215
216 if ((folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) &&
217 (folderId != defaultFolderId)) {
218
219 Map<String, Object> data = new HashMap<String, Object>();
220
221 data.put("direction-right", Boolean.TRUE.toString());
222 data.put("folder-id", folderId);
223
224 PortalUtil.addPortletBreadcrumbEntry(
225 request, folder.getName(), portletURL.toString(), data);
226 }
227 }
228
229 public static void addPortletBreadcrumbEntries(
230 Folder folder, HttpServletRequest request,
231 RenderResponse renderResponse)
232 throws Exception {
233
234 String strutsAction = ParamUtil.getString(request, "struts_action");
235
236 long groupId = ParamUtil.getLong(request, "groupId");
237
238 PortletURL portletURL = renderResponse.createRenderURL();
239
240 if (strutsAction.equals("/journal/select_document_library") ||
241 strutsAction.equals("/document_library/select_file_entry") ||
242 strutsAction.equals("/document_library/select_folder") ||
243 strutsAction.equals("/document_library_display/select_folder") ||
244 strutsAction.equals("/image_gallery_display/select_folder")) {
245
246 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
247 WebKeys.THEME_DISPLAY);
248
249 portletURL.setWindowState(LiferayWindowState.POP_UP);
250
251 portletURL.setParameter("struts_action", strutsAction);
252 portletURL.setParameter("groupId", String.valueOf(groupId));
253
254 PortalUtil.addPortletBreadcrumbEntry(
255 request, themeDisplay.translate("home"), portletURL.toString());
256 }
257 else {
258 portletURL.setParameter("struts_action", "/document_library/view");
259 }
260
261 addPortletBreadcrumbEntries(folder, request, portletURL);
262 }
263
264 public static void addPortletBreadcrumbEntries(
265 long folderId, HttpServletRequest request,
266 RenderResponse renderResponse)
267 throws Exception {
268
269 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
270 Folder folder = DLAppLocalServiceUtil.getFolder(folderId);
271
272 if (folder.getFolderId() !=
273 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
274
275 addPortletBreadcrumbEntries(folder, request, renderResponse);
276 }
277 }
278 }
279
280 public static int compareVersions(String version1, String version2) {
281 int[] splitVersion1 = StringUtil.split(version1, StringPool.PERIOD, 0);
282 int[] splitVersion2 = StringUtil.split(version2, StringPool.PERIOD, 0);
283
284 if ((splitVersion1.length != 2) && (splitVersion2.length != 2)) {
285 return 0;
286 }
287 else if (splitVersion1.length != 2) {
288 return -1;
289 }
290 else if (splitVersion2.length != 2) {
291 return 1;
292 }
293
294 if (splitVersion1[0] > splitVersion2[0]) {
295 return 1;
296 }
297 else if (splitVersion1[0] < splitVersion2[0]) {
298 return -1;
299 }
300 else if (splitVersion1[1] > splitVersion2[1]) {
301 return 1;
302 }
303 else if (splitVersion1[1] < splitVersion2[1]) {
304 return -1;
305 }
306
307 return 0;
308 }
309
310 public static String getAbsolutePath(
311 PortletRequest portletRequest, long folderId)
312 throws PortalException, SystemException {
313
314 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
315 WebKeys.THEME_DISPLAY);
316
317 if (folderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
318 return themeDisplay.translate("home");
319 }
320
321 DLFolder dlFolder = DLFolderLocalServiceUtil.getFolder(folderId);
322
323 List<DLFolder> dlFolders = dlFolder.getAncestors();
324
325 StringBundler sb = new StringBundler((dlFolders.size() * 3) + 6);
326
327 sb.append(themeDisplay.translate("home"));
328 sb.append(StringPool.SPACE);
329
330 for (int i = dlFolders.size() - 1; i >= 0; i--) {
331 DLFolder curDLFolder = dlFolders.get(i);
332
333 sb.append(StringPool.RAQUO);
334 sb.append(StringPool.SPACE);
335 sb.append(curDLFolder.getName());
336 }
337
338 sb.append(StringPool.RAQUO);
339 sb.append(StringPool.SPACE);
340 sb.append(dlFolder.getName());
341
342 return sb.toString();
343 }
344
345 public static Set<String> getAllMediaGalleryMimeTypes() {
346 return _instance._allMediaGalleryMimeTypes;
347 }
348
349 public static String getDDMStructureKey(DLFileEntryType dlFileEntryType) {
350 return getDDMStructureKey(dlFileEntryType.getUuid());
351 }
352
353 public static String getDDMStructureKey(String fileEntryTypeUuid) {
354 return "auto_" + fileEntryTypeUuid;
355 }
356
357 public static String getDeprecatedDDMStructureKey(
358 DLFileEntryType dlFileEntryType) {
359
360 return getDeprecatedDDMStructureKey(
361 dlFileEntryType.getFileEntryTypeId());
362 }
363
364 public static String getDeprecatedDDMStructureKey(long fileEntryTypeId) {
365 return "auto_" + fileEntryTypeId;
366 }
367
368 public static String getDividedPath(long id) {
369 StringBundler sb = new StringBundler(16);
370
371 long dividend = id;
372
373 while ((dividend / _DIVISOR) != 0) {
374 sb.append(StringPool.SLASH);
375 sb.append(dividend % _DIVISOR);
376
377 dividend = dividend / _DIVISOR;
378 }
379
380 sb.append(StringPool.SLASH);
381 sb.append(id);
382
383 return sb.toString();
384 }
385
386 public static String getDLControlPanelLink(
387 PortletRequest portletRequest, long folderId)
388 throws PortalException, SystemException {
389
390 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
391 WebKeys.THEME_DISPLAY);
392
393 PortletURL portletURL = PortletURLFactoryUtil.create(
394 portletRequest, PortletKeys.DOCUMENT_LIBRARY,
395 PortalUtil.getControlPanelPlid(themeDisplay.getCompanyId()),
396 PortletRequest.RENDER_PHASE);
397
398 portletURL.setParameter("struts_action", "/document_library/view");
399 portletURL.setParameter("folderId", String.valueOf(folderId));
400
401 return portletURL.toString();
402 }
403
404 public static String getFileEntryImage(
405 FileEntry fileEntry, ThemeDisplay themeDisplay) {
406
407 StringBundler sb = new StringBundler(5);
408
409 sb.append("<img style=\"border-width: 0; text-align: left;\" src=\"");
410 sb.append(themeDisplay.getPathThemeImages());
411 sb.append("/file_system/small/");
412 sb.append(fileEntry.getIcon());
413 sb.append(".png\">");
414
415 return sb.toString();
416 }
417
418 public static String getFileIcon(String extension) {
419 return _instance._getFileIcon(extension);
420 }
421
422 public static String getGenericName(String extension) {
423 return _instance._getGenericName(extension);
424 }
425
426 public static String[] getMediaGalleryMimeTypes(
427 PortletPreferences portletPreferences, PortletRequest portletRequest) {
428
429 String mimeTypes = PrefsParamUtil.getString(
430 portletPreferences, portletRequest, "mimeTypes",
431 _instance._allMediaGalleryMimeTypesString);
432
433 String[] mimeTypesArray = StringUtil.split(mimeTypes);
434
435 Arrays.sort(mimeTypesArray);
436
437 return mimeTypesArray;
438 }
439
440 public static String getPreviewURL(
441 FileEntry fileEntry, FileVersion fileVersion, ThemeDisplay themeDisplay,
442 String queryString) {
443
444 return getPreviewURL(
445 fileEntry, fileVersion, themeDisplay, queryString, true, true);
446 }
447
448
452 public static String getPreviewURL(
453 FileEntry fileEntry, FileVersion fileVersion, ThemeDisplay themeDisplay,
454 String queryString, boolean appendToken) {
455
456 return getPreviewURL(
457 fileEntry, fileVersion, themeDisplay, queryString, true, true);
458 }
459
460 public static String getPreviewURL(
461 FileEntry fileEntry, FileVersion fileVersion, ThemeDisplay themeDisplay,
462 String queryString, boolean appendVersion, boolean absoluteURL) {
463
464 StringBundler sb = new StringBundler(15);
465
466 if (themeDisplay != null) {
467 if (absoluteURL) {
468 sb.append(themeDisplay.getPortalURL());
469 }
470 }
471
472 sb.append(PortalUtil.getPathContext());
473 sb.append("/documents/");
474 sb.append(fileEntry.getRepositoryId());
475 sb.append(StringPool.SLASH);
476 sb.append(fileEntry.getFolderId());
477 sb.append(StringPool.SLASH);
478 sb.append(HttpUtil.encodeURL(HtmlUtil.unescape(fileEntry.getTitle())));
479 sb.append(StringPool.SLASH);
480 sb.append(fileEntry.getUuid());
481
482 if (appendVersion) {
483 sb.append("?version=");
484 sb.append(fileVersion.getVersion());
485 }
486
487 if (ImageProcessorUtil.isImageSupported(fileVersion)) {
488 if (appendVersion) {
489 sb.append("&t=");
490 }
491 else {
492 sb.append("?t=");
493 }
494
495 Date modifiedDate = fileVersion.getModifiedDate();
496
497 sb.append(modifiedDate.getTime());
498 }
499
500 sb.append(queryString);
501
502 if (themeDisplay != null) {
503 PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
504
505 if (portletDisplay != null) {
506 String portletId = portletDisplay.getId();
507
508 if (portletId.equals(PortletKeys.TRASH)) {
509 sb.append("&status=");
510 sb.append(WorkflowConstants.STATUS_IN_TRASH);
511 }
512 }
513 }
514
515 String previewURL = sb.toString();
516
517 if ((themeDisplay != null) && themeDisplay.isAddSessionIdToURL()) {
518 return PortalUtil.getURLWithSessionId(
519 previewURL, themeDisplay.getSessionId());
520 }
521
522 return previewURL;
523 }
524
525 public static OrderByComparator getRepositoryModelOrderByComparator(
526 String orderByCol, String orderByType) {
527
528 boolean orderByAsc = true;
529
530 if (orderByType.equals("desc")) {
531 orderByAsc = false;
532 }
533
534 OrderByComparator orderByComparator = null;
535
536 if (orderByCol.equals("creationDate")) {
537 orderByComparator = new RepositoryModelCreateDateComparator(
538 orderByAsc);
539 }
540 else if (orderByCol.equals("downloads")) {
541 orderByComparator = new RepositoryModelReadCountComparator(
542 orderByAsc);
543 }
544 else if (orderByCol.equals("modifiedDate")) {
545 orderByComparator = new RepositoryModelModifiedDateComparator(
546 orderByAsc);
547 }
548 else if (orderByCol.equals("size")) {
549 orderByComparator = new RepositoryModelSizeComparator(orderByAsc);
550 }
551 else {
552 orderByComparator = new RepositoryModelNameComparator(orderByAsc);
553 }
554
555 return orderByComparator;
556 }
557
558 public static String getTempFileId(long id, String version) {
559 return getTempFileId(id, version, null);
560 }
561
562 public static String getTempFileId(
563 long id, String version, String languageId) {
564
565 if (Validator.isNull(languageId)) {
566 return String.valueOf(id).concat(StringPool.PERIOD).concat(version);
567 }
568
569 StringBundler sb = new StringBundler(5);
570
571 sb.append(id);
572 sb.append(StringPool.PERIOD);
573 sb.append(version);
574 sb.append(StringPool.PERIOD);
575 sb.append(languageId);
576
577 return sb.toString();
578 }
579
580 public static String getThumbnailSrc(
581 FileEntry fileEntry, DLFileShortcut dlFileShortcut,
582 ThemeDisplay themeDisplay)
583 throws Exception {
584
585 return getThumbnailSrc(
586 fileEntry, fileEntry.getFileVersion(), dlFileShortcut,
587 themeDisplay);
588 }
589
590 public static String getThumbnailSrc(
591 FileEntry fileEntry, FileVersion fileVersion,
592 DLFileShortcut dlFileShortcut, ThemeDisplay themeDisplay)
593 throws Exception {
594
595 StringBundler sb = new StringBundler(4);
596
597 sb.append(themeDisplay.getPathThemeImages());
598 sb.append("/file_system/large/");
599 sb.append(DLUtil.getGenericName(fileEntry.getExtension()));
600 sb.append(".png");
601
602 String thumbnailSrc = sb.toString();
603
604 String thumbnailQueryString = null;
605
606 if (GetterUtil.getBoolean(
607 PropsUtil.get(PropsKeys.DL_FILE_ENTRY_THUMBNAIL_ENABLED))) {
608
609 if (ImageProcessorUtil.hasImages(fileVersion)) {
610 thumbnailQueryString = "&imageThumbnail=1";
611 }
612 else if (PDFProcessorUtil.hasImages(fileVersion)) {
613 thumbnailQueryString = "&documentThumbnail=1";
614 }
615 else if (VideoProcessorUtil.hasVideo(fileVersion)) {
616 thumbnailQueryString = "&videoThumbnail=1";
617 }
618 }
619
620 if (Validator.isNotNull(thumbnailQueryString)) {
621 thumbnailSrc = getPreviewURL(
622 fileEntry, fileVersion, themeDisplay, thumbnailQueryString,
623 true, true);
624 }
625
626 return thumbnailSrc;
627 }
628
629 public static String getThumbnailStyle() throws Exception {
630 return getThumbnailStyle(true, 0);
631 }
632
633 public static String getThumbnailStyle(boolean max, int margin)
634 throws Exception {
635
636 StringBundler sb = new StringBundler(5);
637
638 if (max) {
639 sb.append("max-height: ");
640 }
641 else {
642 sb.append("height: ");
643 }
644
645 sb.append(
646 PrefsPropsUtil.getLong(
647 PropsKeys.DL_FILE_ENTRY_THUMBNAIL_MAX_HEIGHT) + 2 * margin);
648
649 if (max) {
650 sb.append("px; max-width: ");
651 }
652 else {
653 sb.append("px; width: ");
654 }
655
656 sb.append(
657 PrefsPropsUtil.getLong(
658 PropsKeys.DL_FILE_ENTRY_THUMBNAIL_MAX_WIDTH) + 2 * margin);
659 sb.append("px;");
660
661 return sb.toString();
662 }
663
664 public static String getTitleWithExtension(FileEntry fileEntry) {
665 String title = fileEntry.getTitle();
666 String extension = fileEntry.getExtension();
667
668 return getTitleWithExtension(title, extension);
669 }
670
671 public static String getTitleWithExtension(String title, String extension) {
672 if (Validator.isNotNull(extension)) {
673 String periodAndExtension = StringPool.PERIOD + extension;
674
675 if (!title.endsWith(periodAndExtension)) {
676 title += periodAndExtension;
677 }
678 }
679
680 return title;
681 }
682
683 public static String getWebDavURL(
684 ThemeDisplay themeDisplay, Folder folder, FileEntry fileEntry)
685 throws PortalException, SystemException {
686
687 return getWebDavURL(themeDisplay, folder, fileEntry, false);
688 }
689
690 public static String getWebDavURL(
691 ThemeDisplay themeDisplay, Folder folder, FileEntry fileEntry,
692 boolean manualCheckInRequired)
693 throws PortalException, SystemException {
694
695 StringBuilder sb = new StringBuilder();
696
697 if (folder != null) {
698 Folder curFolder = folder;
699
700 while (true) {
701 sb.insert(0, HttpUtil.encodeURL(curFolder.getName(), true));
702 sb.insert(0, StringPool.SLASH);
703
704 if (curFolder.getParentFolderId() ==
705 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
706
707 break;
708 }
709 else {
710 curFolder = DLAppLocalServiceUtil.getFolder(
711 curFolder.getParentFolderId());
712 }
713 }
714 }
715
716 if (fileEntry != null) {
717 sb.append(StringPool.SLASH);
718 sb.append(HttpUtil.encodeURL(fileEntry.getTitle(), true));
719 }
720
721 Group group = themeDisplay.getScopeGroup();
722
723 StringBundler webDavURL = new StringBundler(7);
724
725 webDavURL.append(themeDisplay.getPortalURL());
726 webDavURL.append(themeDisplay.getPathContext());
727 webDavURL.append("/webdav");
728
729 if (manualCheckInRequired) {
730 webDavURL.append(MANUAL_CHECK_IN_REQUIRED_PATH);
731 }
732
733 webDavURL.append(group.getFriendlyURL());
734 webDavURL.append("/document_library");
735 webDavURL.append(sb.toString());
736
737 return webDavURL.toString();
738 }
739
740 public static boolean hasWorkflowDefinitionLink(
741 long companyId, long groupId, long folderId, long fileEntryTypeId)
742 throws Exception {
743
744 while (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
745 DLFolder dlFolder = DLFolderLocalServiceUtil.fetchDLFolder(
746 folderId);
747
748 if (dlFolder == null) {
749 return false;
750 }
751
752 if (dlFolder.isOverrideFileEntryTypes()) {
753 break;
754 }
755
756 folderId = dlFolder.getParentFolderId();
757 }
758
759 if (WorkflowDefinitionLinkLocalServiceUtil.hasWorkflowDefinitionLink(
760 companyId, groupId, DLFolderConstants.getClassName(), folderId,
761 fileEntryTypeId) ||
762 WorkflowDefinitionLinkLocalServiceUtil.hasWorkflowDefinitionLink(
763 companyId, groupId, DLFolderConstants.getClassName(), folderId,
764 DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_ALL)) {
765
766 return true;
767 }
768
769 return false;
770 }
771
772 public static boolean isAutoGeneratedDLFileEntryTypeDDMStructureKey(
773 String ddmStructureKey) {
774
775 if (ddmStructureKey.startsWith("auto_")) {
776 return true;
777 }
778
779 return false;
780 }
781
782 private static long _getDefaultFolderId(HttpServletRequest request)
783 throws Exception {
784
785 PortletPreferences portletPreferences =
786 PortletPreferencesFactoryUtil.getPortletPreferences(
787 request, PortalUtil.getPortletId(request));
788
789 return GetterUtil.getLong(
790 portletPreferences.getValue(
791 "rootFolderId",
792 String.valueOf(DLFolderConstants.DEFAULT_PARENT_FOLDER_ID)));
793 }
794
795 private DLUtil() {
796 _allMediaGalleryMimeTypes.addAll(
797 SetUtil.fromArray(
798 PropsUtil.getArray(
799 PropsKeys.DL_FILE_ENTRY_PREVIEW_AUDIO_MIME_TYPES)));
800 _allMediaGalleryMimeTypes.addAll(
801 SetUtil.fromArray(
802 PropsUtil.getArray(
803 PropsKeys.DL_FILE_ENTRY_PREVIEW_VIDEO_MIME_TYPES)));
804 _allMediaGalleryMimeTypes.addAll(
805 SetUtil.fromArray(
806 PropsUtil.getArray(
807 PropsKeys.DL_FILE_ENTRY_PREVIEW_IMAGE_MIME_TYPES)));
808
809 _allMediaGalleryMimeTypesString = StringUtil.merge(
810 _allMediaGalleryMimeTypes);
811
812 String[] fileIcons = null;
813
814 try {
815 fileIcons = PrefsPropsUtil.getStringArray(
816 PropsKeys.DL_FILE_ICONS, StringPool.COMMA);
817 }
818 catch (Exception e) {
819 _log.error(e, e);
820
821 fileIcons = new String[] {StringPool.BLANK};
822 }
823
824 for (int i = 0; i < fileIcons.length; i++) {
825
826
827
828 if (!StringPool.STAR.equals(fileIcons[i])) {
829
830
831
832 String extension = fileIcons[i];
833 extension = extension.substring(1);
834
835 _fileIcons.add(extension);
836 }
837 }
838
839 String[] genericNames = PropsUtil.getArray(
840 PropsKeys.DL_FILE_GENERIC_NAMES);
841
842 for (String genericName : genericNames) {
843 _populateGenericNamesMap(genericName);
844 }
845 }
846
847 private String _getFileIcon(String extension) {
848 if (!_fileIcons.contains(extension)) {
849 extension = _DEFAULT_FILE_ICON;
850 }
851
852 return extension;
853 }
854
855 private String _getGenericName(String extension) {
856 String genericName = _genericNames.get(extension);
857
858 if (genericName == null) {
859 genericName = _DEFAULT_GENERIC_NAME;
860 }
861
862 return genericName;
863 }
864
865 private void _populateGenericNamesMap(String genericName) {
866 String[] extensions = PropsUtil.getArray(
867 PropsKeys.DL_FILE_GENERIC_EXTENSIONS, new Filter(genericName));
868
869 for (String extension : extensions) {
870 _genericNames.put(extension, genericName);
871 }
872 }
873
874 private static final String _DEFAULT_FILE_ICON = "page";
875
876 private static final String _DEFAULT_GENERIC_NAME = "default";
877
878 private static final long _DIVISOR = 256;;
879
880 private static Log _log = LogFactoryUtil.getLog(DLUtil.class);
881
882 private static DLUtil _instance = new DLUtil();
883
884 private Set<String> _allMediaGalleryMimeTypes = new TreeSet<String>();
885 private String _allMediaGalleryMimeTypesString;
886 private Set<String> _fileIcons = new HashSet<String>();
887 private Map<String, String> _genericNames = new HashMap<String, String>();
888
889 }