1
14
15 package com.liferay.portlet.documentlibrary.lar;
16
17 import com.liferay.documentlibrary.service.DLLocalServiceUtil;
18 import com.liferay.portal.PortalException;
19 import com.liferay.portal.SystemException;
20 import com.liferay.portal.kernel.log.Log;
21 import com.liferay.portal.kernel.log.LogFactoryUtil;
22 import com.liferay.portal.kernel.util.MapUtil;
23 import com.liferay.portal.kernel.util.StringBundler;
24 import com.liferay.portal.kernel.util.StringPool;
25 import com.liferay.portal.kernel.xml.Document;
26 import com.liferay.portal.kernel.xml.Element;
27 import com.liferay.portal.kernel.xml.SAXReaderUtil;
28 import com.liferay.portal.lar.PortletDataContext;
29 import com.liferay.portal.lar.PortletDataException;
30 import com.liferay.portal.lar.PortletDataHandler;
31 import com.liferay.portal.lar.PortletDataHandlerBoolean;
32 import com.liferay.portal.lar.PortletDataHandlerControl;
33 import com.liferay.portal.lar.PortletDataHandlerKeys;
34 import com.liferay.portal.util.PortletKeys;
35 import com.liferay.portlet.documentlibrary.NoSuchFileEntryException;
36 import com.liferay.portlet.documentlibrary.NoSuchFileShortcutException;
37 import com.liferay.portlet.documentlibrary.NoSuchFolderException;
38 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
39 import com.liferay.portlet.documentlibrary.model.DLFileRank;
40 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
41 import com.liferay.portlet.documentlibrary.model.DLFolder;
42 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
43 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
44 import com.liferay.portlet.documentlibrary.service.DLFileRankLocalServiceUtil;
45 import com.liferay.portlet.documentlibrary.service.DLFileShortcutLocalServiceUtil;
46 import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
47 import com.liferay.portlet.documentlibrary.service.persistence.DLFileEntryUtil;
48 import com.liferay.portlet.documentlibrary.service.persistence.DLFileRankUtil;
49 import com.liferay.portlet.documentlibrary.service.persistence.DLFileShortcutUtil;
50 import com.liferay.portlet.documentlibrary.service.persistence.DLFolderUtil;
51
52 import java.io.IOException;
53 import java.io.InputStream;
54
55 import java.util.List;
56 import java.util.Map;
57 import java.util.regex.Pattern;
58
59 import javax.portlet.PortletPreferences;
60
61
67 public class DLPortletDataHandlerImpl implements PortletDataHandler {
68
69 public static void exportFileEntry(
70 PortletDataContext context, Element foldersEl,
71 Element fileEntriesEl, Element fileRanksEl, DLFileEntry fileEntry)
72 throws PortalException, SystemException {
73
74 if (!context.isWithinDateRange(fileEntry.getModifiedDate())) {
75 return;
76 }
77
78 exportParentFolder(context, foldersEl, fileEntry.getFolderId());
79
80 String path = getFileEntryPath(context, fileEntry);
81
82 if (context.isPathNotProcessed(path)) {
83 Element fileEntryEl = fileEntriesEl.addElement("file-entry");
84
85 fileEntryEl.addAttribute("path", path);
86
87 String binPath = getFileEntryBinPath(context, fileEntry);
88
89 fileEntryEl.addAttribute("bin-path", binPath);
90
91 fileEntry.setUserUuid(fileEntry.getUserUuid());
92
93 if (context.getBooleanParameter(_NAMESPACE, "comments")) {
94 context.addComments(
95 DLFileEntry.class, fileEntry.getFileEntryId());
96 }
97
98 if (context.getBooleanParameter(_NAMESPACE, "ratings")) {
99 context.addRatingsEntries(
100 DLFileEntry.class, fileEntry.getFileEntryId());
101 }
102
103 if (context.getBooleanParameter(_NAMESPACE, "tags")) {
104 context.addTagsEntries(
105 DLFileEntry.class, fileEntry.getFileEntryId());
106 }
107
108 InputStream is = DLLocalServiceUtil.getFileAsStream(
109 fileEntry.getCompanyId(), fileEntry.getFolderId(),
110 fileEntry.getName(), fileEntry.getVersion());
111
112 if (is == null) {
113 if (_log.isWarnEnabled()) {
114 _log.warn(
115 "No file found for file entry " +
116 fileEntry.getFileEntryId());
117 }
118
119 fileEntryEl.detach();
120
121 return;
122 }
123
124 try {
125 context.addZipEntry(
126 getFileEntryBinPath(context, fileEntry), is);
127 }
128 finally {
129 try {
130 is.close();
131 }
132 catch (IOException ioe) {
133 _log.error(ioe, ioe);
134 }
135 }
136
137 context.addZipEntry(path, fileEntry);
138
139 if (context.getBooleanParameter(_NAMESPACE, "ranks")) {
140 List<DLFileRank> fileRanks = DLFileRankUtil.findByF_N(
141 fileEntry.getFolderId(), fileEntry.getName());
142
143 for (DLFileRank fileRank : fileRanks) {
144 exportFileRank(context, fileRanksEl, fileRank);
145 }
146 }
147 }
148 }
149
150 public static void exportFolder(
151 PortletDataContext context, Element foldersEl,
152 Element fileEntriesEl, Element fileShortcutsEl, Element fileRanksEl,
153 DLFolder folder)
154 throws PortalException, SystemException {
155
156 if (context.isWithinDateRange(folder.getModifiedDate())) {
157 exportParentFolder(context, foldersEl, folder.getParentFolderId());
158
159 String path = getFolderPath(context, folder);
160
161 if (context.isPathNotProcessed(path)) {
162 Element folderEl = foldersEl.addElement("folder");
163
164 folderEl.addAttribute("path", path);
165
166 folder.setUserUuid(folder.getUserUuid());
167
168 context.addZipEntry(path, folder);
169 }
170 }
171
172 List<DLFileEntry> fileEntries = DLFileEntryUtil.findByFolderId(
173 folder.getFolderId());
174
175 for (DLFileEntry fileEntry : fileEntries) {
176 exportFileEntry(
177 context, foldersEl, fileEntriesEl, fileRanksEl, fileEntry);
178 }
179
180 if (context.getBooleanParameter(_NAMESPACE, "shortcuts")) {
181 List<DLFileShortcut> fileShortcuts =
182 DLFileShortcutUtil.findByFolderId(folder.getFolderId());
183
184 for (DLFileShortcut fileShortcut : fileShortcuts) {
185 exportFileShortcut(
186 context, foldersEl, fileShortcutsEl, fileShortcut);
187 }
188 }
189 }
190
191 public static void importFileEntry(
192 PortletDataContext context, Map<Long, Long> folderPKs,
193 Map<String, String> fileEntryNames, DLFileEntry fileEntry,
194 String binPath)
195 throws Exception {
196
197 long userId = context.getUserId(fileEntry.getUserUuid());
198 long folderId = MapUtil.getLong(
199 folderPKs, fileEntry.getFolderId(), fileEntry.getFolderId());
200
201 String[] tagsEntries = null;
202
203 if (context.getBooleanParameter(_NAMESPACE, "tags")) {
204 tagsEntries = context.getTagsEntries(
205 DLFileEntry.class, fileEntry.getFileEntryId());
206 }
207
208 boolean addCommunityPermissions = true;
209 boolean addGuestPermissions = true;
210
211 InputStream is = context.getZipEntryAsInputStream(binPath);
212
213 if ((folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) &&
214 (folderId == fileEntry.getFolderId())) {
215
216 String path = getImportFolderPath(context, folderId);
217
218 DLFolder folder = (DLFolder)context.getZipEntryAsObject(path);
219
220 importFolder(context, folderPKs, folder);
221
222 folderId = MapUtil.getLong(
223 folderPKs, fileEntry.getFolderId(), fileEntry.getFolderId());
224 }
225
226 DLFileEntry existingFileEntry = null;
227
228 try {
229 DLFolderUtil.findByPrimaryKey(folderId);
230
231 if (context.getDataStrategy().equals(
232 PortletDataHandlerKeys.DATA_STRATEGY_MIRROR)) {
233
234 try {
235 existingFileEntry = DLFileEntryUtil.findByUUID_G(
236 fileEntry.getUuid(), context.getGroupId());
237
238 if (!isDuplicateFileEntry(fileEntry, existingFileEntry)) {
239 existingFileEntry =
240 DLFileEntryLocalServiceUtil.updateFileEntry(
241 userId, existingFileEntry.getFolderId(),
242 folderId, existingFileEntry.getName(),
243 fileEntry.getName(), fileEntry.getTitle(),
244 fileEntry.getDescription(), tagsEntries,
245 fileEntry.getExtraSettings(), is,
246 fileEntry.getSize());
247 }
248 }
249 catch (NoSuchFileEntryException nsfee) {
250 existingFileEntry =
251 DLFileEntryLocalServiceUtil.addFileEntry(
252 fileEntry.getUuid(), userId, folderId,
253 fileEntry.getName(), fileEntry.getTitle(),
254 fileEntry.getDescription(), tagsEntries,
255 fileEntry.getExtraSettings(), is,
256 fileEntry.getSize(), addCommunityPermissions,
257 addGuestPermissions);
258 }
259 }
260 else {
261 existingFileEntry = DLFileEntryLocalServiceUtil.addFileEntry(
262 userId, folderId, fileEntry.getName(), fileEntry.getTitle(),
263 fileEntry.getDescription(), tagsEntries,
264 fileEntry.getExtraSettings(), is,
265 fileEntry.getSize(), addCommunityPermissions,
266 addGuestPermissions);
267 }
268
269 fileEntryNames.put(
270 fileEntry.getName(), existingFileEntry.getName());
271
272 if (context.getBooleanParameter(_NAMESPACE, "comments")) {
273 context.importComments(
274 DLFileEntry.class, fileEntry.getFileEntryId(),
275 existingFileEntry.getFileEntryId(), context.getGroupId());
276 }
277
278 if (context.getBooleanParameter(_NAMESPACE, "ratings")) {
279 context.importRatingsEntries(
280 DLFileEntry.class, fileEntry.getFileEntryId(),
281 existingFileEntry.getFileEntryId());
282 }
283 }
284 catch (NoSuchFolderException nsfe) {
285 _log.error(
286 "Could not find the parent folder for entry " +
287 fileEntry.getFileEntryId());
288 }
289 }
290
291 public static void importFileRank(
292 PortletDataContext context, Map<Long, Long> folderPKs,
293 Map<String, String> fileEntryNames, DLFileRank rank)
294 throws Exception {
295
296 long userId = context.getUserId(rank.getUserUuid());
297 long folderId = MapUtil.getLong(
298 folderPKs, rank.getFolderId(), rank.getFolderId());
299
300 String name = fileEntryNames.get(rank.getName());
301
302 if (name == null) {
303 name = rank.getName();
304 }
305
306 if ((folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) &&
307 (folderId == rank.getFolderId())) {
308
309 String path = getImportFolderPath(context, folderId);
310
311 DLFolder folder = (DLFolder)context.getZipEntryAsObject(path);
312
313 importFolder(context, folderPKs, folder);
314
315 folderId = MapUtil.getLong(
316 folderPKs, rank.getFolderId(), rank.getFolderId());
317 }
318
319 try {
320 DLFolderUtil.findByPrimaryKey(folderId);
321
322 DLFileRankLocalServiceUtil.updateFileRank(
323 context.getGroupId(), context.getCompanyId(), userId, folderId,
324 name);
325 }
326 catch (NoSuchFolderException nsfe) {
327 _log.error(
328 "Could not find the folder for rank " + rank.getFileRankId());
329 }
330 }
331
332 public static void importFolder(
333 PortletDataContext context, Map<Long, Long> folderPKs,
334 DLFolder folder)
335 throws Exception {
336
337 long userId = context.getUserId(folder.getUserUuid());
338 long plid = context.getPlid();
339 long parentFolderId = MapUtil.getLong(
340 folderPKs, folder.getParentFolderId(), folder.getParentFolderId());
341
342 boolean addCommunityPermissions = true;
343 boolean addGuestPermissions = true;
344
345 if ((parentFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) &&
346 (parentFolderId == folder.getParentFolderId())) {
347
348 String path = getImportFolderPath(context, parentFolderId);
349
350 DLFolder parentFolder = (DLFolder)context.getZipEntryAsObject(path);
351
352 importFolder(context, folderPKs, parentFolder);
353
354 parentFolderId = MapUtil.getLong(
355 folderPKs, folder.getParentFolderId(),
356 folder.getParentFolderId());
357 }
358
359 DLFolder existingFolder = null;
360
361 try {
362 if (parentFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
363 DLFolderUtil.findByPrimaryKey(parentFolderId);
364 }
365
366 if (context.getDataStrategy().equals(
367 PortletDataHandlerKeys.DATA_STRATEGY_MIRROR)) {
368
369 existingFolder = DLFolderUtil.fetchByUUID_G(
370 folder.getUuid(), context.getGroupId());
371
372 if (existingFolder == null) {
373 String name = getFolderName(
374 context.getCompanyId(), context.getGroupId(),
375 parentFolderId, folder.getName(), 2);
376
377 existingFolder = DLFolderLocalServiceUtil.addFolder(
378 folder.getUuid(), userId, plid, parentFolderId,
379 name, folder.getDescription(), addCommunityPermissions,
380 addGuestPermissions);
381 }
382 else {
383 existingFolder = DLFolderLocalServiceUtil.updateFolder(
384 existingFolder.getFolderId(), parentFolderId,
385 folder.getName(), folder.getDescription());
386 }
387 }
388 else {
389 String name = getFolderName(
390 context.getCompanyId(), context.getGroupId(),
391 parentFolderId, folder.getName(), 2);
392
393 existingFolder = DLFolderLocalServiceUtil.addFolder(
394 userId, plid, parentFolderId, name, folder.getDescription(),
395 addCommunityPermissions, addGuestPermissions);
396 }
397
398 folderPKs.put(folder.getFolderId(), existingFolder.getFolderId());
399 }
400 catch (NoSuchFolderException nsfe) {
401 _log.error(
402 "Could not find the parent folder for folder " +
403 folder.getFolderId());
404 }
405 }
406
407 public PortletPreferences deleteData(
408 PortletDataContext context, String portletId,
409 PortletPreferences prefs)
410 throws PortletDataException {
411
412 try {
413 if (!context.addPrimaryKey(
414 DLPortletDataHandlerImpl.class, "deleteData")) {
415
416 DLFolderLocalServiceUtil.deleteFolders(context.getGroupId());
417 }
418
419 return null;
420 }
421 catch (Exception e) {
422 throw new PortletDataException(e);
423 }
424 }
425
426 public String exportData(
427 PortletDataContext context, String portletId,
428 PortletPreferences prefs)
429 throws PortletDataException {
430
431 try {
432 Document doc = SAXReaderUtil.createDocument();
433
434 Element root = doc.addElement("documentlibrary-data");
435
436 root.addAttribute("group-id", String.valueOf(context.getGroupId()));
437
438 Element foldersEl = root.addElement("folders");
439 Element fileEntriesEl = root.addElement("file-entries");
440 Element fileShortcutsEl = root.addElement("file-shortcuts");
441 Element fileRanksEl = root.addElement("file-ranks");
442
443 List<DLFolder> folders = DLFolderUtil.findByGroupId(
444 context.getGroupId());
445
446 for (DLFolder folder : folders) {
447 exportFolder(
448 context, foldersEl, fileEntriesEl, fileShortcutsEl,
449 fileRanksEl, folder);
450 }
451
452 return doc.formattedString();
453 }
454 catch (Exception e) {
455 throw new PortletDataException(e);
456 }
457 }
458
459 public PortletDataHandlerControl[] getExportControls() {
460 return new PortletDataHandlerControl[] {
461 _foldersAndDocuments, _shortcuts, _ranks, _comments, _ratings, _tags
462 };
463 }
464
465 public PortletDataHandlerControl[] getImportControls() {
466 return new PortletDataHandlerControl[] {
467 _foldersAndDocuments, _shortcuts, _ranks, _comments, _ratings, _tags
468 };
469 }
470
471 public PortletPreferences importData(
472 PortletDataContext context, String portletId,
473 PortletPreferences prefs, String data)
474 throws PortletDataException {
475
476 try {
477 Document doc = SAXReaderUtil.read(data);
478
479 Element root = doc.getRootElement();
480
481 List<Element> folderEls = root.element("folders").elements(
482 "folder");
483
484 Map<Long, Long> folderPKs =
485 (Map<Long, Long>)context.getNewPrimaryKeysMap(DLFolder.class);
486
487 for (Element folderEl : folderEls) {
488 String path = folderEl.attributeValue("path");
489
490 if (!context.isPathNotProcessed(path)) {
491 continue;
492 }
493
494 DLFolder folder = (DLFolder)context.getZipEntryAsObject(path);
495
496 importFolder(context, folderPKs, folder);
497 }
498
499 List<Element> fileEntryEls = root.element("file-entries").elements(
500 "file-entry");
501
502 Map<String, String> fileEntryNames =
503 (Map<String, String>)context.getNewPrimaryKeysMap(
504 DLFileEntry.class);
505
506 for (Element fileEntryEl : fileEntryEls) {
507 String path = fileEntryEl.attributeValue("path");
508
509 if (!context.isPathNotProcessed(path)) {
510 continue;
511 }
512
513 DLFileEntry fileEntry =
514 (DLFileEntry)context.getZipEntryAsObject(path);
515
516 String binPath = fileEntryEl.attributeValue("bin-path");
517
518 importFileEntry(
519 context, folderPKs, fileEntryNames, fileEntry, binPath);
520 }
521
522 if (context.getBooleanParameter(_NAMESPACE, "shortcuts")) {
523 List<Element> fileShortcutEls = root.element(
524 "file-shortcuts").elements("file-shortcut");
525
526 for (Element fileShortcutEl : fileShortcutEls) {
527 String path = fileShortcutEl.attributeValue("path");
528
529 if (!context.isPathNotProcessed(path)) {
530 continue;
531 }
532
533 DLFileShortcut fileShortcut =
534 (DLFileShortcut)context.getZipEntryAsObject(path);
535
536 importFileShortcut(
537 context, folderPKs, fileEntryNames, fileShortcut);
538 }
539 }
540
541 if (context.getBooleanParameter(_NAMESPACE, "ranks")) {
542 List<Element> fileRankEls = root.element("file-ranks").elements(
543 "file-rank");
544
545 for (Element fileRankEl : fileRankEls) {
546 String path = fileRankEl.attributeValue("path");
547
548 if (!context.isPathNotProcessed(path)) {
549 continue;
550 }
551
552 DLFileRank fileRank =
553 (DLFileRank)context.getZipEntryAsObject(path);
554
555 importFileRank(
556 context, folderPKs, fileEntryNames, fileRank);
557 }
558 }
559
560 return null;
561 }
562 catch (Exception e) {
563 throw new PortletDataException(e);
564 }
565 }
566
567 public boolean isPublishToLiveByDefault() {
568 return false;
569 }
570
571 protected static void exportFileRank(
572 PortletDataContext context, Element fileRanksEl,
573 DLFileRank fileRank)
574 throws SystemException {
575
576 String path = getFileRankPath(context, fileRank);
577
578 if (!context.isPathNotProcessed(path)) {
579 return;
580 }
581
582 Element fileRankEl = fileRanksEl.addElement("file-rank");
583
584 fileRankEl.addAttribute("path", path);
585
586 fileRank.setUserUuid(fileRank.getUserUuid());
587
588 context.addZipEntry(path, fileRank);
589 }
590
591 protected static void exportFileShortcut(
592 PortletDataContext context, Element foldersEl,
593 Element fileShortcutsEl, DLFileShortcut fileShortcut)
594 throws PortalException, SystemException {
595
596 exportParentFolder(context, foldersEl, fileShortcut.getFolderId());
597
598 String path = getFileShortcutPath(context, fileShortcut);
599
600 if (context.isPathNotProcessed(path)) {
601 Element fileShortcutEl = fileShortcutsEl.addElement(
602 "file-shortcut");
603
604 fileShortcutEl.addAttribute("path", path);
605
606 fileShortcut.setUserUuid(fileShortcut.getUserUuid());
607
608 context.addZipEntry(path, fileShortcut);
609 }
610 }
611
612 protected static void exportParentFolder(
613 PortletDataContext context, Element foldersEl, long folderId)
614 throws PortalException, SystemException {
615
616 if (folderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
617 return;
618 }
619
620 DLFolder folder = DLFolderUtil.findByPrimaryKey(folderId);
621
622 exportParentFolder(context, foldersEl, folder.getParentFolderId());
623
624 String path = getFolderPath(context, folder);
625
626 if (context.isPathNotProcessed(path)) {
627 Element folderEl = foldersEl.addElement("folder");
628
629 folderEl.addAttribute("path", path);
630
631 folder.setUserUuid(folder.getUserUuid());
632
633 context.addZipEntry(path, folder);
634 }
635 }
636
637 protected static String getFileEntryBinPath(
638 PortletDataContext context, DLFileEntry fileEntry) {
639
640 StringBundler sb = new StringBundler(7);
641
642 sb.append(context.getPortletPath(PortletKeys.DOCUMENT_LIBRARY));
643 sb.append("/bin/");
644 sb.append(fileEntry.getFileEntryId());
645 sb.append(StringPool.SLASH);
646 sb.append(fileEntry.getVersion());
647 sb.append(StringPool.SLASH);
648 sb.append(fileEntry.getTitleWithExtension());
649
650 return sb.toString();
651 }
652
653 protected static String getFileEntryPath(
654 PortletDataContext context, DLFileEntry fileEntry) {
655
656 StringBundler sb = new StringBundler(6);
657
658 sb.append(context.getPortletPath(PortletKeys.DOCUMENT_LIBRARY));
659 sb.append("/file-entries/");
660 sb.append(fileEntry.getFileEntryId());
661 sb.append(StringPool.SLASH);
662 sb.append(fileEntry.getVersion());
663 sb.append(".xml");
664
665 return sb.toString();
666 }
667
668 protected static String getFolderName(
669 long companyId, long groupId, long parentFolderId, String name,
670 int count)
671 throws SystemException {
672
673 DLFolder folder = DLFolderUtil.fetchByG_P_N(
674 groupId, parentFolderId, name);
675
676 if (folder == null) {
677 return name;
678 }
679
680 if (Pattern.matches(".* \\(\\d+\\)", name)) {
681 int pos = name.lastIndexOf(" (");
682
683 name = name.substring(0, pos);
684 }
685
686 StringBundler sb = new StringBundler(5);
687
688 sb.append(name);
689 sb.append(StringPool.SPACE);
690 sb.append(StringPool.OPEN_PARENTHESIS);
691 sb.append(count);
692 sb.append(StringPool.CLOSE_PARENTHESIS);
693
694 name = sb.toString();
695
696 return getFolderName(companyId, groupId, parentFolderId, name, ++count);
697 }
698
699 protected static String getFolderPath(
700 PortletDataContext context, DLFolder folder) {
701
702 StringBundler sb = new StringBundler(4);
703
704 sb.append(context.getPortletPath(PortletKeys.DOCUMENT_LIBRARY));
705 sb.append("/folders/");
706 sb.append(folder.getFolderId());
707 sb.append(".xml");
708
709 return sb.toString();
710 }
711
712 protected static String getFileRankPath(
713 PortletDataContext context, DLFileRank fileRank) {
714
715 StringBundler sb = new StringBundler(4);
716
717 sb.append(context.getPortletPath(PortletKeys.DOCUMENT_LIBRARY));
718 sb.append("/ranks/");
719 sb.append(fileRank.getFileRankId());
720 sb.append(".xml");
721
722 return sb.toString();
723 }
724
725 protected static String getFileShortcutPath(
726 PortletDataContext context, DLFileShortcut fileShortcut) {
727
728 StringBundler sb = new StringBundler(4);
729
730 sb.append(context.getPortletPath(PortletKeys.DOCUMENT_LIBRARY));
731 sb.append("/shortcuts/");
732 sb.append(fileShortcut.getFileShortcutId());
733 sb.append(".xml");
734
735 return sb.toString();
736 }
737
738 protected static String getImportFolderPath(
739 PortletDataContext context, long folderId) {
740
741 StringBundler sb = new StringBundler(4);
742
743 sb.append(context.getImportPortletPath(PortletKeys.DOCUMENT_LIBRARY));
744 sb.append("/folders/");
745 sb.append(folderId);
746 sb.append(".xml");
747
748 return sb.toString();
749 }
750
751 protected static void importFileShortcut(
752 PortletDataContext context, Map<Long, Long> folderPKs,
753 Map<String, String> fileEntryNames, DLFileShortcut fileShortcut)
754 throws Exception {
755
756 long userId = context.getUserId(fileShortcut.getUserUuid());
757 long folderId = MapUtil.getLong(
758 folderPKs, fileShortcut.getFolderId(), fileShortcut.getFolderId());
759 long toFolderId = MapUtil.getLong(
760 folderPKs, fileShortcut.getToFolderId(),
761 fileShortcut.getToFolderId());
762 String toName = MapUtil.getString(
763 fileEntryNames, fileShortcut.getToName(), fileShortcut.getToName());
764
765 boolean addCommunityPermissions = true;
766 boolean addGuestPermissions = true;
767
768 try {
769 DLFolderUtil.findByPrimaryKey(folderId);
770 DLFolderUtil.findByPrimaryKey(toFolderId);
771
772 if (context.getDataStrategy().equals(
773 PortletDataHandlerKeys.DATA_STRATEGY_MIRROR)) {
774
775 try {
776 DLFileShortcut existingFileShortcut =
777 DLFileShortcutUtil.findByUUID_G(
778 fileShortcut.getUuid(), context.getGroupId());
779
780 DLFileShortcutLocalServiceUtil.updateFileShortcut(
781 userId, existingFileShortcut.getFileShortcutId(),
782 folderId, toFolderId, toName);
783 }
784 catch (NoSuchFileShortcutException nsfse) {
785 DLFileShortcutLocalServiceUtil.addFileShortcut(
786 fileShortcut.getUuid(), userId, folderId, toFolderId,
787 toName, addCommunityPermissions, addGuestPermissions);
788 }
789 }
790 else {
791 DLFileShortcutLocalServiceUtil.addFileShortcut(
792 userId, folderId, toFolderId, toName,
793 addCommunityPermissions, addGuestPermissions);
794 }
795 }
796 catch (NoSuchFolderException nsfe) {
797 _log.error(
798 "Could not find the folder for shortcut " +
799 fileShortcut.getFileShortcutId());
800 }
801 }
802
803 protected static boolean isDuplicateFileEntry(
804 DLFileEntry fileEntry1, DLFileEntry fileEntry2) {
805
806 try {
807 DLFolder folder1 = fileEntry1.getFolder();
808 DLFolder folder2 = fileEntry2.getFolder();
809
810 if ((folder1.getUuid().equals(folder2.getUuid())) &&
811 (fileEntry1.getSize() == fileEntry2.getSize()) &&
812 (fileEntry1.getVersion() == fileEntry2.getVersion()) &&
813 (fileEntry1.getVersionUserUuid().equals(
814 fileEntry2.getVersionUserUuid()))) {
815
816 return true;
817 }
818 else {
819 return false;
820 }
821 }
822 catch (SystemException se) {
823 return false;
824 }
825 }
826
827 private static final String _NAMESPACE = "document_library";
828
829 private static final PortletDataHandlerBoolean _foldersAndDocuments =
830 new PortletDataHandlerBoolean(
831 _NAMESPACE, "folders-and-documents", true, true);
832
833 private static final PortletDataHandlerBoolean _ranks =
834 new PortletDataHandlerBoolean(_NAMESPACE, "ranks");
835
836 private static final PortletDataHandlerBoolean _shortcuts=
837 new PortletDataHandlerBoolean(_NAMESPACE, "shortcuts");
838
839 private static final PortletDataHandlerBoolean _comments =
840 new PortletDataHandlerBoolean(_NAMESPACE, "comments");
841
842 private static final PortletDataHandlerBoolean _ratings =
843 new PortletDataHandlerBoolean(_NAMESPACE, "ratings");
844
845 private static final PortletDataHandlerBoolean _tags =
846 new PortletDataHandlerBoolean(_NAMESPACE, "tags");
847
848 private static Log _log = LogFactoryUtil.getLog(
849 DLPortletDataHandlerImpl.class);
850
851 }