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