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.service.impl;
016    
017    import com.liferay.portal.kernel.dao.orm.QueryDefinition;
018    import com.liferay.portal.kernel.exception.PortalException;
019    import com.liferay.portal.kernel.workflow.WorkflowConstants;
020    import com.liferay.portal.security.permission.ActionKeys;
021    import com.liferay.portal.service.ServiceContext;
022    import com.liferay.portlet.bookmarks.model.BookmarksFolder;
023    import com.liferay.portlet.bookmarks.service.base.BookmarksFolderServiceBaseImpl;
024    import com.liferay.portlet.bookmarks.service.permission.BookmarksFolderPermission;
025    
026    import java.util.ArrayList;
027    import java.util.List;
028    
029    /**
030     * @author Brian Wing Shun Chan
031     */
032    public class BookmarksFolderServiceImpl extends BookmarksFolderServiceBaseImpl {
033    
034            @Override
035            public BookmarksFolder addFolder(
036                            long parentFolderId, String name, String description,
037                            ServiceContext serviceContext)
038                    throws PortalException {
039    
040                    BookmarksFolderPermission.check(
041                            getPermissionChecker(), serviceContext.getScopeGroupId(),
042                            parentFolderId, ActionKeys.ADD_FOLDER);
043    
044                    return bookmarksFolderLocalService.addFolder(
045                            getUserId(), parentFolderId, name, description, serviceContext);
046            }
047    
048            @Override
049            public void deleteFolder(long folderId) throws PortalException {
050                    BookmarksFolder folder = bookmarksFolderLocalService.getFolder(
051                            folderId);
052    
053                    BookmarksFolderPermission.check(
054                            getPermissionChecker(), folder, ActionKeys.DELETE);
055    
056                    bookmarksFolderLocalService.deleteFolder(folderId);
057            }
058    
059            @Override
060            public void deleteFolder(long folderId, boolean includeTrashedEntries)
061                    throws PortalException {
062    
063                    BookmarksFolder folder = bookmarksFolderLocalService.getFolder(
064                            folderId);
065    
066                    BookmarksFolderPermission.check(
067                            getPermissionChecker(), folder, ActionKeys.DELETE);
068    
069                    bookmarksFolderLocalService.deleteFolder(
070                            folderId, includeTrashedEntries);
071            }
072    
073            @Override
074            public BookmarksFolder getFolder(long folderId) throws PortalException {
075                    BookmarksFolder folder = bookmarksFolderLocalService.getFolder(
076                            folderId);
077    
078                    BookmarksFolderPermission.check(
079                            getPermissionChecker(), folder, ActionKeys.VIEW);
080    
081                    return folder;
082            }
083    
084            @Override
085            public List<Long> getFolderIds(long groupId, long folderId)
086                    throws PortalException {
087    
088                    BookmarksFolderPermission.check(
089                            getPermissionChecker(), groupId, folderId, ActionKeys.VIEW);
090    
091                    List<Long> folderIds = getSubfolderIds(groupId, folderId, true);
092    
093                    folderIds.add(0, folderId);
094    
095                    return folderIds;
096            }
097    
098            @Override
099            public List<BookmarksFolder> getFolders(long groupId) {
100                    return bookmarksFolderPersistence.filterFindByGroupId(groupId);
101            }
102    
103            @Override
104            public List<BookmarksFolder> getFolders(long groupId, long parentFolderId) {
105                    return bookmarksFolderPersistence.filterFindByG_P_S(
106                            groupId, parentFolderId, WorkflowConstants.STATUS_APPROVED);
107            }
108    
109            @Override
110            public List<BookmarksFolder> getFolders(
111                    long groupId, long parentFolderId, int start, int end) {
112    
113                    return getFolders(
114                            groupId, parentFolderId, WorkflowConstants.STATUS_APPROVED, start,
115                            end);
116            }
117    
118            @Override
119            public List<BookmarksFolder> getFolders(
120                    long groupId, long parentFolderId, int status, int start, int end) {
121    
122                    if (status == WorkflowConstants.STATUS_ANY) {
123                            return bookmarksFolderPersistence.filterFindByG_P(
124                                    groupId, parentFolderId, start, end);
125                    }
126                    else {
127                            return bookmarksFolderPersistence.filterFindByG_P_S(
128                                    groupId, parentFolderId, status, start, end);
129                    }
130            }
131    
132            @Override
133            public List<Object> getFoldersAndEntries(long groupId, long folderId) {
134                    return getFoldersAndEntries(
135                            groupId, folderId, WorkflowConstants.STATUS_ANY);
136            }
137    
138            @Override
139            public List<Object> getFoldersAndEntries(
140                    long groupId, long folderId, int status) {
141    
142                    QueryDefinition<?> queryDefinition = new QueryDefinition<Object>(
143                            status);
144    
145                    return bookmarksFolderFinder.filterFindBF_E_ByG_F(
146                            groupId, folderId, queryDefinition);
147            }
148    
149            @Override
150            public List<Object> getFoldersAndEntries(
151                    long groupId, long folderId, int status, int start, int end) {
152    
153                    QueryDefinition<?> queryDefinition = new QueryDefinition<Object>(
154                            status, start, end, null);
155    
156                    return bookmarksFolderFinder.filterFindBF_E_ByG_F(
157                            groupId, folderId, queryDefinition);
158            }
159    
160            @Override
161            public int getFoldersAndEntriesCount(long groupId, long folderId) {
162                    return getFoldersAndEntriesCount(
163                            groupId, folderId, WorkflowConstants.STATUS_ANY);
164            }
165    
166            @Override
167            public int getFoldersAndEntriesCount(
168                    long groupId, long folderId, int status) {
169    
170                    QueryDefinition<?> queryDefinition = new QueryDefinition<Object>(
171                            status);
172    
173                    return bookmarksFolderFinder.filterCountF_E_ByG_F(
174                            groupId, folderId, queryDefinition);
175            }
176    
177            @Override
178            public int getFoldersCount(long groupId, long parentFolderId) {
179                    return getFoldersCount(
180                            groupId, parentFolderId, WorkflowConstants.STATUS_APPROVED);
181            }
182    
183            @Override
184            public int getFoldersCount(long groupId, long parentFolderId, int status) {
185                    if (status == WorkflowConstants.STATUS_ANY) {
186                            return bookmarksFolderPersistence.filterCountByG_P_NotS(
187                                    groupId, parentFolderId, WorkflowConstants.STATUS_IN_TRASH);
188                    }
189                    else {
190                            return bookmarksFolderPersistence.filterCountByG_P_S(
191                                    groupId, parentFolderId, status);
192                    }
193            }
194    
195            /**
196             * @deprecated As of 7.0.0, replaced by {@link #getSubfolderIds(List, long,
197             *             long, boolean)}
198             */
199            @Deprecated
200            @Override
201            public void getSubfolderIds(
202                    List<Long> folderIds, long groupId, long folderId) {
203    
204                    getSubfolderIds(folderIds, groupId, folderId, true);
205            }
206    
207            @Override
208            public void getSubfolderIds(
209                    List<Long> folderIds, long groupId, long folderId, boolean recurse) {
210    
211                    List<BookmarksFolder> folders =
212                            bookmarksFolderPersistence.filterFindByG_P_S(
213                                    groupId, folderId, WorkflowConstants.STATUS_APPROVED);
214    
215                    for (BookmarksFolder folder : folders) {
216                            folderIds.add(folder.getFolderId());
217    
218                            if (recurse) {
219                                    getSubfolderIds(
220                                            folderIds, folder.getGroupId(), folder.getFolderId(),
221                                            recurse);
222                            }
223                    }
224            }
225    
226            @Override
227            public List<Long> getSubfolderIds(
228                    long groupId, long folderId, boolean recurse) {
229    
230                    List<Long> folderIds = new ArrayList<Long>();
231    
232                    getSubfolderIds(folderIds, groupId, folderId, recurse);
233    
234                    return folderIds;
235            }
236    
237            @Override
238            public BookmarksFolder moveFolder(long folderId, long parentFolderId)
239                    throws PortalException {
240    
241                    BookmarksFolder folder = bookmarksFolderLocalService.getFolder(
242                            folderId);
243    
244                    BookmarksFolderPermission.check(
245                            getPermissionChecker(), folder, ActionKeys.UPDATE);
246    
247                    return bookmarksFolderLocalService.moveFolder(folderId, parentFolderId);
248            }
249    
250            @Override
251            public BookmarksFolder moveFolderFromTrash(
252                            long folderId, long parentFolderId)
253                    throws PortalException {
254    
255                    BookmarksFolder folder = bookmarksFolderLocalService.getFolder(
256                            folderId);
257    
258                    BookmarksFolderPermission.check(
259                            getPermissionChecker(), folder, ActionKeys.UPDATE);
260    
261                    return bookmarksFolderLocalService.moveFolderFromTrash(
262                            getUserId(), folderId, parentFolderId);
263            }
264    
265            @Override
266            public BookmarksFolder moveFolderToTrash(long folderId)
267                    throws PortalException {
268    
269                    BookmarksFolder folder = bookmarksFolderLocalService.getFolder(
270                            folderId);
271    
272                    BookmarksFolderPermission.check(
273                            getPermissionChecker(), folder, ActionKeys.DELETE);
274    
275                    return bookmarksFolderLocalService.moveFolderToTrash(
276                            getUserId(), folderId);
277            }
278    
279            @Override
280            public void restoreFolderFromTrash(long folderId) throws PortalException {
281                    BookmarksFolder folder = bookmarksFolderLocalService.getFolder(
282                            folderId);
283    
284                    BookmarksFolderPermission.check(
285                            getPermissionChecker(), folder, ActionKeys.UPDATE);
286    
287                    bookmarksFolderLocalService.restoreFolderFromTrash(
288                            getUserId(), folderId);
289            }
290    
291            @Override
292            public void subscribeFolder(long groupId, long folderId)
293                    throws PortalException {
294    
295                    BookmarksFolderPermission.check(
296                            getPermissionChecker(), groupId, folderId, ActionKeys.SUBSCRIBE);
297    
298                    bookmarksFolderLocalService.subscribeFolder(
299                            getUserId(), groupId, folderId);
300            }
301    
302            @Override
303            public void unsubscribeFolder(long groupId, long folderId)
304                    throws PortalException {
305    
306                    BookmarksFolderPermission.check(
307                            getPermissionChecker(), groupId, folderId, ActionKeys.SUBSCRIBE);
308    
309                    bookmarksFolderLocalService.unsubscribeFolder(
310                            getUserId(), groupId, folderId);
311            }
312    
313            @Override
314            public BookmarksFolder updateFolder(
315                            long folderId, long parentFolderId, String name, String description,
316                            boolean mergeWithParentFolder, ServiceContext serviceContext)
317                    throws PortalException {
318    
319                    BookmarksFolder folder = bookmarksFolderLocalService.getFolder(
320                            folderId);
321    
322                    BookmarksFolderPermission.check(
323                            getPermissionChecker(), folder, ActionKeys.UPDATE);
324    
325                    return bookmarksFolderLocalService.updateFolder(
326                            getUserId(), folderId, parentFolderId, name, description,
327                            mergeWithParentFolder, serviceContext);
328            }
329    
330    }