/modules/apps/document-library/document-library-service/src/main/java/com/liferay/document/library/internal/repository/capabilities/LiferayTrashCapability.java
https://github.com/kiyoshilee/liferay-portal · Java · 371 lines · 277 code · 78 blank · 16 comment · 22 complexity · b28bc605cfd0564f625d8266760d3a01 MD5 · raw file
- /**
- * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
- package com.liferay.document.library.internal.repository.capabilities;
- import com.liferay.document.library.kernel.model.DLFileEntry;
- import com.liferay.document.library.kernel.model.DLFileEntryConstants;
- import com.liferay.document.library.kernel.model.DLFileVersion;
- import com.liferay.document.library.kernel.model.DLFolder;
- import com.liferay.document.library.kernel.model.DLFolderConstants;
- import com.liferay.document.library.kernel.service.DLAppHelperLocalService;
- import com.liferay.portal.kernel.dao.orm.QueryDefinition;
- import com.liferay.portal.kernel.dao.orm.QueryUtil;
- import com.liferay.portal.kernel.exception.PortalException;
- import com.liferay.portal.kernel.model.Repository;
- import com.liferay.portal.kernel.repository.LocalRepository;
- import com.liferay.portal.kernel.repository.capabilities.TrashCapability;
- import com.liferay.portal.kernel.repository.event.RepositoryEventAware;
- import com.liferay.portal.kernel.repository.event.RepositoryEventListener;
- import com.liferay.portal.kernel.repository.event.RepositoryEventType;
- import com.liferay.portal.kernel.repository.model.FileEntry;
- import com.liferay.portal.kernel.repository.model.FileShortcut;
- import com.liferay.portal.kernel.repository.model.Folder;
- import com.liferay.portal.kernel.repository.registry.RepositoryEventRegistry;
- import com.liferay.portal.kernel.service.ServiceContext;
- import com.liferay.portal.kernel.workflow.WorkflowConstants;
- import com.liferay.portal.repository.capabilities.util.DLAppServiceAdapter;
- import com.liferay.portal.repository.capabilities.util.DLFileEntryServiceAdapter;
- import com.liferay.portal.repository.capabilities.util.DLFolderServiceAdapter;
- import com.liferay.portal.repository.capabilities.util.RepositoryServiceAdapter;
- import com.liferay.portal.repository.liferayrepository.model.LiferayFileEntry;
- import com.liferay.trash.model.TrashEntry;
- import com.liferay.trash.service.TrashEntryLocalService;
- import com.liferay.trash.service.TrashVersionLocalService;
- import java.util.List;
- /**
- * @author Adolfo Pérez
- */
- public class LiferayTrashCapability
- implements RepositoryEventAware, TrashCapability {
- public LiferayTrashCapability(
- DLAppHelperLocalService dlAppHelperLocalService,
- DLAppServiceAdapter dlAppServiceAdapter,
- DLFileEntryServiceAdapter dlFileEntryServiceAdapter,
- DLFolderServiceAdapter dlFolderServiceAdapter,
- RepositoryServiceAdapter repositoryServiceAdapter,
- TrashEntryLocalService trashEntryLocalService,
- TrashVersionLocalService trashVersionLocalService) {
- _dlAppHelperLocalService = dlAppHelperLocalService;
- _dlAppServiceAdapter = dlAppServiceAdapter;
- _dlFileEntryServiceAdapter = dlFileEntryServiceAdapter;
- _dlFolderServiceAdapter = dlFolderServiceAdapter;
- _repositoryServiceAdapter = repositoryServiceAdapter;
- _trashEntryLocalService = trashEntryLocalService;
- _trashVersionLocalService = trashVersionLocalService;
- }
- @Override
- public void deleteFileEntry(FileEntry fileEntry) throws PortalException {
- deleteTrashEntry(fileEntry);
- _dlAppServiceAdapter.deleteFileEntry(fileEntry.getFileEntryId());
- }
- @Override
- public void deleteFolder(Folder folder) throws PortalException {
- List<DLFileEntry> dlFileEntries =
- _dlFileEntryServiceAdapter.getGroupFileEntries(
- folder.getGroupId(), 0, folder.getRepositoryId(),
- folder.getFolderId(), QueryUtil.ALL_POS, QueryUtil.ALL_POS,
- null);
- for (DLFileEntry dlFileEntry : dlFileEntries) {
- FileEntry fileEntry = new LiferayFileEntry(dlFileEntry);
- _dlAppHelperLocalService.deleteFileEntry(fileEntry);
- deleteTrashEntry(fileEntry);
- }
- _dlAppHelperLocalService.deleteFolder(folder);
- deleteTrashEntry(folder);
- _dlFolderServiceAdapter.deleteFolder(folder.getFolderId(), false);
- }
- @Override
- public boolean isInTrash(FileEntry fileEntry) throws PortalException {
- DLFileEntry dlFileEntry = (DLFileEntry)fileEntry.getModel();
- return dlFileEntry.isInTrash();
- }
- @Override
- public boolean isInTrash(Folder folder) {
- DLFolder dlFolder = (DLFolder)folder.getModel();
- return dlFolder.isInTrash();
- }
- @Override
- public FileEntry moveFileEntryFromTrash(
- long userId, FileEntry fileEntry, Folder newFolder,
- ServiceContext serviceContext)
- throws PortalException {
- long newFolderId = DLFolderConstants.DEFAULT_PARENT_FOLDER_ID;
- if (newFolder != null) {
- newFolderId = newFolder.getFolderId();
- }
- return _dlAppHelperLocalService.moveFileEntryFromTrash(
- userId, fileEntry, newFolderId, serviceContext);
- }
- @Override
- public FileEntry moveFileEntryToTrash(long userId, FileEntry fileEntry)
- throws PortalException {
- return _dlAppHelperLocalService.moveFileEntryToTrash(userId, fileEntry);
- }
- @Override
- public FileShortcut moveFileShortcutFromTrash(
- long userId, FileShortcut fileShortcut, Folder newFolder,
- ServiceContext serviceContext)
- throws PortalException {
- long newFolderId = DLFolderConstants.DEFAULT_PARENT_FOLDER_ID;
- if (newFolder != null) {
- newFolderId = newFolder.getFolderId();
- }
- return _dlAppHelperLocalService.moveFileShortcutFromTrash(
- userId, fileShortcut, newFolderId, serviceContext);
- }
- @Override
- public FileShortcut moveFileShortcutToTrash(
- long userId, FileShortcut fileShortcut)
- throws PortalException {
- return _dlAppHelperLocalService.moveFileShortcutToTrash(
- userId, fileShortcut);
- }
- @Override
- public Folder moveFolderFromTrash(
- long userId, Folder folder, Folder destinationFolder,
- ServiceContext serviceContext)
- throws PortalException {
- long destinationFolderId = DLFolderConstants.DEFAULT_PARENT_FOLDER_ID;
- if (destinationFolder != null) {
- destinationFolderId = destinationFolder.getFolderId();
- }
- return _dlAppHelperLocalService.moveFolderFromTrash(
- userId, folder, destinationFolderId, serviceContext);
- }
- @Override
- public Folder moveFolderToTrash(long userId, Folder folder)
- throws PortalException {
- return _dlAppHelperLocalService.moveFolderToTrash(userId, folder);
- }
- @Override
- public void registerRepositoryEventListeners(
- RepositoryEventRegistry repositoryEventRegistry) {
- repositoryEventRegistry.registerRepositoryEventListener(
- RepositoryEventType.Delete.class, FileEntry.class,
- new DeleteFileEntryRepositoryEventListener());
- repositoryEventRegistry.registerRepositoryEventListener(
- RepositoryEventType.Delete.class, Folder.class,
- new DeleteFolderRepositoryEventListener());
- repositoryEventRegistry.registerRepositoryEventListener(
- RepositoryEventType.Delete.class, LocalRepository.class,
- new DeleteLocalRepositoryEventListener());
- }
- @Override
- public void restoreFileEntryFromTrash(long userId, FileEntry fileEntry)
- throws PortalException {
- _dlAppHelperLocalService.restoreFileEntryFromTrash(userId, fileEntry);
- }
- @Override
- public void restoreFileShortcutFromTrash(
- long userId, FileShortcut fileShortcut)
- throws PortalException {
- _dlAppHelperLocalService.restoreFileShortcutFromTrash(
- userId, fileShortcut);
- }
- @Override
- public void restoreFolderFromTrash(long userId, Folder folder)
- throws PortalException {
- _dlAppHelperLocalService.restoreFolderFromTrash(userId, folder);
- }
- protected void deleteRepositoryTrashEntries(
- long repositoryId, String className) {
- List<TrashEntry> trashEntries = _trashEntryLocalService.getEntries(
- repositoryId, className);
- for (TrashEntry trashEntry : trashEntries) {
- _trashEntryLocalService.deleteTrashEntry(trashEntry);
- }
- }
- protected void deleteTrashEntries(long repositoryId)
- throws PortalException {
- Repository repository = _repositoryServiceAdapter.fetchRepository(
- repositoryId);
- if (repository == null) {
- deleteRepositoryTrashEntries(
- repositoryId, DLFileEntry.class.getName());
- deleteRepositoryTrashEntries(
- repositoryId, DLFolder.class.getName());
- }
- else {
- deleteTrashEntries(
- repository.getGroupId(), repository.getDlFolderId());
- }
- }
- protected void deleteTrashEntries(long groupId, long dlFolderId)
- throws PortalException {
- QueryDefinition<Object> queryDefinition = new QueryDefinition<>();
- queryDefinition.setStatus(WorkflowConstants.STATUS_ANY);
- List<Object> foldersAndFileEntriesAndFileShortcuts =
- _dlFolderServiceAdapter.getFoldersAndFileEntriesAndFileShortcuts(
- groupId, dlFolderId, null, true, queryDefinition);
- for (Object folderFileEntryOrFileShortcut :
- foldersAndFileEntriesAndFileShortcuts) {
- if (folderFileEntryOrFileShortcut instanceof DLFileEntry) {
- deleteTrashEntry((DLFileEntry)folderFileEntryOrFileShortcut);
- }
- else if (folderFileEntryOrFileShortcut instanceof DLFolder) {
- DLFolder dlFolder = (DLFolder)folderFileEntryOrFileShortcut;
- deleteTrashEntries(
- dlFolder.getGroupId(), dlFolder.getFolderId());
- deleteTrashEntry(dlFolder);
- }
- }
- }
- protected void deleteTrashEntry(DLFileEntry dlFileEntry) {
- if (!dlFileEntry.isInTrash()) {
- return;
- }
- if (dlFileEntry.isInTrashExplicitly()) {
- _trashEntryLocalService.deleteEntry(
- DLFileEntryConstants.getClassName(),
- dlFileEntry.getFileEntryId());
- }
- else {
- List<DLFileVersion> dlFileVersions = dlFileEntry.getFileVersions(
- WorkflowConstants.STATUS_ANY);
- for (DLFileVersion dlFileVersion : dlFileVersions) {
- _trashVersionLocalService.deleteTrashVersion(
- DLFileVersion.class.getName(),
- dlFileVersion.getFileVersionId());
- }
- }
- }
- protected void deleteTrashEntry(DLFolder dlFolder) {
- if (!dlFolder.isInTrash()) {
- return;
- }
- if (dlFolder.isInTrashExplicitly()) {
- _trashEntryLocalService.deleteEntry(
- DLFolderConstants.getClassName(), dlFolder.getFolderId());
- }
- else {
- _trashVersionLocalService.deleteTrashVersion(
- DLFolderConstants.getClassName(), dlFolder.getFolderId());
- }
- }
- protected void deleteTrashEntry(FileEntry fileEntry) {
- deleteTrashEntry((DLFileEntry)fileEntry.getModel());
- }
- protected void deleteTrashEntry(Folder folder) {
- deleteTrashEntry((DLFolder)folder.getModel());
- }
- private final DLAppHelperLocalService _dlAppHelperLocalService;
- private final DLAppServiceAdapter _dlAppServiceAdapter;
- private final DLFileEntryServiceAdapter _dlFileEntryServiceAdapter;
- private final DLFolderServiceAdapter _dlFolderServiceAdapter;
- private final RepositoryServiceAdapter _repositoryServiceAdapter;
- private final TrashEntryLocalService _trashEntryLocalService;
- private final TrashVersionLocalService _trashVersionLocalService;
- private class DeleteFileEntryRepositoryEventListener
- implements RepositoryEventListener
- <RepositoryEventType.Delete, FileEntry> {
- @Override
- public void execute(FileEntry fileEntry) {
- LiferayTrashCapability.this.deleteTrashEntry(fileEntry);
- }
- }
- private class DeleteFolderRepositoryEventListener
- implements RepositoryEventListener<RepositoryEventType.Delete, Folder> {
- @Override
- public void execute(Folder folder) {
- LiferayTrashCapability.this.deleteTrashEntry(folder);
- }
- }
- private class DeleteLocalRepositoryEventListener
- implements RepositoryEventListener
- <RepositoryEventType.Delete, LocalRepository> {
- @Override
- public void execute(LocalRepository localRepository)
- throws PortalException {
- LiferayTrashCapability.this.deleteTrashEntries(
- localRepository.getRepositoryId());
- }
- }
- }