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