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