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.language.LanguageUtil;
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.FileShortcut;
026 import com.liferay.portal.kernel.repository.model.FileVersion;
027 import com.liferay.portal.kernel.repository.model.Folder;
028 import com.liferay.portal.kernel.search.Document;
029 import com.liferay.portal.kernel.search.Field;
030 import com.liferay.portal.kernel.search.Hits;
031 import com.liferay.portal.kernel.util.ArrayUtil;
032 import com.liferay.portal.kernel.util.Constants;
033 import com.liferay.portal.kernel.util.FileUtil;
034 import com.liferay.portal.kernel.util.GetterUtil;
035 import com.liferay.portal.kernel.util.HtmlUtil;
036 import com.liferay.portal.kernel.util.HttpUtil;
037 import com.liferay.portal.kernel.util.OrderByComparator;
038 import com.liferay.portal.kernel.util.ParamUtil;
039 import com.liferay.portal.kernel.util.PrefsPropsUtil;
040 import com.liferay.portal.kernel.util.PropsKeys;
041 import com.liferay.portal.kernel.util.PropsUtil;
042 import com.liferay.portal.kernel.util.SetUtil;
043 import com.liferay.portal.kernel.util.StringBundler;
044 import com.liferay.portal.kernel.util.StringPool;
045 import com.liferay.portal.kernel.util.StringUtil;
046 import com.liferay.portal.kernel.util.Validator;
047 import com.liferay.portal.kernel.util.WebKeys;
048 import com.liferay.portal.kernel.workflow.WorkflowConstants;
049 import com.liferay.portal.kernel.workflow.WorkflowHandlerRegistryUtil;
050 import com.liferay.portal.model.Company;
051 import com.liferay.portal.model.Group;
052 import com.liferay.portal.model.LayoutConstants;
053 import com.liferay.portal.model.Subscription;
054 import com.liferay.portal.service.GroupLocalServiceUtil;
055 import com.liferay.portal.service.ServiceContext;
056 import com.liferay.portal.service.SubscriptionLocalServiceUtil;
057 import com.liferay.portal.service.WorkflowDefinitionLinkLocalServiceUtil;
058 import com.liferay.portal.theme.PortletDisplay;
059 import com.liferay.portal.theme.ThemeDisplay;
060 import com.liferay.portal.util.PortalUtil;
061 import com.liferay.portal.util.PortletKeys;
062 import com.liferay.portal.util.PropsValues;
063 import com.liferay.portlet.PortletURLFactoryUtil;
064 import com.liferay.portlet.documentlibrary.DLPortletInstanceSettings;
065 import com.liferay.portlet.documentlibrary.action.EditFileEntryAction;
066 import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;
067 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
068 import com.liferay.portlet.documentlibrary.model.DLFileEntryTypeConstants;
069 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
070 import com.liferay.portlet.documentlibrary.model.DLFileVersion;
071 import com.liferay.portlet.documentlibrary.model.DLFolder;
072 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
073 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
074 import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
075 import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelCreateDateComparator;
076 import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelModifiedDateComparator;
077 import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelReadCountComparator;
078 import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelSizeComparator;
079 import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelTitleComparator;
080 import com.liferay.portlet.trash.util.TrashUtil;
081
082 import java.io.Serializable;
083
084 import java.util.ArrayList;
085 import java.util.Collections;
086 import java.util.Date;
087 import java.util.HashMap;
088 import java.util.HashSet;
089 import java.util.LinkedHashMap;
090 import java.util.List;
091 import java.util.Map;
092 import java.util.Set;
093 import java.util.TreeSet;
094
095 import javax.portlet.PortletRequest;
096 import javax.portlet.PortletURL;
097 import javax.portlet.RenderResponse;
098
099 import javax.servlet.http.HttpServletRequest;
100
101
105 public class DLImpl implements DL {
106
107 @Override
108 public 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 FileEntry unescapedFileEntry = fileEntry.toUnescapedModel();
124
125 portletURL.setParameter(
126 "struts_action", "/document_library/view_file_entry");
127 portletURL.setParameter(
128 "fileEntryId", String.valueOf(fileEntry.getFileEntryId()));
129
130 PortalUtil.addPortletBreadcrumbEntry(
131 request, unescapedFileEntry.getTitle(), portletURL.toString());
132 }
133
134 @Override
135 public void addPortletBreadcrumbEntries(
136 FileShortcut fileShortcut, HttpServletRequest request,
137 RenderResponse renderResponse)
138 throws Exception {
139
140 Folder folder = fileShortcut.getFolder();
141
142 if (folder.getFolderId() !=
143 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
144
145 addPortletBreadcrumbEntries(folder, request, renderResponse);
146 }
147
148 FileShortcut unescapedDLFileShortcut = fileShortcut.toUnescapedModel();
149
150 PortletURL portletURL = renderResponse.createRenderURL();
151
152 portletURL.setParameter(
153 "struts_action", "/document_library/view_file_entry");
154 portletURL.setParameter(
155 "fileEntryId", String.valueOf(fileShortcut.getToFileEntryId()));
156
157 PortalUtil.addPortletBreadcrumbEntry(
158 request, unescapedDLFileShortcut.getToTitle(),
159 portletURL.toString());
160 }
161
162 @Override
163 public void addPortletBreadcrumbEntries(
164 Folder folder, HttpServletRequest request,
165 LiferayPortletResponse liferayPortletResponse)
166 throws Exception {
167
168 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
169 WebKeys.THEME_DISPLAY);
170
171 PortletURL portletURL = liferayPortletResponse.createRenderURL();
172
173 portletURL.setParameter("struts_action", "/document_library/view");
174
175 Map<String, Object> data = new HashMap<>();
176
177 data.put("direction-right", Boolean.TRUE.toString());
178
179 PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
180
181 DLPortletInstanceSettings dlPortletInstanceSettings =
182 DLPortletInstanceSettings.getInstance(
183 themeDisplay.getLayout(), portletDisplay.getId());
184
185 data.put("folder-id", dlPortletInstanceSettings.getDefaultFolderId());
186
187 PortalUtil.addPortletBreadcrumbEntry(
188 request, themeDisplay.translate("home"), portletURL.toString(),
189 data);
190
191 addPortletBreadcrumbEntries(folder, request, portletURL);
192 }
193
194 @Override
195 public void addPortletBreadcrumbEntries(
196 Folder folder, HttpServletRequest request, PortletURL portletURL)
197 throws Exception {
198
199 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
200 WebKeys.THEME_DISPLAY);
201
202 PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
203
204 long defaultFolderId = DLFolderConstants.DEFAULT_PARENT_FOLDER_ID;
205
206 boolean ignoreRootFolder = ParamUtil.getBoolean(
207 request, "ignoreRootFolder");
208
209 if (!ignoreRootFolder) {
210 DLPortletInstanceSettings dlPortletInstanceSettings =
211 DLPortletInstanceSettings.getInstance(
212 themeDisplay.getLayout(), portletDisplay.getId());
213
214 defaultFolderId = dlPortletInstanceSettings.getDefaultFolderId();
215 }
216
217 List<Folder> ancestorFolders = Collections.emptyList();
218
219 if ((folder != null) && (folder.getFolderId() != defaultFolderId)) {
220 ancestorFolders = folder.getAncestors();
221
222 int indexOfRootFolder = -1;
223
224 for (int i = 0; i < ancestorFolders.size(); i++) {
225 Folder ancestorFolder = ancestorFolders.get(i);
226
227 if (defaultFolderId == ancestorFolder.getFolderId()) {
228 indexOfRootFolder = i;
229 }
230 }
231
232 if (indexOfRootFolder > -1) {
233 ancestorFolders = ancestorFolders.subList(0, indexOfRootFolder);
234 }
235 }
236
237 Collections.reverse(ancestorFolders);
238
239 for (Folder ancestorFolder : ancestorFolders) {
240 portletURL.setParameter(
241 "folderId", String.valueOf(ancestorFolder.getFolderId()));
242
243 Map<String, Object> data = new HashMap<>();
244
245 data.put("direction-right", Boolean.TRUE.toString());
246 data.put("folder-id", ancestorFolder.getFolderId());
247
248 PortalUtil.addPortletBreadcrumbEntry(
249 request, ancestorFolder.getName(), portletURL.toString(), data);
250 }
251
252 long folderId = DLFolderConstants.DEFAULT_PARENT_FOLDER_ID;
253
254 if (folder != null) {
255 folderId = folder.getFolderId();
256 }
257
258 portletURL.setParameter("folderId", String.valueOf(folderId));
259
260 if ((folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) &&
261 (folderId != defaultFolderId)) {
262
263 Folder unescapedFolder = folder.toUnescapedModel();
264
265 Map<String, Object> data = new HashMap<>();
266
267 data.put("direction-right", Boolean.TRUE.toString());
268 data.put("folder-id", folderId);
269
270 PortalUtil.addPortletBreadcrumbEntry(
271 request, unescapedFolder.getName(), portletURL.toString(),
272 data);
273 }
274 }
275
276 @Override
277 public void addPortletBreadcrumbEntries(
278 Folder folder, HttpServletRequest request,
279 RenderResponse renderResponse)
280 throws Exception {
281
282 String strutsAction = ParamUtil.getString(request, "struts_action");
283
284 long groupId = ParamUtil.getLong(request, "groupId");
285 boolean ignoreRootFolder = ParamUtil.getBoolean(
286 request, "ignoreRootFolder");
287
288 PortletURL portletURL = renderResponse.createRenderURL();
289
290 if (strutsAction.equals("/document_library/select_file_entry") ||
291 strutsAction.equals("/document_library/select_folder") ||
292 strutsAction.equals("/document_library_display/select_folder") ||
293 strutsAction.equals("/image_gallery_display/select_folder") ||
294 strutsAction.equals("/item_selector/view")) {
295
296 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
297 WebKeys.THEME_DISPLAY);
298
299 portletURL.setParameter("struts_action", strutsAction);
300 portletURL.setParameter("groupId", String.valueOf(groupId));
301 portletURL.setParameter(
302 "ignoreRootFolder", String.valueOf(ignoreRootFolder));
303 portletURL.setWindowState(LiferayWindowState.POP_UP);
304
305 PortalUtil.addPortletBreadcrumbEntry(
306 request, themeDisplay.translate("home"), portletURL.toString());
307 }
308 else {
309 portletURL.setParameter("struts_action", "/document_library/view");
310 }
311
312 addPortletBreadcrumbEntries(folder, request, portletURL);
313 }
314
315 @Override
316 public void addPortletBreadcrumbEntries(
317 long folderId, HttpServletRequest request,
318 RenderResponse renderResponse)
319 throws Exception {
320
321 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
322 Folder folder = DLAppLocalServiceUtil.getFolder(folderId);
323
324 if (folder.getFolderId() !=
325 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
326
327 addPortletBreadcrumbEntries(folder, request, renderResponse);
328 }
329 }
330 }
331
332 @Override
333 public int compareVersions(String version1, String version2) {
334 int[] splitVersion1 = StringUtil.split(version1, StringPool.PERIOD, 0);
335 int[] splitVersion2 = StringUtil.split(version2, StringPool.PERIOD, 0);
336
337 if ((splitVersion1.length != 2) && (splitVersion2.length != 2)) {
338 return 0;
339 }
340 else if (splitVersion1.length != 2) {
341 return -1;
342 }
343 else if (splitVersion2.length != 2) {
344 return 1;
345 }
346
347 if (splitVersion1[0] > splitVersion2[0]) {
348 return 1;
349 }
350 else if (splitVersion1[0] < splitVersion2[0]) {
351 return -1;
352 }
353 else if (splitVersion1[1] > splitVersion2[1]) {
354 return 1;
355 }
356 else if (splitVersion1[1] < splitVersion2[1]) {
357 return -1;
358 }
359
360 return 0;
361 }
362
363 @Override
364 public String getAbsolutePath(PortletRequest portletRequest, long folderId)
365 throws PortalException {
366
367 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
368 WebKeys.THEME_DISPLAY);
369
370 if (folderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
371 return themeDisplay.translate("home");
372 }
373
374 Folder folder = DLAppLocalServiceUtil.getFolder(folderId);
375
376 List<Folder> folders = folder.getAncestors();
377
378 Collections.reverse(folders);
379
380 StringBundler sb = new StringBundler((folders.size() * 3) + 5);
381
382 sb.append(themeDisplay.translate("home"));
383 sb.append(StringPool.SPACE);
384
385 for (Folder curFolder : folders) {
386 sb.append(StringPool.RAQUO_CHAR);
387 sb.append(StringPool.SPACE);
388 sb.append(curFolder.getName());
389 }
390
391 sb.append(StringPool.RAQUO_CHAR);
392 sb.append(StringPool.SPACE);
393 sb.append(folder.getName());
394
395 return sb.toString();
396 }
397
398 @Override
399 public Set<String> getAllMediaGalleryMimeTypes() {
400 return _allMediaGalleryMimeTypes;
401 }
402
403 @Override
404 public String getDDMStructureKey(DLFileEntryType dlFileEntryType) {
405 return getDDMStructureKey(dlFileEntryType.getUuid());
406 }
407
408 @Override
409 public String getDDMStructureKey(String fileEntryTypeUuid) {
410 return _STRUCTURE_KEY_PREFIX +
411 StringUtil.toUpperCase(fileEntryTypeUuid);
412 }
413
414 @Override
415 public String getDeprecatedDDMStructureKey(
416 DLFileEntryType dlFileEntryType) {
417
418 return getDeprecatedDDMStructureKey(
419 dlFileEntryType.getFileEntryTypeId());
420 }
421
422 @Override
423 public String getDeprecatedDDMStructureKey(long fileEntryTypeId) {
424 return _STRUCTURE_KEY_PREFIX + fileEntryTypeId;
425 }
426
427 @Override
428 public String getDividedPath(long id) {
429 StringBundler sb = new StringBundler(16);
430
431 long dividend = id;
432
433 while ((dividend / _DIVISOR) != 0) {
434 sb.append(StringPool.SLASH);
435 sb.append(dividend % _DIVISOR);
436
437 dividend = dividend / _DIVISOR;
438 }
439
440 sb.append(StringPool.SLASH);
441 sb.append(id);
442
443 return sb.toString();
444 }
445
446 @Override
447 public String getDLFileEntryControlPanelLink(
448 PortletRequest portletRequest, long fileEntryId)
449 throws PortalException {
450
451 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
452 WebKeys.THEME_DISPLAY);
453
454 PortletURL portletURL = PortletURLFactoryUtil.create(
455 portletRequest, PortletKeys.DOCUMENT_LIBRARY_ADMIN,
456 PortalUtil.getControlPanelPlid(themeDisplay.getCompanyId()),
457 PortletRequest.RENDER_PHASE);
458
459 portletURL.setParameter(
460 "struts_action", "/document_library/view_file_entry");
461 portletURL.setParameter("fileEntryId", String.valueOf(fileEntryId));
462
463 return portletURL.toString();
464 }
465
466 @Override
467 public String getDLFolderControlPanelLink(
468 PortletRequest portletRequest, long folderId)
469 throws PortalException {
470
471 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
472 WebKeys.THEME_DISPLAY);
473
474 PortletURL portletURL = PortletURLFactoryUtil.create(
475 portletRequest, PortletKeys.DOCUMENT_LIBRARY_ADMIN,
476 PortalUtil.getControlPanelPlid(themeDisplay.getCompanyId()),
477 PortletRequest.RENDER_PHASE);
478
479 portletURL.setParameter("struts_action", "/document_library/view");
480 portletURL.setParameter("folderId", String.valueOf(folderId));
481
482 return portletURL.toString();
483 }
484
485 @Override
486 public String getDownloadURL(
487 FileEntry fileEntry, FileVersion fileVersion, ThemeDisplay themeDisplay,
488 String queryString) {
489
490 return getDownloadURL(
491 fileEntry, fileVersion, themeDisplay, queryString, true, true);
492 }
493
494 @Override
495 public String getDownloadURL(
496 FileEntry fileEntry, FileVersion fileVersion, ThemeDisplay themeDisplay,
497 String queryString, boolean appendVersion, boolean absoluteURL) {
498
499 String previewURL = getPreviewURL(
500 fileEntry, fileVersion, themeDisplay, queryString, appendVersion,
501 absoluteURL);
502
503 return HttpUtil.addParameter(previewURL, "download", true);
504 }
505
506 @Override
507 public Map<String, String> getEmailDefinitionTerms(
508 PortletRequest portletRequest, String emailFromAddress,
509 String emailFromName) {
510
511 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
512 WebKeys.THEME_DISPLAY);
513
514 Map<String, String> definitionTerms = new LinkedHashMap<>();
515
516 definitionTerms.put(
517 "[$COMPANY_ID$]",
518 LanguageUtil.get(
519 themeDisplay.getLocale(),
520 "the-company-id-associated-with-the-document"));
521 definitionTerms.put(
522 "[$COMPANY_MX$]",
523 LanguageUtil.get(
524 themeDisplay.getLocale(),
525 "the-company-mx-associated-with-the-document"));
526 definitionTerms.put(
527 "[$COMPANY_NAME$]",
528 LanguageUtil.get(
529 themeDisplay.getLocale(),
530 "the-company-name-associated-with-the-document"));
531 definitionTerms.put(
532 "[$DOCUMENT_TITLE$]",
533 LanguageUtil.get(themeDisplay.getLocale(), "the-document-title"));
534 definitionTerms.put(
535 "[$DOCUMENT_TYPE$]",
536 LanguageUtil.get(themeDisplay.getLocale(), "the-document-type"));
537 definitionTerms.put(
538 "[$DOCUMENT_URL$]",
539 LanguageUtil.get(themeDisplay.getLocale(), "the-document-url"));
540 definitionTerms.put(
541 "[$DOCUMENT_USER_ADDRESS$]",
542 LanguageUtil.get(
543 themeDisplay.getLocale(),
544 "the-email-address-of-the-user-who-added-the-document"));
545 definitionTerms.put(
546 "[$DOCUMENT_USER_NAME$]",
547 LanguageUtil.get(
548 themeDisplay.getLocale(), "the-user-who-added-the-document"));
549 definitionTerms.put(
550 "[$FOLDER_NAME$]",
551 LanguageUtil.get(
552 themeDisplay.getLocale(),
553 "the-folder-in-which-the-document-has-been-added"));
554 definitionTerms.put(
555 "[$FROM_ADDRESS$]", HtmlUtil.escape(emailFromAddress));
556 definitionTerms.put("[$FROM_NAME$]", HtmlUtil.escape(emailFromName));
557
558 Company company = themeDisplay.getCompany();
559
560 definitionTerms.put("[$PORTAL_URL$]", company.getVirtualHostname());
561
562 PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
563
564 definitionTerms.put(
565 "[$PORTLET_NAME$]", HtmlUtil.escape(portletDisplay.getTitle()));
566
567 definitionTerms.put(
568 "[$SITE_NAME$]",
569 LanguageUtil.get(
570 themeDisplay.getLocale(),
571 "the-site-name-associated-with-the-document"));
572 definitionTerms.put(
573 "[$TO_ADDRESS$]",
574 LanguageUtil.get(
575 themeDisplay.getLocale(),
576 "the-address-of-the-email-recipient"));
577 definitionTerms.put(
578 "[$TO_NAME$]",
579 LanguageUtil.get(
580 themeDisplay.getLocale(), "the-name-of-the-email-recipient"));
581
582 return definitionTerms;
583 }
584
585 @Override
586 public Map<String, String> getEmailFromDefinitionTerms(
587 PortletRequest portletRequest, String emailFromAddress,
588 String emailFromName) {
589
590 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
591 WebKeys.THEME_DISPLAY);
592
593 Map<String, String> definitionTerms = new LinkedHashMap<>();
594
595 definitionTerms.put(
596 "[$COMPANY_ID$]",
597 LanguageUtil.get(
598 themeDisplay.getLocale(),
599 "the-company-id-associated-with-the-document"));
600 definitionTerms.put(
601 "[$COMPANY_MX$]",
602 LanguageUtil.get(
603 themeDisplay.getLocale(),
604 "the-company-mx-associated-with-the-document"));
605 definitionTerms.put(
606 "[$COMPANY_NAME$]",
607 LanguageUtil.get(
608 themeDisplay.getLocale(),
609 "the-company-name-associated-with-the-document"));
610 definitionTerms.put(
611 "[$DOCUMENT_STATUS_BY_USER_NAME$]",
612 LanguageUtil.get(
613 themeDisplay.getLocale(), "the-user-who-updated-the-document"));
614 definitionTerms.put(
615 "[$DOCUMENT_USER_ADDRESS$]",
616 LanguageUtil.get(
617 themeDisplay.getLocale(),
618 "the-email-address-of-the-user-who-added-the-document"));
619 definitionTerms.put(
620 "[$DOCUMENT_USER_NAME$]",
621 LanguageUtil.get(
622 themeDisplay.getLocale(), "the-user-who-added-the-document"));
623
624 PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
625
626 definitionTerms.put(
627 "[$PORTLET_NAME$]", HtmlUtil.escape(portletDisplay.getTitle()));
628
629 definitionTerms.put(
630 "[$SITE_NAME$]",
631 LanguageUtil.get(
632 themeDisplay.getLocale(),
633 "the-site-name-associated-with-the-document"));
634
635 return definitionTerms;
636 }
637
638 @Override
639 public List<FileEntry> getFileEntries(Hits hits) {
640 List<FileEntry> entries = new ArrayList<>();
641
642 for (Document document : hits.getDocs()) {
643 long fileEntryId = GetterUtil.getLong(
644 document.get(Field.ENTRY_CLASS_PK));
645
646 try {
647 FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
648 fileEntryId);
649
650 entries.add(fileEntry);
651 }
652 catch (Exception e) {
653 if (_log.isWarnEnabled()) {
654 _log.warn(
655 "Documents and Media search index is stale and " +
656 "contains file entry " + fileEntryId);
657 }
658 }
659 }
660
661 return entries;
662 }
663
664 @Override
665 public String getFileEntryImage(
666 FileEntry fileEntry, ThemeDisplay themeDisplay) {
667
668 StringBundler sb = new StringBundler(5);
669
670 sb.append("<img src=\"");
671 sb.append(themeDisplay.getPathThemeImages());
672 sb.append("/file_system/small/");
673 sb.append(fileEntry.getIcon());
674 sb.append(".png\" style=\"border-width: 0; text-align: left;\">");
675
676 return sb.toString();
677 }
678
679 @Override
680 public Set<Long> getFileEntryTypeSubscriptionClassPKs(long userId) {
681 List<Subscription> subscriptions =
682 SubscriptionLocalServiceUtil.getUserSubscriptions(
683 userId, DLFileEntryType.class.getName());
684
685 Set<Long> classPKs = new HashSet<>(subscriptions.size());
686
687 for (Subscription subscription : subscriptions) {
688 classPKs.add(subscription.getClassPK());
689 }
690
691 return classPKs;
692 }
693
694 @Override
695 public String getFileIcon(String extension) {
696 if (!_fileIcons.contains(extension)) {
697 extension = _DEFAULT_FILE_ICON;
698 }
699
700 return extension;
701 }
702
703 @Override
704 public String getFileIconCssClass(String extension) {
705 return "icon-file-alt";
706 }
707
708 @Override
709 public String getFileName(
710 long groupId, long folderId, String tempFileName) {
711
712 String extension = FileUtil.getExtension(tempFileName);
713
714 int pos = tempFileName.lastIndexOf(
715 EditFileEntryAction.TEMP_RANDOM_SUFFIX);
716
717 if (pos != -1) {
718 tempFileName = tempFileName.substring(0, pos);
719
720 if (Validator.isNotNull(extension)) {
721 tempFileName = tempFileName + StringPool.PERIOD + extension;
722 }
723 }
724
725 while (true) {
726 try {
727 DLAppLocalServiceUtil.getFileEntry(
728 groupId, folderId, tempFileName);
729
730 StringBundler sb = new StringBundler(5);
731
732 sb.append(FileUtil.stripExtension(tempFileName));
733 sb.append(StringPool.DASH);
734 sb.append(StringUtil.randomString());
735
736 if (Validator.isNotNull(extension)) {
737 sb.append(StringPool.PERIOD);
738 sb.append(extension);
739 }
740
741 tempFileName = sb.toString();
742 }
743 catch (Exception e) {
744 break;
745 }
746 }
747
748 return tempFileName;
749 }
750
751 @Override
752 public String getGenericName(String extension) {
753 String genericName = _genericNames.get(extension);
754
755 if (genericName == null) {
756 genericName = _DEFAULT_GENERIC_NAME;
757 }
758
759 return genericName;
760 }
761
762 @Override
763 public String getImagePreviewURL(
764 FileEntry fileEntry, FileVersion fileVersion,
765 ThemeDisplay themeDisplay)
766 throws Exception {
767
768 String previewQueryString = null;
769
770 if (PropsValues.DL_FILE_ENTRY_THUMBNAIL_ENABLED) {
771 if (ImageProcessorUtil.hasImages(fileVersion)) {
772 previewQueryString = "&imagePreview=1";
773 }
774 else if (PDFProcessorUtil.hasImages(fileVersion)) {
775 previewQueryString = "&previewFileIndex=1";
776 }
777 else if (VideoProcessorUtil.hasVideo(fileVersion)) {
778 previewQueryString = "&videoThumbnail=1";
779 }
780 }
781
782 return getImageSrc(
783 fileEntry, fileVersion, themeDisplay, previewQueryString);
784 }
785
786 @Override
787 public String getImagePreviewURL(
788 FileEntry fileEntry, ThemeDisplay themeDisplay)
789 throws Exception {
790
791 return getImagePreviewURL(
792 fileEntry, fileEntry.getFileVersion(), themeDisplay);
793 }
794
795 @Override
796 public String getPreviewURL(
797 FileEntry fileEntry, FileVersion fileVersion, ThemeDisplay themeDisplay,
798 String queryString) {
799
800 return getPreviewURL(
801 fileEntry, fileVersion, themeDisplay, queryString, true, true);
802 }
803
804
808 @Deprecated
809 @Override
810 public String getPreviewURL(
811 FileEntry fileEntry, FileVersion fileVersion, ThemeDisplay themeDisplay,
812 String queryString, boolean appendToken) {
813
814 return getPreviewURL(
815 fileEntry, fileVersion, themeDisplay, queryString, true, true);
816 }
817
818 @Override
819 public String getPreviewURL(
820 FileEntry fileEntry, FileVersion fileVersion, ThemeDisplay themeDisplay,
821 String queryString, boolean appendVersion, boolean absoluteURL) {
822
823 StringBundler sb = new StringBundler(17);
824
825 if (themeDisplay != null) {
826 if (absoluteURL) {
827 sb.append(themeDisplay.getPortalURL());
828 }
829 }
830
831 sb.append(PortalUtil.getPathContext());
832 sb.append("/documents/");
833 sb.append(fileEntry.getRepositoryId());
834 sb.append(StringPool.SLASH);
835 sb.append(fileEntry.getFolderId());
836 sb.append(StringPool.SLASH);
837
838 String fileName = fileEntry.getFileName();
839
840 if (fileEntry.isInTrash()) {
841 fileName = TrashUtil.getOriginalTitle(fileEntry.getFileName());
842 }
843
844 sb.append(HttpUtil.encodeURL(HtmlUtil.unescape(fileName)));
845
846 sb.append(StringPool.SLASH);
847 sb.append(HttpUtil.encodeURL(fileEntry.getUuid()));
848
849 if (appendVersion) {
850 sb.append("?version=");
851 sb.append(fileVersion.getVersion());
852 }
853
854 if (ImageProcessorUtil.isImageSupported(fileVersion)) {
855 if (appendVersion) {
856 sb.append("&t=");
857 }
858 else {
859 sb.append("?t=");
860 }
861
862 Date modifiedDate = fileVersion.getModifiedDate();
863
864 sb.append(modifiedDate.getTime());
865 }
866
867 sb.append(queryString);
868
869 String previewURL = sb.toString();
870
871 if ((themeDisplay != null) && themeDisplay.isAddSessionIdToURL()) {
872 return PortalUtil.getURLWithSessionId(
873 previewURL, themeDisplay.getSessionId());
874 }
875
876 return previewURL;
877 }
878
879 @Override
880 public <T> OrderByComparator<T> getRepositoryModelOrderByComparator(
881 String orderByCol, String orderByType) {
882
883 boolean orderByAsc = true;
884
885 if (orderByType.equals("desc")) {
886 orderByAsc = false;
887 }
888
889 OrderByComparator<T> orderByComparator = null;
890
891 if (orderByCol.equals("creationDate")) {
892 orderByComparator = new RepositoryModelCreateDateComparator<>(
893 orderByAsc);
894 }
895 else if (orderByCol.equals("downloads")) {
896 orderByComparator = new RepositoryModelReadCountComparator<>(
897 orderByAsc);
898 }
899 else if (orderByCol.equals("modifiedDate")) {
900 orderByComparator = new RepositoryModelModifiedDateComparator<>(
901 orderByAsc);
902 }
903 else if (orderByCol.equals("size")) {
904 orderByComparator = new RepositoryModelSizeComparator<>(orderByAsc);
905 }
906 else {
907 orderByComparator = new RepositoryModelTitleComparator<>(
908 orderByAsc);
909 }
910
911 return orderByComparator;
912 }
913
914 @Override
915 public String getSanitizedFileName(String title, String extension) {
916 String fileName = StringUtil.replace(
917 title, StringPool.SLASH, StringPool.UNDERLINE);
918
919 if (Validator.isNotNull(extension) &&
920 !StringUtil.endsWith(fileName, StringPool.PERIOD + extension)) {
921
922 fileName += StringPool.PERIOD + extension;
923 }
924
925 if (fileName.length() > 255) {
926 int x = fileName.length() - 1;
927
928 if (Validator.isNotNull(extension)) {
929 x = fileName.lastIndexOf(StringPool.PERIOD);
930 }
931
932 int y = x - (fileName.length() - 255);
933
934 fileName = fileName.substring(0, y) + fileName.substring(x);
935 }
936
937 return fileName;
938 }
939
940 @Override
941 public String getTempFileId(long id, String version) {
942 return getTempFileId(id, version, null);
943 }
944
945 @Override
946 public String getTempFileId(long id, String version, String languageId) {
947 if (Validator.isNull(languageId)) {
948 return String.valueOf(id).concat(StringPool.PERIOD).concat(version);
949 }
950
951 StringBundler sb = new StringBundler(5);
952
953 sb.append(id);
954 sb.append(StringPool.PERIOD);
955 sb.append(version);
956 sb.append(StringPool.PERIOD);
957 sb.append(languageId);
958
959 return sb.toString();
960 }
961
962
966 @Deprecated
967 @Override
968 public String getThumbnailSrc(
969 FileEntry fileEntry, DLFileShortcut dlFileShortcut,
970 ThemeDisplay themeDisplay)
971 throws Exception {
972
973 return getThumbnailSrc(
974 fileEntry, fileEntry.getFileVersion(), themeDisplay);
975 }
976
977
981 @Deprecated
982 @Override
983 public String getThumbnailSrc(
984 FileEntry fileEntry, FileVersion fileVersion,
985 DLFileShortcut dlFileShortcut, ThemeDisplay themeDisplay)
986 throws Exception {
987
988 return getThumbnailSrc(fileEntry, fileVersion, themeDisplay);
989 }
990
991 @Override
992 public String getThumbnailSrc(
993 FileEntry fileEntry, FileVersion fileVersion,
994 ThemeDisplay themeDisplay)
995 throws Exception {
996
997 String thumbnailQueryString = null;
998
999 if (PropsValues.DL_FILE_ENTRY_THUMBNAIL_ENABLED) {
1000 if (ImageProcessorUtil.hasImages(fileVersion)) {
1001 thumbnailQueryString = "&imageThumbnail=1";
1002 }
1003 else if (PDFProcessorUtil.hasImages(fileVersion)) {
1004 thumbnailQueryString = "&documentThumbnail=1";
1005 }
1006 else if (VideoProcessorUtil.hasVideo(fileVersion)) {
1007 thumbnailQueryString = "&videoThumbnail=1";
1008 }
1009 }
1010
1011 return getImageSrc(
1012 fileEntry, fileVersion, themeDisplay, thumbnailQueryString);
1013 }
1014
1015 @Override
1016 public String getThumbnailSrc(
1017 FileEntry fileEntry, ThemeDisplay themeDisplay)
1018 throws Exception {
1019
1020 return getThumbnailSrc(
1021 fileEntry, fileEntry.getFileVersion(), themeDisplay);
1022 }
1023
1024 @Override
1025 public String getThumbnailStyle() throws Exception {
1026 return getThumbnailStyle(true, 0);
1027 }
1028
1029 @Override
1030 public String getThumbnailStyle(boolean max, int margin) throws Exception {
1031 StringBundler sb = new StringBundler(5);
1032
1033 if (max) {
1034 sb.append("max-height: ");
1035 }
1036 else {
1037 sb.append("height: ");
1038 }
1039
1040 sb.append(
1041 PrefsPropsUtil.getLong(
1042 PropsKeys.DL_FILE_ENTRY_THUMBNAIL_MAX_HEIGHT) + 2 * margin);
1043
1044 if (max) {
1045 sb.append("px; max-width: ");
1046 }
1047 else {
1048 sb.append("px; width: ");
1049 }
1050
1051 sb.append(
1052 PrefsPropsUtil.getLong(
1053 PropsKeys.DL_FILE_ENTRY_THUMBNAIL_MAX_WIDTH) + 2 * margin);
1054 sb.append("px;");
1055
1056 return sb.toString();
1057 }
1058
1059 @Override
1060 public String getTitleWithExtension(FileEntry fileEntry) {
1061 String title = fileEntry.getTitle();
1062 String extension = fileEntry.getExtension();
1063
1064 return getTitleWithExtension(title, extension);
1065 }
1066
1067 @Override
1068 public String getTitleWithExtension(String title, String extension) {
1069 if (Validator.isNotNull(extension)) {
1070 String periodAndExtension = StringPool.PERIOD.concat(extension);
1071
1072 if (!title.endsWith(periodAndExtension)) {
1073 title += periodAndExtension;
1074 }
1075 }
1076
1077 return title;
1078 }
1079
1080 @Override
1081 public String getWebDavURL(
1082 ThemeDisplay themeDisplay, Folder folder, FileEntry fileEntry)
1083 throws PortalException {
1084
1085 return getWebDavURL(themeDisplay, folder, fileEntry, false);
1086 }
1087
1088 @Override
1089 public String getWebDavURL(
1090 ThemeDisplay themeDisplay, Folder folder, FileEntry fileEntry,
1091 boolean manualCheckInRequired)
1092 throws PortalException {
1093
1094 return getWebDavURL(
1095 themeDisplay, folder, fileEntry, manualCheckInRequired, false);
1096 }
1097
1098 @Override
1099 public String getWebDavURL(
1100 ThemeDisplay themeDisplay, Folder folder, FileEntry fileEntry,
1101 boolean manualCheckInRequired, boolean openDocumentUrl)
1102 throws PortalException {
1103
1104 StringBundler webDavURL = new StringBundler(8);
1105
1106 boolean secure = false;
1107
1108 if (themeDisplay.isSecure() ||
1109 PropsValues.WEBDAV_SERVLET_HTTPS_REQUIRED) {
1110
1111 secure = true;
1112 }
1113
1114 String portalURL = PortalUtil.getPortalURL(
1115 themeDisplay.getServerName(), themeDisplay.getServerPort(), secure);
1116
1117 webDavURL.append(portalURL);
1118
1119 webDavURL.append(themeDisplay.getPathContext());
1120 webDavURL.append("/webdav");
1121
1122 if (manualCheckInRequired) {
1123 webDavURL.append(MANUAL_CHECK_IN_REQUIRED_PATH);
1124 }
1125
1126 String fileEntryFileName = null;
1127
1128 Group group = null;
1129
1130 if (fileEntry != null) {
1131 fileEntryFileName = HtmlUtil.unescape(fileEntry.getFileName());
1132
1133 group = GroupLocalServiceUtil.getGroup(fileEntry.getGroupId());
1134 }
1135 else {
1136 group = themeDisplay.getScopeGroup();
1137 }
1138
1139 webDavURL.append(group.getFriendlyURL());
1140 webDavURL.append("/document_library");
1141
1142 StringBuilder sb = new StringBuilder();
1143
1144 if ((folder != null) &&
1145 (folder.getFolderId() !=
1146 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID)) {
1147
1148 Folder curFolder = folder;
1149
1150 while (true) {
1151 sb.insert(0, HttpUtil.encodeURL(curFolder.getName(), true));
1152 sb.insert(0, StringPool.SLASH);
1153
1154 if (curFolder.getParentFolderId() ==
1155 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
1156
1157 break;
1158 }
1159
1160 curFolder = DLAppLocalServiceUtil.getFolder(
1161 curFolder.getParentFolderId());
1162 }
1163 }
1164
1165 if (fileEntry != null) {
1166 sb.append(StringPool.SLASH);
1167 sb.append(HttpUtil.encodeURL(fileEntryFileName, true));
1168 }
1169
1170 webDavURL.append(sb.toString());
1171
1172 return webDavURL.toString();
1173 }
1174
1175 @Override
1176 public boolean hasWorkflowDefinitionLink(
1177 long companyId, long groupId, long folderId, long fileEntryTypeId)
1178 throws Exception {
1179
1180 while (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
1181 DLFolder dlFolder = DLFolderLocalServiceUtil.fetchDLFolder(
1182 folderId);
1183
1184 if (dlFolder == null) {
1185 return false;
1186 }
1187
1188 if (dlFolder.getRestrictionType() !=
1189 DLFolderConstants.RESTRICTION_TYPE_INHERIT) {
1190
1191 break;
1192 }
1193
1194 folderId = dlFolder.getParentFolderId();
1195 }
1196
1197 if (WorkflowDefinitionLinkLocalServiceUtil.hasWorkflowDefinitionLink(
1198 companyId, groupId, DLFolderConstants.getClassName(), folderId,
1199 fileEntryTypeId) ||
1200 WorkflowDefinitionLinkLocalServiceUtil.hasWorkflowDefinitionLink(
1201 companyId, groupId, DLFolderConstants.getClassName(), folderId,
1202 DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_ALL)) {
1203
1204 return true;
1205 }
1206
1207 return false;
1208 }
1209
1210 @Override
1211 public boolean isAutoGeneratedDLFileEntryTypeDDMStructureKey(
1212 String ddmStructureKey) {
1213
1214 if (ddmStructureKey.startsWith(_STRUCTURE_KEY_PREFIX)) {
1215 return true;
1216 }
1217
1218 return false;
1219 }
1220
1221 @Override
1222 public boolean isOfficeExtension(String extension) {
1223 return ArrayUtil.contains(_MICROSOFT_OFFICE_EXTENSIONS, extension);
1224 }
1225
1226 @Override
1227 public boolean isSubscribedToFileEntryType(
1228 long companyId, long groupId, long userId, long fileEntryTypeId) {
1229
1230 if (fileEntryTypeId ==
1231 DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT) {
1232
1233 fileEntryTypeId = groupId;
1234 }
1235
1236 return SubscriptionLocalServiceUtil.isSubscribed(
1237 companyId, userId, DLFileEntryType.class.getName(),
1238 fileEntryTypeId);
1239 }
1240
1241 @Override
1242 public boolean isSubscribedToFolder(
1243 long companyId, long groupId, long userId, long folderId)
1244 throws PortalException {
1245
1246 return isSubscribedToFolder(companyId, groupId, userId, folderId, true);
1247 }
1248
1249 @Override
1250 public boolean isSubscribedToFolder(
1251 long companyId, long groupId, long userId, long folderId,
1252 boolean recursive)
1253 throws PortalException {
1254
1255 List<Long> ancestorFolderIds = new ArrayList<>();
1256
1257 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
1258 Folder folder = DLAppLocalServiceUtil.getFolder(folderId);
1259
1260 ancestorFolderIds.add(folderId);
1261
1262 if (recursive) {
1263 ancestorFolderIds.addAll(folder.getAncestorFolderIds());
1264
1265 ancestorFolderIds.add(groupId);
1266 }
1267 }
1268 else {
1269 ancestorFolderIds.add(groupId);
1270 }
1271
1272 long[] folderIdsArray = ArrayUtil.toLongArray(ancestorFolderIds);
1273
1274 return SubscriptionLocalServiceUtil.isSubscribed(
1275 companyId, userId, DLFolder.class.getName(), folderIdsArray);
1276 }
1277
1278 @Override
1279 public boolean isValidVersion(String version) {
1280 if (version.equals(DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION)) {
1281 return true;
1282 }
1283
1284 String[] versionParts = StringUtil.split(version, StringPool.PERIOD);
1285
1286 if (versionParts.length != 2) {
1287 return false;
1288 }
1289
1290 if (Validator.isNumber(versionParts[0]) &&
1291 Validator.isNumber(versionParts[1])) {
1292
1293 return true;
1294 }
1295
1296 return false;
1297 }
1298
1299 @Override
1300 public void startWorkflowInstance(
1301 long userId, DLFileVersion dlFileVersion, String syncEventType,
1302 ServiceContext serviceContext)
1303 throws PortalException {
1304
1305 Map<String, Serializable> workflowContext = new HashMap<>();
1306
1307 workflowContext.put(
1308 WorkflowConstants.CONTEXT_URL,
1309 getEntryURL(dlFileVersion, serviceContext));
1310 workflowContext.put("event", syncEventType);
1311
1312 WorkflowHandlerRegistryUtil.startWorkflowInstance(
1313 dlFileVersion.getCompanyId(), dlFileVersion.getGroupId(), userId,
1314 DLFileEntryConstants.getClassName(),
1315 dlFileVersion.getFileVersionId(), dlFileVersion, serviceContext,
1316 workflowContext);
1317 }
1318
1319 protected String getEntryURL(
1320 DLFileVersion dlFileVersion, ServiceContext serviceContext)
1321 throws PortalException {
1322
1323 if (Validator.equals(
1324 serviceContext.getCommand(), Constants.ADD_WEBDAV) ||
1325 Validator.equals(
1326 serviceContext.getCommand(), Constants.UPDATE_WEBDAV)) {
1327
1328 return serviceContext.getPortalURL() +
1329 serviceContext.getCurrentURL();
1330 }
1331
1332 String entryURL = GetterUtil.getString(
1333 serviceContext.getAttribute("entryURL"));
1334
1335 if (Validator.isNotNull(entryURL)) {
1336 return entryURL;
1337 }
1338
1339 HttpServletRequest request = serviceContext.getRequest();
1340
1341 if ((request == null) || (serviceContext.getThemeDisplay() == null)) {
1342 return StringPool.BLANK;
1343 }
1344
1345 long plid = serviceContext.getPlid();
1346
1347 long controlPanelPlid = PortalUtil.getControlPanelPlid(
1348 serviceContext.getCompanyId());
1349
1350 if (plid == controlPanelPlid) {
1351 plid = PortalUtil.getPlidFromPortletId(
1352 dlFileVersion.getGroupId(), PortletKeys.DOCUMENT_LIBRARY);
1353 }
1354
1355 if (plid == LayoutConstants.DEFAULT_PLID) {
1356 plid = controlPanelPlid;
1357 }
1358
1359 PortletURL portletURL = PortletURLFactoryUtil.create(
1360 request, PortletKeys.DOCUMENT_LIBRARY, plid,
1361 PortletRequest.RENDER_PHASE);
1362
1363 portletURL.setParameter(
1364 "struts_action", "/document_library/view_file_entry");
1365 portletURL.setParameter(
1366 "fileEntryId", String.valueOf(dlFileVersion.getFileEntryId()));
1367
1368 return portletURL.toString();
1369 }
1370
1371 protected String getImageSrc(
1372 FileEntry fileEntry, FileVersion fileVersion,
1373 ThemeDisplay themeDisplay, String queryString)
1374 throws Exception {
1375
1376 StringBundler sb = new StringBundler(4);
1377
1378 sb.append(themeDisplay.getPathThemeImages());
1379 sb.append("/file_system/large/");
1380 sb.append(getGenericName(fileEntry.getExtension()));
1381 sb.append(".png");
1382
1383 String thumbnailSrc = sb.toString();
1384
1385 if (Validator.isNotNull(queryString)) {
1386 thumbnailSrc = getPreviewURL(
1387 fileEntry, fileVersion, themeDisplay, queryString, true, true);
1388 }
1389
1390 return thumbnailSrc;
1391 }
1392
1393 private static void _populateGenericNamesMap(String genericName) {
1394 String[] extensions = PropsUtil.getArray(
1395 PropsKeys.DL_FILE_GENERIC_EXTENSIONS, new Filter(genericName));
1396
1397 for (String extension : extensions) {
1398 _genericNames.put(extension, genericName);
1399 }
1400 }
1401
1402 private static final String _DEFAULT_FILE_ICON = "page";
1403
1404 private static final String _DEFAULT_GENERIC_NAME = "default";
1405
1406 private static final long _DIVISOR = 256;
1407
1408 private static final String[] _MICROSOFT_OFFICE_EXTENSIONS = {
1409 "accda", "accdb", "accdc", "accde", "accdp", "accdr", "accdt", "accdu",
1410 "acl", "ade", "adp", "asd", "cnv", "crtx", "doc", "docm", "docx", "dot",
1411 "dotm", "dotx", "grv", "iaf", "laccdb", "maf", "mam", "maq", "mar",
1412 "mat", "mda", "mdb", "mde", "mdt", "mdw", "mpd", "mpp", "mpt", "oab",
1413 "obi", "oft", "olm", "one", "onepkg", "ops", "ost", "pa", "pip", "pot",
1414 "potm", "potx", "ppa", "ppam", "pps", "ppsm", "ppsx", "ppt", "pptm",
1415 "pptx", "prf", "pst", "pub", "puz", "rpmsg", "sldm", "sldx", "slk",
1416 "snp", "svd", "thmx", "vdx", "vrge08message", "vsd", "vss", "vst",
1417 "vsx", "vtx", "wbk", "wll", "xar", "xl", "xla", "xlam", "xlb", "xlc",
1418 "xll", "xlm", "xls", "xlsb", "xlsm", "xlsx", "xlt", "xltm", "xltx",
1419 "xlw", "xsf", "xsn"
1420 };
1421
1422 private static final String _STRUCTURE_KEY_PREFIX = "AUTO_";
1423
1424 private static final Log _log = LogFactoryUtil.getLog(DLImpl.class);
1425
1426 private static final Set<String> _allMediaGalleryMimeTypes =
1427 new TreeSet<>();
1428 private static final Set<String> _fileIcons = new HashSet<>();
1429 private static final Map<String, String> _genericNames = new HashMap<>();
1430
1431 static {
1432 _allMediaGalleryMimeTypes.addAll(
1433 SetUtil.fromArray(
1434 PropsUtil.getArray(
1435 PropsKeys.DL_FILE_ENTRY_PREVIEW_AUDIO_MIME_TYPES)));
1436 _allMediaGalleryMimeTypes.addAll(
1437 SetUtil.fromArray(
1438 PropsUtil.getArray(
1439 PropsKeys.DL_FILE_ENTRY_PREVIEW_VIDEO_MIME_TYPES)));
1440 _allMediaGalleryMimeTypes.addAll(
1441 SetUtil.fromArray(
1442 PropsUtil.getArray(
1443 PropsKeys.DL_FILE_ENTRY_PREVIEW_IMAGE_MIME_TYPES)));
1444
1445 String[] fileIcons = null;
1446
1447 try {
1448 fileIcons = PropsUtil.getArray(PropsKeys.DL_FILE_ICONS);
1449 }
1450 catch (Exception e) {
1451 if (_log.isDebugEnabled()) {
1452 _log.debug(e, e);
1453 }
1454
1455 fileIcons = new String[] {StringPool.BLANK};
1456 }
1457
1458 for (int i = 0; i < fileIcons.length; i++) {
1459
1460
1461
1462 if (!StringPool.STAR.equals(fileIcons[i])) {
1463
1464
1465
1466 String extension = fileIcons[i];
1467
1468 if (extension.length() > 0) {
1469 extension = extension.substring(1);
1470 }
1471
1472 _fileIcons.add(extension);
1473 }
1474 }
1475
1476 String[] genericNames = PropsUtil.getArray(
1477 PropsKeys.DL_FILE_GENERIC_NAMES);
1478
1479 for (String genericName : genericNames) {
1480 _populateGenericNamesMap(genericName);
1481 }
1482 }
1483
1484 }