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.bookmarks.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.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    import java.util.Locale;
033    
034    /**
035     * Represents the trash handler for bookmarks folder entity.
036     *
037     * @author Eudaldo Alonso
038     */
039    public abstract class BookmarksBaseTrashHandler extends BaseTrashHandler {
040    
041            @Override
042            public ContainerModel getContainerModel(long containerModelId)
043                    throws PortalException {
044    
045                    return BookmarksFolderLocalServiceUtil.getFolder(containerModelId);
046            }
047    
048            @Override
049            public String getContainerModelClassName(long classPK) {
050                    return BookmarksFolder.class.getName();
051            }
052    
053            @Override
054            public String getContainerModelName(long classPK) {
055                    return "folder";
056            }
057    
058            @Override
059            public List<ContainerModel> getContainerModels(
060                            long classPK, long parentContainerModelId, int start, int end)
061                    throws PortalException {
062    
063                    List<BookmarksFolder> folders =
064                            BookmarksFolderLocalServiceUtil.getFolders(
065                                    getGroupId(classPK), parentContainerModelId, start, end);
066    
067                    List<ContainerModel> containerModels = new ArrayList<ContainerModel>(
068                            folders.size());
069    
070                    for (BookmarksFolder curFolder : folders) {
071                            containerModels.add(curFolder);
072                    }
073    
074                    return containerModels;
075            }
076    
077            @Override
078            public int getContainerModelsCount(
079                            long classPK, long parentContainerModelId)
080                    throws PortalException {
081    
082                    return BookmarksFolderLocalServiceUtil.getFoldersCount(
083                            getGroupId(classPK), parentContainerModelId);
084            }
085    
086            @Override
087            public List<ContainerModel> getParentContainerModels(long classPK)
088                    throws PortalException {
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 "folder";
117            }
118    
119            @Override
120            public String getRootContainerModelTitle(
121                    long containerModelId, Locale locale) {
122    
123                    return LanguageUtil.get(locale, "home");
124            }
125    
126            @Override
127            public String getSubcontainerModelName() {
128                    return "folder";
129            }
130    
131            @Override
132            public String getTrashContainedModelName() {
133                    return "bookmarks";
134            }
135    
136            @Override
137            public int getTrashContainedModelsCount(long classPK)
138                    throws PortalException {
139    
140                    BookmarksFolder folder = BookmarksFolderLocalServiceUtil.getFolder(
141                            classPK);
142    
143                    return BookmarksEntryLocalServiceUtil.getEntriesCount(
144                            folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH);
145            }
146    
147            @Override
148            public List<TrashRenderer> getTrashContainedModelTrashRenderers(
149                            long classPK, int start, int end)
150                    throws PortalException {
151    
152                    List<TrashRenderer> trashRenderers = new ArrayList<TrashRenderer>();
153    
154                    BookmarksFolder folder = BookmarksFolderLocalServiceUtil.getFolder(
155                            classPK);
156    
157                    List<BookmarksEntry> entries =
158                            BookmarksEntryLocalServiceUtil.getEntries(
159                                    folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH,
160                                    start, end);
161    
162                    for (BookmarksEntry entry : entries) {
163                            TrashHandler trashHandler =
164                                    TrashHandlerRegistryUtil.getTrashHandler(
165                                            BookmarksEntry.class.getName());
166    
167                            TrashRenderer trashRenderer = trashHandler.getTrashRenderer(
168                                    entry.getEntryId());
169    
170                            trashRenderers.add(trashRenderer);
171                    }
172    
173                    return trashRenderers;
174            }
175    
176            @Override
177            public String getTrashContainerModelName() {
178                    return "folders";
179            }
180    
181            @Override
182            public int getTrashContainerModelsCount(long classPK)
183                    throws PortalException {
184    
185                    BookmarksFolder folder = BookmarksFolderLocalServiceUtil.getFolder(
186                            classPK);
187    
188                    return BookmarksFolderLocalServiceUtil.getFoldersCount(
189                            folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH);
190            }
191    
192            @Override
193            public List<TrashRenderer> getTrashContainerModelTrashRenderers(
194                            long classPK, int start, int end)
195                    throws PortalException {
196    
197                    List<TrashRenderer> trashRenderers = new ArrayList<TrashRenderer>();
198    
199                    BookmarksFolder folder = BookmarksFolderLocalServiceUtil.getFolder(
200                            classPK);
201    
202                    List<BookmarksFolder> folders =
203                            BookmarksFolderLocalServiceUtil.getFolders(
204                                    folder.getGroupId(), classPK, WorkflowConstants.STATUS_IN_TRASH,
205                                    start, end);
206    
207                    for (BookmarksFolder curFolder : folders) {
208                            TrashHandler trashHandler =
209                                    TrashHandlerRegistryUtil.getTrashHandler(
210                                            BookmarksFolder.class.getName());
211    
212                            TrashRenderer trashRenderer = trashHandler.getTrashRenderer(
213                                    curFolder.getPrimaryKey());
214    
215                            trashRenderers.add(trashRenderer);
216                    }
217    
218                    return trashRenderers;
219            }
220    
221            @Override
222            public boolean isMovable() {
223                    return true;
224            }
225    
226            protected abstract long getGroupId(long classPK) throws PortalException;
227    
228    }