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