001    /**
002     * Copyright (c) 2000-2013 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.exception.SystemException;
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    
033    /**
034     * @author Eudaldo Alonso
035     */
036    public abstract class JournalBaseTrashHandler extends BaseTrashHandler {
037    
038            @Override
039            public ContainerModel getContainerModel(long containerModelId)
040                    throws PortalException, SystemException {
041    
042                    return JournalFolderLocalServiceUtil.getFolder(containerModelId);
043            }
044    
045            @Override
046            public String getContainerModelClassName() {
047                    return JournalFolder.class.getName();
048            }
049    
050            @Override
051            public String getContainerModelName() {
052                    return "folder";
053            }
054    
055            @Override
056            public List<ContainerModel> getContainerModels(
057                            long classPK, long parentContainerModelId, int start, int end)
058                    throws PortalException, SystemException {
059    
060                    List<JournalFolder> folders =
061                            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, SystemException {
078    
079                    return JournalFolderLocalServiceUtil.getFoldersCount(
080                            getGroupId(classPK), parentContainerModelId);
081            }
082    
083            @Override
084            public List<ContainerModel> getParentContainerModels(long classPK)
085                    throws PortalException, SystemException {
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 "home";
114            }
115    
116            @Override
117            public String getTrashContainedModelName() {
118                    return "article";
119            }
120    
121            @Override
122            public int getTrashContainedModelsCount(long classPK)
123                    throws PortalException, SystemException {
124    
125                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
126    
127                    return JournalArticleLocalServiceUtil.searchCount(
128                            folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH);
129            }
130    
131            @Override
132            public List<TrashRenderer> getTrashContainedModelTrashRenderers(
133                            long classPK, int start, int end)
134                    throws PortalException, SystemException {
135    
136                    List<TrashRenderer> trashRenderers = new ArrayList<TrashRenderer>();
137    
138                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
139    
140                    List<JournalArticle> articles =
141                            JournalArticleLocalServiceUtil.search(
142                                    folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH,
143                                    start, end);
144    
145                    for (JournalArticle article : articles) {
146                            TrashHandler trashHandler =
147                                    TrashHandlerRegistryUtil.getTrashHandler(
148                                            JournalArticle.class.getName());
149    
150                            TrashRenderer trashRenderer = trashHandler.getTrashRenderer(
151                                    article.getResourcePrimKey());
152    
153                            trashRenderers.add(trashRenderer);
154                    }
155    
156                    return trashRenderers;
157            }
158    
159            @Override
160            public String getTrashContainerModelName() {
161                    return "folders";
162            }
163    
164            @Override
165            public int getTrashContainerModelsCount(long classPK)
166                    throws PortalException, SystemException {
167    
168                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
169    
170                    return JournalFolderLocalServiceUtil.getFoldersCount(
171                            folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH);
172            }
173    
174            @Override
175            public List<TrashRenderer> getTrashContainerModelTrashRenderers(
176                            long classPK, int start, int end)
177                    throws PortalException, SystemException {
178    
179                    List<TrashRenderer> trashRenderers = new ArrayList<TrashRenderer>();
180    
181                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
182    
183                    List<JournalFolder> folders =
184                            JournalFolderLocalServiceUtil.getFolders(
185                                    folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH,
186                                    start, end);
187    
188                    for (JournalFolder curFolder : folders) {
189                            TrashHandler trashHandler =
190                                    TrashHandlerRegistryUtil.getTrashHandler(
191                                            JournalFolder.class.getName());
192    
193                            TrashRenderer trashRenderer = trashHandler.getTrashRenderer(
194                                    curFolder.getPrimaryKey());
195    
196                            trashRenderers.add(trashRenderer);
197                    }
198    
199                    return trashRenderers;
200            }
201    
202            @Override
203            public boolean isMovable() {
204                    return true;
205            }
206    
207            protected abstract long getGroupId(long classPK)
208                    throws PortalException, SystemException;
209    
210    }