/** * 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.journal.internal.trash; import com.liferay.journal.model.JournalArticle; import com.liferay.journal.model.JournalFolder; import com.liferay.journal.service.JournalArticleLocalServiceUtil; import com.liferay.journal.service.JournalFolderLocalServiceUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.model.ContainerModel; import com.liferay.portal.kernel.model.TrashedModel; import com.liferay.portal.kernel.trash.BaseTrashHandler; import com.liferay.portal.kernel.trash.TrashHandler; import com.liferay.portal.kernel.trash.TrashHandlerRegistryUtil; import com.liferay.portal.kernel.trash.TrashRenderer; import com.liferay.portal.kernel.util.OrderByComparator; import com.liferay.portal.kernel.workflow.WorkflowConstants; import java.util.ArrayList; import java.util.List; /** * @author Eudaldo Alonso */ public abstract class JournalBaseTrashHandler extends BaseTrashHandler { @Override public ContainerModel getContainerModel(long containerModelId) throws PortalException { return JournalFolderLocalServiceUtil.getFolder(containerModelId); } @Override public String getContainerModelClassName(long classPK) { return JournalFolder.class.getName(); } @Override public String getContainerModelName() { return "folder"; } @Override public List<ContainerModel> getContainerModels( long classPK, long parentContainerModelId, int start, int end) throws PortalException { List<JournalFolder> folders = JournalFolderLocalServiceUtil.getFolders( getGroupId(classPK), parentContainerModelId, start, end); List<ContainerModel> containerModels = new ArrayList<>(folders.size()); for (JournalFolder curFolder : folders) { containerModels.add(curFolder); } return containerModels; } @Override public int getContainerModelsCount( long classPK, long parentContainerModelId) throws PortalException { return JournalFolderLocalServiceUtil.getFoldersCount( getGroupId(classPK), parentContainerModelId); } @Override public List<ContainerModel> getParentContainerModels(long classPK) throws PortalException { List<ContainerModel> containerModels = new ArrayList<>(); ContainerModel containerModel = getParentContainerModel(classPK); if (containerModel == null) { return containerModels; } containerModels.add(containerModel); while (containerModel.getParentContainerModelId() > 0) { containerModel = getContainerModel( containerModel.getParentContainerModelId()); if (containerModel == null) { break; } containerModels.add(containerModel); } return containerModels; } @Override public String getRootContainerModelName() { return "folder"; } @Override public String getSubcontainerModelName() { return "folder"; } @Override public String getTrashContainedModelName() { return "article"; } @Override public int getTrashContainedModelsCount(long classPK) throws PortalException { JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK); return JournalArticleLocalServiceUtil.searchCount( folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH); } @Override public List<TrashRenderer> getTrashContainedModelTrashRenderers( long classPK, int start, int end) throws PortalException { List<TrashRenderer> trashRenderers = new ArrayList<>(); JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK); List<JournalArticle> articles = JournalArticleLocalServiceUtil.search( folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH, start, end); for (JournalArticle article : articles) { TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( JournalArticle.class.getName()); TrashRenderer trashRenderer = trashHandler.getTrashRenderer( article.getResourcePrimKey()); trashRenderers.add(trashRenderer); } return trashRenderers; } @Override public String getTrashContainerModelName() { return "folders"; } @Override public int getTrashContainerModelsCount(long classPK) throws PortalException { JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK); return JournalFolderLocalServiceUtil.getFoldersCount( folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH); } @Override public List<TrashRenderer> getTrashContainerModelTrashRenderers( long classPK, int start, int end) throws PortalException { List<TrashRenderer> trashRenderers = new ArrayList<>(); JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK); List<JournalFolder> folders = JournalFolderLocalServiceUtil.getFolders( folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH, start, end); for (JournalFolder curFolder : folders) { TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( JournalFolder.class.getName()); TrashRenderer trashRenderer = trashHandler.getTrashRenderer( curFolder.getPrimaryKey()); trashRenderers.add(trashRenderer); } return trashRenderers; } @Override public int getTrashModelsCount(long classPK) throws PortalException { JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK); return JournalFolderLocalServiceUtil.getFoldersAndArticlesCount( folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH); } @Override public List<TrashedModel> getTrashModelTrashedModels( long classPK, int start, int end, OrderByComparator obc) throws PortalException { List<TrashedModel> trashedModels = new ArrayList<>(); JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK); List<Object> foldersAndArticles = JournalFolderLocalServiceUtil.getFoldersAndArticles( folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH, start, end, obc); for (Object folderOrArticle : foldersAndArticles) { if (folderOrArticle instanceof JournalFolder) { JournalFolder curFolder = (JournalFolder)folderOrArticle; trashedModels.add(curFolder); } else { JournalArticle article = (JournalArticle)folderOrArticle; trashedModels.add(article); } } return trashedModels; } @Override public boolean isMovable() { return true; } protected abstract long getGroupId(long classPK) throws PortalException; }