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.model.ContainerModel;
024    import com.liferay.portlet.journal.model.JournalArticle;
025    import com.liferay.portlet.journal.model.JournalFolder;
026    import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
027    import com.liferay.portlet.journal.service.JournalFolderLocalServiceUtil;
028    
029    import java.util.ArrayList;
030    import java.util.List;
031    
032    /**
033     * @author Eudaldo Alonso
034     */
035    public abstract class JournalBaseTrashHandler extends BaseTrashHandler {
036    
037            @Override
038            public ContainerModel getContainerModel(long containerModelId)
039                    throws PortalException, SystemException {
040    
041                    return JournalFolderLocalServiceUtil.getFolder(containerModelId);
042            }
043    
044            @Override
045            public String getContainerModelClassName() {
046                    return JournalFolder.class.getName();
047            }
048    
049            @Override
050            public String getContainerModelName() {
051                    return "folder";
052            }
053    
054            @Override
055            public List<ContainerModel> getContainerModels(
056                            long classPK, long parentContainerModelId, int start, int end)
057                    throws PortalException, SystemException {
058    
059                    JournalFolder folder = getJournalFolder(classPK);
060    
061                    List<JournalFolder> folders =
062                            JournalFolderLocalServiceUtil.getFolders(
063                                    folder.getGroupId(), parentContainerModelId, start, end);
064    
065                    List<ContainerModel> containerModels = new ArrayList<ContainerModel>(
066                            folders.size());
067    
068                    for (JournalFolder curFolder : folders) {
069                            containerModels.add(curFolder);
070                    }
071    
072                    return containerModels;
073            }
074    
075            @Override
076            public int getContainerModelsCount(
077                            long classPK, long parentContainerModelId)
078                    throws PortalException, SystemException {
079    
080                    JournalFolder folder = getJournalFolder(classPK);
081    
082                    return JournalFolderLocalServiceUtil.getFoldersCount(
083                            folder.getGroupId(), parentContainerModelId);
084            }
085    
086            @Override
087            public List<ContainerModel> getParentContainerModels(long classPK)
088                    throws PortalException, SystemException {
089    
090                    List<ContainerModel> containerModels = new ArrayList<ContainerModel>();
091    
092                    ContainerModel containerModel = getParentContainerModel(classPK);
093    
094                    if (containerModel == null) {
095                            return containerModels;
096                    }
097    
098                    containerModels.add(containerModel);
099    
100                    while (containerModel.getParentContainerModelId() > 0) {
101                            containerModel = getContainerModel(
102                                    containerModel.getParentContainerModelId());
103    
104                            if (containerModel == null) {
105                                    break;
106                            }
107    
108                            containerModels.add(containerModel);
109                    }
110    
111                    return containerModels;
112            }
113    
114            @Override
115            public String getRootContainerModelName() {
116                    return "home";
117            }
118    
119            @Override
120            public String getTrashContainedModelName() {
121                    return "article";
122            }
123    
124            @Override
125            public int getTrashContainedModelsCount(long classPK)
126                    throws PortalException, SystemException {
127    
128                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
129    
130                    return JournalArticleLocalServiceUtil.getArticlesCount(
131                            folder.getGroupId(), classPK);
132            }
133    
134            @Override
135            public List<TrashRenderer> getTrashContainedModelTrashRenderers(
136                            long classPK, int start, int end)
137                    throws PortalException, SystemException {
138    
139                    List<TrashRenderer> trashRenderers = new ArrayList<TrashRenderer>();
140    
141                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
142    
143                    List<JournalArticle> articles =
144                            JournalArticleLocalServiceUtil.getArticles(
145                                    folder.getGroupId(), classPK, start, end);
146    
147                    for (JournalArticle article : articles) {
148                            TrashHandler trashHandler =
149                                    TrashHandlerRegistryUtil.getTrashHandler(
150                                            JournalArticle.class.getName());
151    
152                            TrashRenderer trashRenderer = trashHandler.getTrashRenderer(
153                                    article.getResourcePrimKey());
154    
155                            trashRenderers.add(trashRenderer);
156                    }
157    
158                    return trashRenderers;
159            }
160    
161            @Override
162            public String getTrashContainerModelName() {
163                    return "folders";
164            }
165    
166            @Override
167            public int getTrashContainerModelsCount(long classPK)
168                    throws PortalException, SystemException {
169    
170                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
171    
172                    return JournalFolderLocalServiceUtil.getFoldersCount(
173                            folder.getGroupId(), classPK);
174            }
175    
176            @Override
177            public List<TrashRenderer> getTrashContainerModelTrashRenderers(
178                            long classPK, int start, int end)
179                    throws PortalException, SystemException {
180    
181                    List<TrashRenderer> trashRenderers = new ArrayList<TrashRenderer>();
182    
183                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
184    
185                    List<JournalFolder> folders =
186                            JournalFolderLocalServiceUtil.getFolders(
187                                            folder.getGroupId(), classPK, start, end);
188    
189                    for (JournalFolder curFolder : folders) {
190                            TrashHandler trashHandler =
191                                    TrashHandlerRegistryUtil.getTrashHandler(
192                                            JournalFolder.class.getName());
193    
194                            TrashRenderer trashRenderer = trashHandler.getTrashRenderer(
195                                    curFolder.getPrimaryKey());
196    
197                            trashRenderers.add(trashRenderer);
198                    }
199    
200                    return trashRenderers;
201            }
202    
203            @Override
204            public boolean isMovable() {
205                    return true;
206            }
207    
208            protected abstract JournalFolder getJournalFolder(long classPK)
209                    throws PortalException, SystemException;
210    
211    }