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