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