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