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
1017 @Deprecated
1018 @Override
1019 public String getThumbnailSrc(
1020 FileEntry fileEntry, DLFileShortcut dlFileShortcut,
1021 ThemeDisplay themeDisplay)
1022 throws Exception {
1023
1024 return getThumbnailSrc(
1025 fileEntry, fileEntry.getFileVersion(), themeDisplay);
1026 }
1027
1028
1032 @Deprecated
1033 @Override
1034 public String getThumbnailSrc(
1035 FileEntry fileEntry, FileVersion fileVersion,
1036 DLFileShortcut dlFileShortcut, ThemeDisplay themeDisplay)
1037 throws Exception {
1038
1039 return getThumbnailSrc(fileEntry, fileVersion, themeDisplay);
1040 }
1041
1042 @Override
1043 public String getThumbnailSrc(
1044 FileEntry fileEntry, FileVersion fileVersion,
1045 ThemeDisplay themeDisplay)
1046 throws Exception {
1047
1048 String thumbnailQueryString = null;
1049
1050 if (PropsValues.DL_FILE_ENTRY_THUMBNAIL_ENABLED) {
1051 if (ImageProcessorUtil.hasImages(fileVersion)) {
1052 thumbnailQueryString = "&imageThumbnail=1";
1053 }
1054 else if (PDFProcessorUtil.hasImages(fileVersion)) {
1055 thumbnailQueryString = "&documentThumbnail=1";
1056 }
1057 else if (VideoProcessorUtil.hasVideo(fileVersion)) {
1058 thumbnailQueryString = "&videoThumbnail=1";
1059 }
1060 }
1061
1062 return getImageSrc(
1063 fileEntry, fileVersion, themeDisplay, thumbnailQueryString);
1064 }
1065
1066 @Override
1067 public String getThumbnailSrc(
1068 FileEntry fileEntry, ThemeDisplay themeDisplay)
1069 throws Exception {
1070
1071 return getThumbnailSrc(
1072 fileEntry, fileEntry.getFileVersion(), themeDisplay);
1073 }
1074
1075 @Override
1076 public String getThumbnailStyle() throws Exception {
1077 return getThumbnailStyle(true, 0);
1078 }
1079
1080 @Override
1081 public String getThumbnailStyle(boolean max, int margin) throws Exception {
1082 StringBundler sb = new StringBundler(5);
1083
1084 if (max) {
1085 sb.append("max-height: ");
1086 }
1087 else {
1088 sb.append("height: ");
1089 }
1090
1091 sb.append(
1092 PrefsPropsUtil.getLong(
1093 PropsKeys.DL_FILE_ENTRY_THUMBNAIL_MAX_HEIGHT) + 2 * margin);
1094
1095 if (max) {
1096 sb.append("px; max-width: ");
1097 }
1098 else {
1099 sb.append("px; width: ");
1100 }
1101
1102 sb.append(
1103 PrefsPropsUtil.getLong(
1104 PropsKeys.DL_FILE_ENTRY_THUMBNAIL_MAX_WIDTH) + 2 * margin);
1105 sb.append("px;");
1106
1107 return sb.toString();
1108 }
1109
1110 @Override
1111 public String getTitleWithExtension(FileEntry fileEntry) {
1112 String title = fileEntry.getTitle();
1113 String extension = fileEntry.getExtension();
1114
1115 return getTitleWithExtension(title, extension);
1116 }
1117
1118 @Override
1119 public String getTitleWithExtension(String title, String extension) {
1120 if (Validator.isNotNull(extension)) {
1121 String periodAndExtension = StringPool.PERIOD.concat(extension);
1122
1123 if (!title.endsWith(periodAndExtension)) {
1124 title += periodAndExtension;
1125 }
1126 }
1127
1128 return title;
1129 }
1130
1131 @Override
1132 public String getWebDavURL(
1133 ThemeDisplay themeDisplay, Folder folder, FileEntry fileEntry)
1134 throws PortalException {
1135
1136 return getWebDavURL(themeDisplay, folder, fileEntry, false);
1137 }
1138
1139 @Override
1140 public String getWebDavURL(
1141 ThemeDisplay themeDisplay, Folder folder, FileEntry fileEntry,
1142 boolean manualCheckInRequired)
1143 throws PortalException {
1144
1145 return getWebDavURL(
1146 themeDisplay, folder, fileEntry, manualCheckInRequired, false);
1147 }
1148
1149 @Override
1150 public String getWebDavURL(
1151 ThemeDisplay themeDisplay, Folder folder, FileEntry fileEntry,
1152 boolean manualCheckInRequired, boolean openDocumentUrl)
1153 throws PortalException {
1154
1155 StringBundler webDavURL = new StringBundler(8);
1156
1157 boolean secure = false;
1158
1159 if (themeDisplay.isSecure() ||
1160 PropsValues.WEBDAV_SERVLET_HTTPS_REQUIRED) {
1161
1162 secure = true;
1163 }
1164
1165 String portalURL = PortalUtil.getPortalURL(
1166 themeDisplay.getServerName(), themeDisplay.getServerPort(), secure);
1167
1168 webDavURL.append(portalURL);
1169
1170 webDavURL.append(themeDisplay.getPathContext());
1171 webDavURL.append("/webdav");
1172
1173 if (manualCheckInRequired) {
1174 webDavURL.append(MANUAL_CHECK_IN_REQUIRED_PATH);
1175 }
1176
1177 String fileEntryFileName = null;
1178
1179 Group group = null;
1180
1181 if (fileEntry != null) {
1182 fileEntryFileName = HtmlUtil.unescape(fileEntry.getFileName());
1183
1184 group = GroupLocalServiceUtil.getGroup(fileEntry.getGroupId());
1185 }
1186 else {
1187 group = themeDisplay.getScopeGroup();
1188 }
1189
1190 webDavURL.append(group.getFriendlyURL());
1191 webDavURL.append("/document_library");
1192
1193 StringBuilder sb = new StringBuilder();
1194
1195 if ((folder != null) &&
1196 (folder.getFolderId() !=
1197 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID)) {
1198
1199 Folder curFolder = folder;
1200
1201 while (true) {
1202 sb.insert(0, HttpUtil.encodeURL(curFolder.getName(), true));
1203 sb.insert(0, StringPool.SLASH);
1204
1205 if (curFolder.getParentFolderId() ==
1206 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
1207
1208 break;
1209 }
1210
1211 curFolder = DLAppLocalServiceUtil.getFolder(
1212 curFolder.getParentFolderId());
1213 }
1214 }
1215
1216 if (fileEntry != null) {
1217 sb.append(StringPool.SLASH);
1218 sb.append(HttpUtil.encodeURL(fileEntryFileName, true));
1219 }
1220
1221 webDavURL.append(sb.toString());
1222
1223 return webDavURL.toString();
1224 }
1225
1226 @Override
1227 public boolean hasWorkflowDefinitionLink(
1228 long companyId, long groupId, long folderId, long fileEntryTypeId)
1229 throws Exception {
1230
1231 while (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
1232 DLFolder dlFolder = DLFolderLocalServiceUtil.fetchDLFolder(
1233 folderId);
1234
1235 if (dlFolder == null) {
1236 return false;
1237 }
1238
1239 if (dlFolder.getRestrictionType() !=
1240 DLFolderConstants.RESTRICTION_TYPE_INHERIT) {
1241
1242 break;
1243 }
1244
1245 folderId = dlFolder.getParentFolderId();
1246 }
1247
1248 if (WorkflowDefinitionLinkLocalServiceUtil.hasWorkflowDefinitionLink(
1249 companyId, groupId, DLFolderConstants.getClassName(), folderId,
1250 fileEntryTypeId) ||
1251 WorkflowDefinitionLinkLocalServiceUtil.hasWorkflowDefinitionLink(
1252 companyId, groupId, DLFolderConstants.getClassName(), folderId,
1253 DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_ALL)) {
1254
1255 return true;
1256 }
1257
1258 return false;
1259 }
1260
1261 @Override
1262 public boolean isAutoGeneratedDLFileEntryTypeDDMStructureKey(
1263 String ddmStructureKey) {
1264
1265 if (ddmStructureKey.startsWith(_STRUCTURE_KEY_PREFIX)) {
1266 return true;
1267 }
1268
1269 return false;
1270 }
1271
1272 @Override
1273 public boolean isOfficeExtension(String extension) {
1274 return ArrayUtil.contains(_MICROSOFT_OFFICE_EXTENSIONS, extension);
1275 }
1276
1277 @Override
1278 public boolean isSubscribedToFileEntryType(
1279 long companyId, long groupId, long userId, long fileEntryTypeId) {
1280
1281 if (fileEntryTypeId ==
1282 DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT) {
1283
1284 fileEntryTypeId = groupId;
1285 }
1286
1287 return SubscriptionLocalServiceUtil.isSubscribed(
1288 companyId, userId, DLFileEntryType.class.getName(),
1289 fileEntryTypeId);
1290 }
1291
1292 @Override
1293 public boolean isSubscribedToFolder(
1294 long companyId, long groupId, long userId, long folderId)
1295 throws PortalException {
1296
1297 return isSubscribedToFolder(companyId, groupId, userId, folderId, true);
1298 }
1299
1300 @Override
1301 public boolean isSubscribedToFolder(
1302 long companyId, long groupId, long userId, long folderId,
1303 boolean recursive)
1304 throws PortalException {
1305
1306 List<Long> ancestorFolderIds = new ArrayList<Long>();
1307
1308 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
1309 Folder folder = DLAppLocalServiceUtil.getFolder(folderId);
1310
1311 ancestorFolderIds.add(folderId);
1312
1313 if (recursive) {
1314 ancestorFolderIds.addAll(folder.getAncestorFolderIds());
1315
1316 ancestorFolderIds.add(groupId);
1317 }
1318 }
1319 else {
1320 ancestorFolderIds.add(groupId);
1321 }
1322
1323 long[] folderIdsArray = ArrayUtil.toLongArray(ancestorFolderIds);
1324
1325 return SubscriptionLocalServiceUtil.isSubscribed(
1326 companyId, userId, DLFolder.class.getName(), folderIdsArray);
1327 }
1328
1329 @Override
1330 public boolean isValidVersion(String version) {
1331 if (version.equals(DLFileEntryConstants.PRIVATE_WORKING_COPY_VERSION)) {
1332 return true;
1333 }
1334
1335 String[] versionParts = StringUtil.split(version, StringPool.PERIOD);
1336
1337 if (versionParts.length != 2) {
1338 return false;
1339 }
1340
1341 if (Validator.isNumber(versionParts[0]) &&
1342 Validator.isNumber(versionParts[1])) {
1343
1344 return true;
1345 }
1346
1347 return false;
1348 }
1349
1350 @Override
1351 public void startWorkflowInstance(
1352 long userId, DLFileVersion dlFileVersion, String syncEventType,
1353 ServiceContext serviceContext)
1354 throws PortalException {
1355
1356 Map<String, Serializable> workflowContext =
1357 new HashMap<String, Serializable>();
1358
1359 workflowContext.put(
1360 WorkflowConstants.CONTEXT_URL,
1361 getEntryURL(dlFileVersion, serviceContext));
1362 workflowContext.put("event", syncEventType);
1363
1364 WorkflowHandlerRegistryUtil.startWorkflowInstance(
1365 dlFileVersion.getCompanyId(), dlFileVersion.getGroupId(), userId,
1366 DLFileEntryConstants.getClassName(),
1367 dlFileVersion.getFileVersionId(), dlFileVersion, serviceContext,
1368 workflowContext);
1369 }
1370
1371 protected String getEntryURL(
1372 DLFileVersion dlFileVersion, ServiceContext serviceContext)
1373 throws PortalException {
1374
1375 HttpServletRequest request = serviceContext.getRequest();
1376
1377 if ((request == null) || (serviceContext.getThemeDisplay() == null)) {
1378 return StringPool.BLANK;
1379 }
1380
1381 long plid = serviceContext.getPlid();
1382
1383 long controlPanelPlid = PortalUtil.getControlPanelPlid(
1384 serviceContext.getCompanyId());
1385
1386 if (plid == controlPanelPlid) {
1387 plid = PortalUtil.getPlidFromPortletId(
1388 dlFileVersion.getGroupId(), PortletKeys.DOCUMENT_LIBRARY);
1389 }
1390
1391 if (plid == LayoutConstants.DEFAULT_PLID) {
1392 plid = controlPanelPlid;
1393 }
1394
1395 PortletURL portletURL = PortletURLFactoryUtil.create(
1396 request, PortletKeys.DOCUMENT_LIBRARY, plid,
1397 PortletRequest.RENDER_PHASE);
1398
1399 portletURL.setParameter(
1400 "struts_action", "/document_library/view_file_entry");
1401 portletURL.setParameter(
1402 "fileEntryId", String.valueOf(dlFileVersion.getFileEntryId()));
1403
1404 return portletURL.toString();
1405 }
1406
1407 protected String getImageSrc(
1408 FileEntry fileEntry, FileVersion fileVersion,
1409 ThemeDisplay themeDisplay, String queryString)
1410 throws Exception {
1411
1412 StringBundler sb = new StringBundler(4);
1413
1414 sb.append(themeDisplay.getPathThemeImages());
1415 sb.append("/file_system/large/");
1416 sb.append(getGenericName(fileEntry.getExtension()));
1417 sb.append(".png");
1418
1419 String thumbnailSrc = sb.toString();
1420
1421 if (Validator.isNotNull(queryString)) {
1422 thumbnailSrc = getPreviewURL(
1423 fileEntry, fileVersion, themeDisplay, queryString, true, true);
1424 }
1425
1426 return thumbnailSrc;
1427 }
1428
1429 private static void _populateGenericNamesMap(String genericName) {
1430 String[] extensions = PropsUtil.getArray(
1431 PropsKeys.DL_FILE_GENERIC_EXTENSIONS, new Filter(genericName));
1432
1433 for (String extension : extensions) {
1434 _genericNames.put(extension, genericName);
1435 }
1436 }
1437
1438 private static final String _DEFAULT_FILE_ICON = "page";
1439
1440 private static final String _DEFAULT_GENERIC_NAME = "default";
1441
1442 private static final long _DIVISOR = 256;
1443
1444 private static final String[] _MICROSOFT_OFFICE_EXTENSIONS = {
1445 "accda", "accdb", "accdc", "accde", "accdp", "accdr", "accdt", "accdu",
1446 "acl", "ade", "adp", "asd", "cnv", "crtx", "doc", "docm", "docx", "dot",
1447 "dotm", "dotx", "grv", "iaf", "laccdb", "maf", "mam", "maq", "mar",
1448 "mat", "mda", "mdb", "mde", "mdt", "mdw", "mpd", "mpp", "mpt", "oab",
1449 "obi", "oft", "olm", "one", "onepkg", "ops", "ost", "pa", "pip", "pot",
1450 "potm", "potx", "ppa", "ppam", "pps", "ppsm", "ppsx", "ppt", "pptm",
1451 "pptx", "prf", "pst", "pub", "puz", "rpmsg", "sldm", "sldx", "slk",
1452 "snp", "svd", "thmx", "vdx", "vrge08message", "vsd", "vss", "vst",
1453 "vsx", "vtx", "wbk", "wll", "xar", "xl", "xla", "xlam", "xlb", "xlc",
1454 "xll", "xlm", "xls", "xlsb", "xlsm", "xlsx", "xlt", "xltm", "xltx",
1455 "xlw", "xsf", "xsn"
1456 };
1457
1458 private static final String _STRUCTURE_KEY_PREFIX = "AUTO_";
1459
1460 private static Log _log = LogFactoryUtil.getLog(DLImpl.class);
1461
1462 private static Set<String> _allMediaGalleryMimeTypes =
1463 new TreeSet<String>();
1464 private static Set<String> _fileIcons = new HashSet<String>();
1465 private static Map<String, String> _genericNames =
1466 new HashMap<String, String>();
1467
1468 static {
1469 _allMediaGalleryMimeTypes.addAll(
1470 SetUtil.fromArray(
1471 PropsUtil.getArray(
1472 PropsKeys.DL_FILE_ENTRY_PREVIEW_AUDIO_MIME_TYPES)));
1473 _allMediaGalleryMimeTypes.addAll(
1474 SetUtil.fromArray(
1475 PropsUtil.getArray(
1476 PropsKeys.DL_FILE_ENTRY_PREVIEW_VIDEO_MIME_TYPES)));
1477 _allMediaGalleryMimeTypes.addAll(
1478 SetUtil.fromArray(
1479 PropsUtil.getArray(
1480 PropsKeys.DL_FILE_ENTRY_PREVIEW_IMAGE_MIME_TYPES)));
1481
1482 String[] fileIcons = null;
1483
1484 try {
1485 fileIcons = PropsUtil.getArray(PropsKeys.DL_FILE_ICONS);
1486 }
1487 catch (Exception e) {
1488 if (_log.isDebugEnabled()) {
1489 _log.debug(e, e);
1490 }
1491
1492 fileIcons = new String[] {StringPool.BLANK};
1493 }
1494
1495 for (int i = 0; i < fileIcons.length; i++) {
1496
1497
1498
1499 if (!StringPool.STAR.equals(fileIcons[i])) {
1500
1501
1502
1503 String extension = fileIcons[i];
1504
1505 if (extension.length() > 0) {
1506 extension = extension.substring(1);
1507 }
1508
1509 _fileIcons.add(extension);
1510 }
1511 }
1512
1513 String[] genericNames = PropsUtil.getArray(
1514 PropsKeys.DL_FILE_GENERIC_NAMES);
1515
1516 for (String genericName : genericNames) {
1517 _populateGenericNamesMap(genericName);
1518 }
1519 }
1520
1521 }