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