001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.journal.trash;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.language.LanguageUtil;
019    import com.liferay.portal.kernel.trash.BaseTrashHandler;
020    import com.liferay.portal.kernel.trash.TrashHandler;
021    import com.liferay.portal.kernel.trash.TrashHandlerRegistryUtil;
022    import com.liferay.portal.kernel.trash.TrashRenderer;
023    import com.liferay.portal.kernel.workflow.WorkflowConstants;
024    import com.liferay.portal.model.ContainerModel;
025    import com.liferay.portlet.journal.model.JournalArticle;
026    import com.liferay.portlet.journal.model.JournalFolder;
027    import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
028    import com.liferay.portlet.journal.service.JournalFolderLocalServiceUtil;
029    
030    import java.util.ArrayList;
031    import java.util.List;
032    import java.util.Locale;
033    
034    /**
035     * @author Eudaldo Alonso
036     */
037    public abstract class JournalBaseTrashHandler extends BaseTrashHandler {
038    
039            @Override
040            public ContainerModel getContainerModel(long containerModelId)
041                    throws PortalException {
042    
043                    return JournalFolderLocalServiceUtil.getFolder(containerModelId);
044            }
045    
046            @Override
047            public String getContainerModelClassName(long classPK) {
048                    return JournalFolder.class.getName();
049            }
050    
051            @Override
052            public String getContainerModelName(long classPK) {
053                    return "folder";
054            }
055    
056            @Override
057            public List<ContainerModel> getContainerModels(
058                            long classPK, long parentContainerModelId, int start, int end)
059                    throws PortalException {
060    
061                    List<JournalFolder> folders = JournalFolderLocalServiceUtil.getFolders(
062                            getGroupId(classPK), parentContainerModelId, start, end);
063    
064                    List<ContainerModel> containerModels = new ArrayList<ContainerModel>(
065                            folders.size());
066    
067                    for (JournalFolder curFolder : folders) {
068                            containerModels.add(curFolder);
069                    }
070    
071                    return containerModels;
072            }
073    
074            @Override
075            public int getContainerModelsCount(
076                            long classPK, long parentContainerModelId)
077                    throws PortalException {
078    
079                    return JournalFolderLocalServiceUtil.getFoldersCount(
080                            getGroupId(classPK), parentContainerModelId);
081            }
082    
083            @Override
084            public List<ContainerModel> getParentContainerModels(long classPK)
085                    throws PortalException {
086    
087                    List<ContainerModel> containerModels = new ArrayList<ContainerModel>();
088    
089                    ContainerModel containerModel = getParentContainerModel(classPK);
090    
091                    if (containerModel == null) {
092                            return containerModels;
093                    }
094    
095                    containerModels.add(containerModel);
096    
097                    while (containerModel.getParentContainerModelId() > 0) {
098                            containerModel = getContainerModel(
099                                    containerModel.getParentContainerModelId());
100    
101                            if (containerModel == null) {
102                                    break;
103                            }
104    
105                            containerModels.add(containerModel);
106                    }
107    
108                    return containerModels;
109            }
110    
111            @Override
112            public String getRootContainerModelName() {
113                    return "folder";
114            }
115    
116            @Override
117            public String getRootContainerModelTitle(
118                    long containerModelId, Locale locale) {
119    
120                    return LanguageUtil.get(locale, "home");
121            }
122    
123            @Override
124            public String getSubcontainerModelName() {
125                    return "folder";
126            }
127    
128            @Override
129            public String getTrashContainedModelName() {
130                    return "article";
131            }
132    
133            @Override
134            public int getTrashContainedModelsCount(long classPK)
135                    throws PortalException {
136    
137                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
138    
139                    return JournalArticleLocalServiceUtil.searchCount(
140                            folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH);
141            }
142    
143            @Override
144            public List<TrashRenderer> getTrashContainedModelTrashRenderers(
145                            long classPK, int start, int end)
146                    throws PortalException {
147    
148                    List<TrashRenderer> trashRenderers = new ArrayList<TrashRenderer>();
149    
150                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
151    
152                    List<JournalArticle> articles =
153                            JournalArticleLocalServiceUtil.search(
154                                    folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH,
155                                    start, end);
156    
157                    for (JournalArticle article : articles) {
158                            TrashHandler trashHandler =
159                                    TrashHandlerRegistryUtil.getTrashHandler(
160                                            JournalArticle.class.getName());
161    
162                            TrashRenderer trashRenderer = trashHandler.getTrashRenderer(
163                                    article.getResourcePrimKey());
164    
165                            trashRenderers.add(trashRenderer);
166                    }
167    
168                    return trashRenderers;
169            }
170    
171            @Override
172            public String getTrashContainerModelName() {
173                    return "folders";
174            }
175    
176            @Override
177            public int getTrashContainerModelsCount(long classPK)
178                    throws PortalException {
179    
180                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
181    
182                    return JournalFolderLocalServiceUtil.getFoldersCount(
183                            folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH);
184            }
185    
186            @Override
187            public List<TrashRenderer> getTrashContainerModelTrashRenderers(
188                            long classPK, int start, int end)
189                    throws PortalException {
190    
191                    List<TrashRenderer> trashRenderers = new ArrayList<TrashRenderer>();
192    
193                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
194    
195                    List<JournalFolder> folders =
196                            JournalFolderLocalServiceUtil.getFolders(
197                                    folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH,
198                                    start, end);
199    
200                    for (JournalFolder curFolder : folders) {
201                            TrashHandler trashHandler =
202                                    TrashHandlerRegistryUtil.getTrashHandler(
203                                            JournalFolder.class.getName());
204    
205                            TrashRenderer trashRenderer = trashHandler.getTrashRenderer(
206                                    curFolder.getPrimaryKey());
207    
208                            trashRenderers.add(trashRenderer);
209                    }
210    
211                    return trashRenderers;
212            }
213    
214            @Override
215            public boolean isMovable() {
216                    return true;
217            }
218    
219            protected abstract long getGroupId(long classPK) throws PortalException;
220    
221    }