001
014
015 package com.liferay.portlet.documentlibrary.service.impl;
016
017 import com.liferay.portal.NoSuchGroupException;
018 import com.liferay.portal.kernel.dao.orm.QueryUtil;
019 import com.liferay.portal.kernel.exception.PortalException;
020 import com.liferay.portal.kernel.exception.SystemException;
021 import com.liferay.portal.kernel.io.unsync.UnsyncByteArrayInputStream;
022 import com.liferay.portal.kernel.repository.InvalidRepositoryIdException;
023 import com.liferay.portal.kernel.repository.LocalRepository;
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.systemevent.SystemEventHierarchyEntryThreadLocal;
028 import com.liferay.portal.kernel.util.ArrayUtil;
029 import com.liferay.portal.kernel.util.ContentTypes;
030 import com.liferay.portal.kernel.util.FileUtil;
031 import com.liferay.portal.kernel.util.MimeTypesUtil;
032 import com.liferay.portal.kernel.util.StringBundler;
033 import com.liferay.portal.kernel.util.StringPool;
034 import com.liferay.portal.kernel.util.Validator;
035 import com.liferay.portal.kernel.workflow.WorkflowConstants;
036 import com.liferay.portal.model.Repository;
037 import com.liferay.portal.repository.liferayrepository.model.LiferayFolder;
038 import com.liferay.portal.service.ServiceContext;
039 import com.liferay.portlet.documentlibrary.NoSuchFileEntryException;
040 import com.liferay.portlet.documentlibrary.NoSuchFileVersionException;
041 import com.liferay.portlet.documentlibrary.NoSuchFolderException;
042 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
043 import com.liferay.portlet.documentlibrary.model.DLFileEntryTypeConstants;
044 import com.liferay.portlet.documentlibrary.model.DLFileRank;
045 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
046 import com.liferay.portlet.documentlibrary.model.DLFolder;
047 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
048 import com.liferay.portlet.documentlibrary.service.base.DLAppLocalServiceBaseImpl;
049 import com.liferay.portlet.documentlibrary.util.DLAppUtil;
050 import com.liferay.portlet.documentlibrary.util.DLImpl;
051 import com.liferay.portlet.documentlibrary.util.DLProcessorRegistryUtil;
052
053 import java.io.File;
054 import java.io.IOException;
055 import java.io.InputStream;
056
057 import java.util.List;
058
059
086 public class DLAppLocalServiceImpl extends DLAppLocalServiceBaseImpl {
087
088
121 @Override
122 public FileEntry addFileEntry(
123 long userId, long repositoryId, long folderId,
124 String sourceFileName, String mimeType, String title,
125 String description, String changeLog, byte[] bytes,
126 ServiceContext serviceContext)
127 throws PortalException, SystemException {
128
129 File file = null;
130
131 try {
132 if (ArrayUtil.isNotEmpty(bytes)) {
133 file = FileUtil.createTempFile(bytes);
134 }
135
136 return addFileEntry(
137 userId, repositoryId, folderId, sourceFileName, mimeType, title,
138 description, changeLog, file, serviceContext);
139 }
140 catch (IOException ioe) {
141 throw new SystemException("Unable to write temporary file", ioe);
142 }
143 finally {
144 FileUtil.delete(file);
145 }
146 }
147
148
182 @Override
183 public FileEntry addFileEntry(
184 long userId, long repositoryId, long folderId,
185 String sourceFileName, String mimeType, String title,
186 String description, String changeLog, File file,
187 ServiceContext serviceContext)
188 throws PortalException, SystemException {
189
190 if ((file == null) || !file.exists() || (file.length() == 0)) {
191 return addFileEntry(
192 userId, repositoryId, folderId, sourceFileName, mimeType, title,
193 description, changeLog, null, 0, serviceContext);
194 }
195
196 mimeType = DLAppUtil.getMimeType(sourceFileName, mimeType, title, file);
197
198 LocalRepository localRepository = getLocalRepository(repositoryId);
199
200 FileEntry fileEntry = localRepository.addFileEntry(
201 userId, folderId, sourceFileName, mimeType, title, description,
202 changeLog, file, serviceContext);
203
204 dlAppHelperLocalService.addFileEntry(
205 userId, fileEntry, fileEntry.getFileVersion(), serviceContext);
206
207 return fileEntry;
208 }
209
210
245 @Override
246 public FileEntry addFileEntry(
247 long userId, long repositoryId, long folderId,
248 String sourceFileName, String mimeType, String title,
249 String description, String changeLog, InputStream is, long size,
250 ServiceContext serviceContext)
251 throws PortalException, SystemException {
252
253 if (is == null) {
254 is = new UnsyncByteArrayInputStream(new byte[0]);
255 size = 0;
256 }
257
258 if (Validator.isNull(mimeType) ||
259 mimeType.equals(ContentTypes.APPLICATION_OCTET_STREAM)) {
260
261 String extension = DLAppUtil.getExtension(title, sourceFileName);
262
263 if (size == 0) {
264 mimeType = MimeTypesUtil.getExtensionContentType(extension);
265 }
266 else {
267 File file = null;
268
269 try {
270 file = FileUtil.createTempFile(is);
271
272 return addFileEntry(
273 userId, repositoryId, folderId, sourceFileName,
274 mimeType, title, description, changeLog, file,
275 serviceContext);
276 }
277 catch (IOException ioe) {
278 throw new SystemException(
279 "Unable to write temporary file", ioe);
280 }
281 finally {
282 FileUtil.delete(file);
283 }
284 }
285 }
286
287 LocalRepository localRepository = getLocalRepository(repositoryId);
288
289 FileEntry fileEntry = localRepository.addFileEntry(
290 userId, folderId, sourceFileName, mimeType, title, description,
291 changeLog, is, size, serviceContext);
292
293 dlAppHelperLocalService.addFileEntry(
294 userId, fileEntry, fileEntry.getFileVersion(), serviceContext);
295
296 return fileEntry;
297 }
298
299
311 @Override
312 public DLFileRank addFileRank(
313 long repositoryId, long companyId, long userId, long fileEntryId,
314 ServiceContext serviceContext)
315 throws SystemException {
316
317 return dlFileRankLocalService.addFileRank(
318 repositoryId, companyId, userId, fileEntryId, serviceContext);
319 }
320
321
337 @Override
338 public DLFileShortcut addFileShortcut(
339 long userId, long repositoryId, long folderId, long toFileEntryId,
340 ServiceContext serviceContext)
341 throws PortalException, SystemException {
342
343 return dlFileShortcutLocalService.addFileShortcut(
344 userId, repositoryId, folderId, toFileEntryId, serviceContext);
345 }
346
347
364 @Override
365 public Folder addFolder(
366 long userId, long repositoryId, long parentFolderId, String name,
367 String description, ServiceContext serviceContext)
368 throws PortalException, SystemException {
369
370 LocalRepository localRepository = getLocalRepository(repositoryId);
371
372 return localRepository.addFolder(
373 userId, parentFolderId, name, description, serviceContext);
374 }
375
376
384 @Override
385 public void deleteAll(long repositoryId)
386 throws PortalException, SystemException {
387
388 LocalRepository localRepository = getLocalRepository(repositoryId);
389
390 localRepository.deleteAll();
391 }
392
393
400 @Override
401 public void deleteFileEntry(long fileEntryId)
402 throws PortalException, SystemException {
403
404 LocalRepository localRepository = getFileEntryLocalRepository(
405 fileEntryId);
406
407 FileEntry fileEntry = localRepository.getFileEntry(fileEntryId);
408
409 dlAppHelperLocalService.deleteFileEntry(fileEntry);
410
411 SystemEventHierarchyEntryThreadLocal.push(FileEntry.class);
412
413 try {
414 localRepository.deleteFileEntry(fileEntryId);
415 }
416 finally {
417 SystemEventHierarchyEntryThreadLocal.pop(FileEntry.class);
418 }
419 }
420
421
428 @Override
429 public void deleteFileRanksByFileEntryId(long fileEntryId)
430 throws SystemException {
431
432 dlFileRankLocalService.deleteFileRanksByFileEntryId(fileEntryId);
433 }
434
435
442 @Override
443 public void deleteFileRanksByUserId(long userId) throws SystemException {
444 dlFileRankLocalService.deleteFileRanksByUserId(userId);
445 }
446
447
455 @Override
456 public void deleteFileShortcut(DLFileShortcut dlFileShortcut)
457 throws PortalException, SystemException {
458
459 dlFileShortcutLocalService.deleteFileShortcut(dlFileShortcut);
460 }
461
462
470 @Override
471 public void deleteFileShortcut(long fileShortcutId)
472 throws PortalException, SystemException {
473
474 dlFileShortcutLocalService.deleteFileShortcut(fileShortcutId);
475 }
476
477
486 @Override
487 public void deleteFileShortcuts(long toFileEntryId)
488 throws PortalException, SystemException {
489
490 dlFileShortcutLocalService.deleteFileShortcuts(toFileEntryId);
491 }
492
493
500 @Override
501 public void deleteFolder(long folderId)
502 throws PortalException, SystemException {
503
504 LocalRepository localRepository = getFolderLocalRepository(folderId);
505
506 localRepository.deleteFolder(folderId);
507 }
508
509
517 @Override
518 public FileEntry getFileEntry(long fileEntryId)
519 throws PortalException, SystemException {
520
521 LocalRepository localRepository = getFileEntryLocalRepository(
522 fileEntryId);
523
524 return localRepository.getFileEntry(fileEntryId);
525 }
526
527
537 @Override
538 public FileEntry getFileEntry(long groupId, long folderId, String title)
539 throws PortalException, SystemException {
540
541 try {
542 LocalRepository localRepository = getLocalRepository(groupId);
543
544 return localRepository.getFileEntry(folderId, title);
545 }
546 catch (NoSuchFileEntryException nsfee) {
547 }
548
549 LocalRepository localRepository = getFolderLocalRepository(folderId);
550
551 return localRepository.getFileEntry(folderId, title);
552 }
553
554
563 @Override
564 public FileEntry getFileEntryByUuidAndGroupId(String uuid, long groupId)
565 throws PortalException, SystemException {
566
567 try {
568 LocalRepository localRepository = getLocalRepository(groupId);
569
570 return localRepository.getFileEntryByUuid(uuid);
571 }
572 catch (NoSuchFileEntryException nsfee) {
573 }
574
575 List<com.liferay.portal.model.Repository> repositories =
576 repositoryPersistence.findByGroupId(groupId);
577
578 for (Repository repository : repositories) {
579 try {
580 LocalRepository localRepository = getLocalRepository(
581 repository.getRepositoryId());
582
583 return localRepository.getFileEntryByUuid(uuid);
584 }
585 catch (NoSuchFileEntryException nsfee) {
586 }
587 }
588
589 StringBundler msg = new StringBundler(6);
590
591 msg.append("No DLFileEntry exists with the key {");
592 msg.append("uuid=");
593 msg.append(uuid);
594 msg.append(", groupId=");
595 msg.append(groupId);
596 msg.append(StringPool.CLOSE_CURLY_BRACE);
597
598 throw new NoSuchFileEntryException(msg.toString());
599 }
600
601
610 @Override
611 public List<DLFileRank> getFileRanks(long repositoryId, long userId)
612 throws SystemException {
613
614 return dlFileRankLocalService.getFileRanks(repositoryId, userId);
615 }
616
617
626 @Override
627 public DLFileShortcut getFileShortcut(long fileShortcutId)
628 throws PortalException, SystemException {
629
630 return dlFileShortcutLocalService.getFileShortcut(fileShortcutId);
631 }
632
633
641 @Override
642 public FileVersion getFileVersion(long fileVersionId)
643 throws PortalException, SystemException {
644
645 LocalRepository localRepository = getFileVersionLocalRepository(
646 fileVersionId);
647
648 return localRepository.getFileVersion(fileVersionId);
649 }
650
651
659 @Override
660 public Folder getFolder(long folderId)
661 throws PortalException, SystemException {
662
663 LocalRepository localRepository = getFolderLocalRepository(folderId);
664
665 return localRepository.getFolder(folderId);
666 }
667
668
678 @Override
679 public Folder getFolder(long repositoryId, long parentFolderId, String name)
680 throws PortalException, SystemException {
681
682 LocalRepository localRepository = getLocalRepository(repositoryId);
683
684 return localRepository.getFolder(parentFolderId, name);
685 }
686
687
697 @Override
698 public Folder getMountFolder(long repositoryId)
699 throws PortalException, SystemException {
700
701 DLFolder dlFolder = dlFolderLocalService.getMountFolder(repositoryId);
702
703 return new LiferayFolder(dlFolder);
704 }
705
706
718 @Override
719 public FileEntry moveFileEntry(
720 long userId, long fileEntryId, long newFolderId,
721 ServiceContext serviceContext)
722 throws PortalException, SystemException {
723
724 SystemEventHierarchyEntryThreadLocal.push(FileEntry.class);
725
726 try {
727 LocalRepository fromLocalRepository = getFileEntryLocalRepository(
728 fileEntryId);
729 LocalRepository toLocalRepository = getFolderLocalRepository(
730 newFolderId, serviceContext.getScopeGroupId());
731
732 if (fromLocalRepository.getRepositoryId() ==
733 toLocalRepository.getRepositoryId()) {
734
735
736
737 return fromLocalRepository.moveFileEntry(
738 userId, fileEntryId, newFolderId, serviceContext);
739 }
740
741
742
743 return moveFileEntries(
744 userId, fileEntryId, newFolderId, fromLocalRepository,
745 toLocalRepository, serviceContext);
746 }
747 finally {
748 SystemEventHierarchyEntryThreadLocal.pop(FileEntry.class);
749 }
750 }
751
752
761 @Override
762 public FileEntry moveFileEntryToTrash(long userId, long fileEntryId)
763 throws PortalException, SystemException {
764
765 LocalRepository localRepository = getFileEntryLocalRepository(
766 fileEntryId);
767
768 FileEntry fileEntry = localRepository.getFileEntry(fileEntryId);
769
770 return dlAppHelperLocalService.moveFileEntryToTrash(userId, fileEntry);
771 }
772
773 @Override
774 public Folder moveFolder(
775 long userId, long folderId, long parentFolderId,
776 ServiceContext serviceContext)
777 throws PortalException, SystemException {
778
779 SystemEventHierarchyEntryThreadLocal.push(Folder.class);
780
781 try {
782 LocalRepository sourceLocalRepository = getFolderLocalRepository(
783 folderId);
784
785 LocalRepository destinationLocalRepository =
786 getFolderLocalRepository(
787 parentFolderId, serviceContext.getScopeGroupId());
788
789 if (parentFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
790 Folder toFolder = destinationLocalRepository.getFolder(
791 parentFolderId);
792
793 if (toFolder.isMountPoint()) {
794 destinationLocalRepository = getLocalRepository(
795 toFolder.getRepositoryId());
796 }
797 }
798
799 if (sourceLocalRepository.getRepositoryId() ==
800 destinationLocalRepository.getRepositoryId()) {
801
802
803
804 Folder folder = sourceLocalRepository.moveFolder(
805 userId, folderId, parentFolderId, serviceContext);
806
807 return folder;
808 }
809
810
811
812 return moveFolders(
813 userId, folderId, parentFolderId, sourceLocalRepository,
814 destinationLocalRepository, serviceContext);
815 }
816 finally {
817 SystemEventHierarchyEntryThreadLocal.pop(Folder.class);
818 }
819 }
820
821
829 @Override
830 public void restoreFileEntryFromTrash(long userId, long fileEntryId)
831 throws PortalException, SystemException {
832
833 LocalRepository localRepository = getFileEntryLocalRepository(
834 fileEntryId);
835
836 FileEntry fileEntry = localRepository.getFileEntry(fileEntryId);
837
838 dlAppHelperLocalService.restoreFileEntryFromTrash(userId, fileEntry);
839 }
840
841
851 @Override
852 public void subscribeFileEntryType(
853 long userId, long groupId, long fileEntryTypeId)
854 throws PortalException, SystemException {
855
856 if (fileEntryTypeId ==
857 DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT) {
858
859 fileEntryTypeId = groupId;
860 }
861
862 subscriptionLocalService.addSubscription(
863 userId, groupId, DLFileEntryType.class.getName(), fileEntryTypeId);
864 }
865
866
876 @Override
877 public void subscribeFolder(long userId, long groupId, long folderId)
878 throws PortalException, SystemException {
879
880 if (folderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
881 folderId = groupId;
882 }
883
884 subscriptionLocalService.addSubscription(
885 userId, groupId, Folder.class.getName(), folderId);
886 }
887
888
898 @Override
899 public void unsubscribeFileEntryType(
900 long userId, long groupId, long fileEntryTypeId)
901 throws PortalException, SystemException {
902
903 if (fileEntryTypeId ==
904 DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT) {
905
906 fileEntryTypeId = groupId;
907 }
908
909 subscriptionLocalService.deleteSubscription(
910 userId, DLFileEntryType.class.getName(), fileEntryTypeId);
911 }
912
913
923 @Override
924 public void unsubscribeFolder(long userId, long groupId, long folderId)
925 throws PortalException, SystemException {
926
927 if (folderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
928 folderId = groupId;
929 }
930
931 subscriptionLocalService.deleteSubscription(
932 userId, Folder.class.getName(), folderId);
933 }
934
935
948 @Override
949 public void updateAsset(
950 long userId, FileEntry fileEntry, FileVersion fileVersion,
951 long[] assetCategoryIds, String[] assetTagNames,
952 long[] assetLinkEntryIds)
953 throws PortalException, SystemException {
954
955 LocalRepository localRepository = getFileEntryLocalRepository(
956 fileEntry.getFileEntryId());
957
958 localRepository.updateAsset(
959 userId, fileEntry, fileVersion, assetCategoryIds, assetTagNames,
960 assetLinkEntryIds);
961 }
962
963
999 @Override
1000 public FileEntry updateFileEntry(
1001 long userId, long fileEntryId, String sourceFileName,
1002 String mimeType, String title, String description, String changeLog,
1003 boolean majorVersion, byte[] bytes, ServiceContext serviceContext)
1004 throws PortalException, SystemException {
1005
1006 File file = null;
1007
1008 try {
1009 if (ArrayUtil.isNotEmpty(bytes)) {
1010 file = FileUtil.createTempFile(bytes);
1011 }
1012
1013 return updateFileEntry(
1014 userId, fileEntryId, sourceFileName, mimeType, title,
1015 description, changeLog, majorVersion, file, serviceContext);
1016 }
1017 catch (IOException ioe) {
1018 throw new SystemException("Unable to write temporary file", ioe);
1019 }
1020 finally {
1021 FileUtil.delete(file);
1022 }
1023 }
1024
1025
1062 @Override
1063 public FileEntry updateFileEntry(
1064 long userId, long fileEntryId, String sourceFileName,
1065 String mimeType, String title, String description, String changeLog,
1066 boolean majorVersion, File file, ServiceContext serviceContext)
1067 throws PortalException, SystemException {
1068
1069 if ((file == null) || !file.exists() || (file.length() == 0)) {
1070 return updateFileEntry(
1071 userId, fileEntryId, sourceFileName, mimeType, title,
1072 description, changeLog, majorVersion, null, 0, serviceContext);
1073 }
1074
1075 mimeType = DLAppUtil.getMimeType(sourceFileName, mimeType, title, file);
1076
1077 LocalRepository localRepository = getFileEntryLocalRepository(
1078 fileEntryId);
1079
1080 FileEntry fileEntry = localRepository.updateFileEntry(
1081 userId, fileEntryId, sourceFileName, mimeType, title, description,
1082 changeLog, majorVersion, file, serviceContext);
1083
1084 DLProcessorRegistryUtil.cleanUp(
1085 DLImpl.getLatestFileVersion(fileEntry, true));
1086
1087 dlAppHelperLocalService.updateFileEntry(
1088 userId, fileEntry, null, fileEntry.getFileVersion(),
1089 serviceContext);
1090
1091 return fileEntry;
1092 }
1093
1094
1131 @Override
1132 public FileEntry updateFileEntry(
1133 long userId, long fileEntryId, String sourceFileName,
1134 String mimeType, String title, String description, String changeLog,
1135 boolean majorVersion, InputStream is, long size,
1136 ServiceContext serviceContext)
1137 throws PortalException, SystemException {
1138
1139 if (Validator.isNull(mimeType) ||
1140 mimeType.equals(ContentTypes.APPLICATION_OCTET_STREAM)) {
1141
1142 String extension = DLAppUtil.getExtension(title, sourceFileName);
1143
1144 if (size == 0) {
1145 mimeType = MimeTypesUtil.getExtensionContentType(extension);
1146 }
1147 else {
1148 File file = null;
1149
1150 try {
1151 file = FileUtil.createTempFile(is);
1152
1153 return updateFileEntry(
1154 userId, fileEntryId, sourceFileName, mimeType, title,
1155 description, changeLog, majorVersion, file,
1156 serviceContext);
1157 }
1158 catch (IOException ioe) {
1159 throw new SystemException(
1160 "Unable to write temporary file", ioe);
1161 }
1162 finally {
1163 FileUtil.delete(file);
1164 }
1165 }
1166 }
1167
1168 LocalRepository localRepository = getFileEntryLocalRepository(
1169 fileEntryId);
1170
1171 FileEntry oldFileEntry = localRepository.getFileEntry(fileEntryId);
1172
1173 FileVersion oldFileVersion = oldFileEntry.getFileVersion();
1174
1175 FileEntry fileEntry = localRepository.updateFileEntry(
1176 userId, fileEntryId, sourceFileName, mimeType, title, description,
1177 changeLog, majorVersion, is, size, serviceContext);
1178
1179 if (is != null) {
1180 DLProcessorRegistryUtil.cleanUp(
1181 DLImpl.getLatestFileVersion(fileEntry, true));
1182
1183 oldFileVersion = null;
1184 }
1185
1186 dlAppHelperLocalService.updateFileEntry(
1187 userId, fileEntry, oldFileVersion, fileEntry.getFileVersion(),
1188 serviceContext);
1189
1190 return fileEntry;
1191 }
1192
1193
1205 @Override
1206 public DLFileRank updateFileRank(
1207 long repositoryId, long companyId, long userId, long fileEntryId,
1208 ServiceContext serviceContext)
1209 throws SystemException {
1210
1211 return dlFileRankLocalService.updateFileRank(
1212 repositoryId, companyId, userId, fileEntryId, serviceContext);
1213 }
1214
1215
1231 @Override
1232 public DLFileShortcut updateFileShortcut(
1233 long userId, long fileShortcutId, long folderId, long toFileEntryId,
1234 ServiceContext serviceContext)
1235 throws PortalException, SystemException {
1236
1237 return dlFileShortcutLocalService.updateFileShortcut(
1238 userId, fileShortcutId, folderId, toFileEntryId, serviceContext);
1239 }
1240
1241
1251 @Override
1252 public void updateFileShortcuts(
1253 long toRepositoryId, long oldToFileEntryId, long newToFileEntryId)
1254 throws SystemException {
1255
1256 dlFileShortcutLocalService.updateFileShortcuts(
1257 oldToFileEntryId, newToFileEntryId);
1258 }
1259
1260
1284 @Override
1285 public Folder updateFolder(
1286 long folderId, long parentFolderId, String name, String description,
1287 ServiceContext serviceContext)
1288 throws PortalException, SystemException {
1289
1290 LocalRepository localRepository = getFolderLocalRepository(folderId);
1291
1292 return localRepository.updateFolder(
1293 folderId, parentFolderId, name, description, serviceContext);
1294 }
1295
1296 protected FileEntry copyFileEntry(
1297 long userId, LocalRepository toLocalRepository, FileEntry fileEntry,
1298 long newFolderId, ServiceContext serviceContext)
1299 throws PortalException, SystemException {
1300
1301 List<FileVersion> fileVersions = fileEntry.getFileVersions(
1302 WorkflowConstants.STATUS_ANY);
1303
1304 FileVersion latestFileVersion = fileVersions.get(
1305 fileVersions.size() - 1);
1306
1307 FileEntry destinationFileEntry = toLocalRepository.addFileEntry(
1308 userId, newFolderId, fileEntry.getTitle(),
1309 latestFileVersion.getMimeType(), latestFileVersion.getTitle(),
1310 latestFileVersion.getDescription(), StringPool.BLANK,
1311 latestFileVersion.getContentStream(false),
1312 latestFileVersion.getSize(), serviceContext);
1313
1314 for (int i = fileVersions.size() - 2; i >= 0; i--) {
1315 FileVersion fileVersion = fileVersions.get(i);
1316
1317 FileVersion previousFileVersion = fileVersions.get(i + 1);
1318
1319 try {
1320 destinationFileEntry = toLocalRepository.updateFileEntry(
1321 userId, destinationFileEntry.getFileEntryId(),
1322 fileEntry.getTitle(), destinationFileEntry.getMimeType(),
1323 destinationFileEntry.getTitle(),
1324 destinationFileEntry.getDescription(), StringPool.BLANK,
1325 DLAppUtil.isMajorVersion(fileVersion, previousFileVersion),
1326 fileVersion.getContentStream(false), fileVersion.getSize(),
1327 serviceContext);
1328 }
1329 catch (PortalException pe) {
1330 toLocalRepository.deleteFileEntry(
1331 destinationFileEntry.getFileEntryId());
1332
1333 throw pe;
1334 }
1335 }
1336
1337 dlAppHelperLocalService.addFileEntry(
1338 userId, destinationFileEntry, destinationFileEntry.getFileVersion(),
1339 serviceContext);
1340
1341 return destinationFileEntry;
1342 }
1343
1344 protected void deleteFileEntry(
1345 long oldFileEntryId, long newFileEntryId,
1346 LocalRepository fromLocalRepository,
1347 LocalRepository toLocalRepository)
1348 throws PortalException, SystemException {
1349
1350 try {
1351 FileEntry fileEntry = fromLocalRepository.getFileEntry(
1352 oldFileEntryId);
1353
1354 fromLocalRepository.deleteFileEntry(oldFileEntryId);
1355
1356 dlAppHelperLocalService.deleteFileEntry(fileEntry);
1357 }
1358 catch (PortalException pe) {
1359 FileEntry fileEntry = toLocalRepository.getFileEntry(
1360 newFileEntryId);
1361
1362 toLocalRepository.deleteFileEntry(newFileEntryId);
1363
1364 dlAppHelperLocalService.deleteFileEntry(fileEntry);
1365
1366 throw pe;
1367 }
1368 }
1369
1370 protected LocalRepository getFileEntryLocalRepository(long fileEntryId)
1371 throws PortalException, SystemException {
1372
1373 try {
1374 return repositoryLocalService.getLocalRepositoryImpl(
1375 0, fileEntryId, 0);
1376 }
1377 catch (InvalidRepositoryIdException irie) {
1378 StringBundler sb = new StringBundler(3);
1379
1380 sb.append("No FileEntry exists with the key {fileEntryId=");
1381 sb.append(fileEntryId);
1382 sb.append("}");
1383
1384 throw new NoSuchFileEntryException(sb.toString(), irie);
1385 }
1386 }
1387
1388 protected LocalRepository getFileVersionLocalRepository(long fileVersionId)
1389 throws PortalException, SystemException {
1390
1391 try {
1392 return repositoryLocalService.getLocalRepositoryImpl(
1393 0, 0, fileVersionId);
1394 }
1395 catch (InvalidRepositoryIdException irie) {
1396 StringBundler sb = new StringBundler(3);
1397
1398 sb.append("No FileVersion exists with the key {fileVersionId=");
1399 sb.append(fileVersionId);
1400 sb.append("}");
1401
1402 throw new NoSuchFileVersionException(sb.toString(), irie);
1403 }
1404 }
1405
1406 protected LocalRepository getFolderLocalRepository(long folderId)
1407 throws PortalException, SystemException {
1408
1409 try {
1410 return repositoryLocalService.getLocalRepositoryImpl(
1411 folderId, 0, 0);
1412 }
1413 catch (InvalidRepositoryIdException irie) {
1414 StringBundler sb = new StringBundler(3);
1415
1416 sb.append("No Folder exists with the key {folderId=");
1417 sb.append(folderId);
1418 sb.append("}");
1419
1420 throw new NoSuchFolderException(sb.toString(), irie);
1421 }
1422 }
1423
1424 protected LocalRepository getFolderLocalRepository(
1425 long folderId, long groupId)
1426 throws PortalException, SystemException {
1427
1428 LocalRepository localRepository = null;
1429
1430 if (folderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
1431 localRepository = getLocalRepository(groupId);
1432 }
1433 else {
1434 localRepository = getFolderLocalRepository(folderId);
1435 }
1436
1437 return localRepository;
1438 }
1439
1440 protected LocalRepository getLocalRepository(long repositoryId)
1441 throws PortalException, SystemException {
1442
1443 try {
1444 return repositoryLocalService.getLocalRepositoryImpl(repositoryId);
1445 }
1446 catch (InvalidRepositoryIdException irie) {
1447 StringBundler sb = new StringBundler(3);
1448
1449 sb.append("No Group exists with the key {repositoryId=");
1450 sb.append(repositoryId);
1451 sb.append("}");
1452
1453 throw new NoSuchGroupException(sb.toString(), irie);
1454 }
1455 }
1456
1457 protected FileEntry moveFileEntries(
1458 long userId, long fileEntryId, long newFolderId,
1459 LocalRepository fromLocalRepository,
1460 LocalRepository toLocalRepository, ServiceContext serviceContext)
1461 throws PortalException, SystemException {
1462
1463 FileEntry sourceFileEntry = fromLocalRepository.getFileEntry(
1464 fileEntryId);
1465
1466 FileEntry destinationFileEntry = copyFileEntry(
1467 userId, toLocalRepository, sourceFileEntry, newFolderId,
1468 serviceContext);
1469
1470 deleteFileEntry(
1471 fileEntryId, destinationFileEntry.getFileEntryId(),
1472 fromLocalRepository, toLocalRepository);
1473
1474 return destinationFileEntry;
1475 }
1476
1477 protected Folder moveFolders(
1478 long userId, long folderId, long parentFolderId,
1479 LocalRepository sourceLocalRepository,
1480 LocalRepository destinationLocalRepository,
1481 ServiceContext serviceContext)
1482 throws PortalException, SystemException {
1483
1484 Folder sourceFolder = sourceLocalRepository.getFolder(folderId);
1485
1486 Folder destinationFolder = destinationLocalRepository.addFolder(
1487 userId, parentFolderId, sourceFolder.getName(),
1488 sourceFolder.getDescription(), serviceContext);
1489
1490 List<Object> foldersAndFileEntriesAndFileShortcuts =
1491 dlAppService.getFoldersAndFileEntriesAndFileShortcuts(
1492 sourceLocalRepository.getRepositoryId(), folderId,
1493 WorkflowConstants.STATUS_ANY, true, QueryUtil.ALL_POS,
1494 QueryUtil.ALL_POS);
1495
1496 try {
1497 for (Object folderAndFileEntryAndFileShortcut :
1498 foldersAndFileEntriesAndFileShortcuts) {
1499
1500 if (folderAndFileEntryAndFileShortcut instanceof FileEntry) {
1501 FileEntry fileEntry =
1502 (FileEntry)folderAndFileEntryAndFileShortcut;
1503
1504 copyFileEntry(
1505 userId, destinationLocalRepository, fileEntry,
1506 destinationFolder.getFolderId(), serviceContext);
1507 }
1508 else if (folderAndFileEntryAndFileShortcut instanceof Folder) {
1509 Folder folder = (Folder)folderAndFileEntryAndFileShortcut;
1510
1511 moveFolders(
1512 userId, folder.getFolderId(),
1513 destinationFolder.getFolderId(), sourceLocalRepository,
1514 destinationLocalRepository, serviceContext);
1515 }
1516 else if (folderAndFileEntryAndFileShortcut
1517 instanceof DLFileShortcut) {
1518
1519 if (destinationFolder.isSupportsShortcuts()) {
1520 DLFileShortcut dlFileShorcut =
1521 (DLFileShortcut)folderAndFileEntryAndFileShortcut;
1522
1523 dlFileShortcutLocalService.addFileShortcut(
1524 userId, dlFileShorcut.getGroupId(),
1525 destinationFolder.getFolderId(),
1526 dlFileShorcut.getToFileEntryId(), serviceContext);
1527 }
1528 }
1529 }
1530 }
1531 catch (PortalException pe) {
1532 destinationLocalRepository.deleteFolder(
1533 destinationFolder.getFolderId());
1534
1535 throw pe;
1536 }
1537
1538 try {
1539 sourceLocalRepository.deleteFolder(folderId);
1540 }
1541 catch (PortalException pe) {
1542 destinationLocalRepository.deleteFolder(
1543 destinationFolder.getFolderId());
1544
1545 throw pe;
1546 }
1547
1548 return destinationFolder;
1549 }
1550
1551 }