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.journal.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.TrashActionKeys;
020    import com.liferay.portal.kernel.trash.TrashRenderer;
021    import com.liferay.portal.kernel.util.Validator;
022    import com.liferay.portal.model.ContainerModel;
023    import com.liferay.portal.security.permission.ActionKeys;
024    import com.liferay.portal.security.permission.PermissionChecker;
025    import com.liferay.portal.service.ServiceContext;
026    import com.liferay.portlet.journal.asset.JournalFolderAssetRenderer;
027    import com.liferay.portlet.journal.model.JournalFolder;
028    import com.liferay.portlet.journal.service.JournalFolderLocalServiceUtil;
029    import com.liferay.portlet.journal.service.permission.JournalFolderPermission;
030    import com.liferay.portlet.journal.util.JournalUtil;
031    import com.liferay.portlet.trash.DuplicateEntryException;
032    import com.liferay.portlet.trash.model.TrashEntry;
033    
034    import javax.portlet.PortletRequest;
035    
036    /**
037     * Implements trash handling for the journal folder entity.
038     *
039     * @author Eudaldo Alonso
040     */
041    public class JournalFolderTrashHandler extends JournalBaseTrashHandler {
042    
043            @Override
044            public void checkDuplicateEntry(
045                            long classPK, long containerModelId, String newName)
046                    throws PortalException, SystemException {
047    
048                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
049    
050                    checkDuplicateEntry(
051                            classPK, 0, containerModelId, folder.getName(), newName);
052            }
053    
054            @Override
055            public void checkDuplicateTrashEntry(
056                            TrashEntry trashEntry, long containerModelId, String newName)
057                    throws PortalException, SystemException {
058    
059                    checkDuplicateEntry(
060                            trashEntry.getClassPK(), trashEntry.getEntryId(), containerModelId,
061                            trashEntry.getTypeSettingsProperty("title"), newName);
062            }
063    
064            @Override
065            public void deleteTrashEntry(long classPK)
066                    throws PortalException, SystemException {
067    
068                    JournalFolderLocalServiceUtil.deleteFolder(classPK, false);
069            }
070    
071            @Override
072            public String getClassName() {
073                    return JournalFolder.class.getName();
074            }
075    
076            @Override
077            public String getDeleteMessage() {
078                    return "found-in-deleted-folder-x";
079            }
080    
081            @Override
082            public ContainerModel getParentContainerModel(long classPK)
083                    throws PortalException, SystemException {
084    
085                    JournalFolder folder = getJournalFolder(classPK);
086    
087                    long parentFolderId = folder.getParentFolderId();
088    
089                    if (parentFolderId <= 0) {
090                            return null;
091                    }
092    
093                    return getContainerModel(parentFolderId);
094            }
095    
096            @Override
097            public String getRestoreContainedModelLink(
098                            PortletRequest portletRequest, long classPK)
099                    throws PortalException, SystemException {
100    
101                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
102    
103                    return JournalUtil.getJournalControlPanelLink(
104                            portletRequest, folder.getFolderId());
105            }
106    
107            @Override
108            public String getRestoreContainerModelLink(
109                            PortletRequest portletRequest, long classPK)
110                    throws PortalException, SystemException {
111    
112                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
113    
114                    return JournalUtil.getJournalControlPanelLink(
115                            portletRequest, folder.getParentFolderId());
116            }
117    
118            @Override
119            public String getRestoreMessage(PortletRequest portletRequest, long classPK)
120                    throws PortalException, SystemException {
121    
122                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
123    
124                    return JournalUtil.getAbsolutePath(
125                            portletRequest, folder.getParentFolderId());
126            }
127    
128            @Override
129            public TrashEntry getTrashEntry(long classPK)
130                    throws PortalException, SystemException {
131    
132                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
133    
134                    return folder.getTrashEntry();
135            }
136    
137            @Override
138            public TrashRenderer getTrashRenderer(long classPK)
139                    throws PortalException, SystemException {
140    
141                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
142    
143                    return new JournalFolderAssetRenderer(folder);
144            }
145    
146            @Override
147            public boolean hasTrashPermission(
148                            PermissionChecker permissionChecker, long groupId, long classPK,
149                            String trashActionId)
150                    throws PortalException, SystemException {
151    
152                    if (trashActionId.equals(TrashActionKeys.MOVE)) {
153                            return JournalFolderPermission.contains(
154                                    permissionChecker, groupId, classPK, ActionKeys.ADD_FOLDER);
155                    }
156    
157                    return super.hasTrashPermission(
158                            permissionChecker, groupId, classPK, trashActionId);
159            }
160    
161            @Override
162            public boolean isContainerModel() {
163                    return true;
164            }
165    
166            @Override
167            public boolean isInTrash(long classPK)
168                    throws PortalException, SystemException {
169    
170                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
171    
172                    return folder.isInTrash();
173            }
174    
175            @Override
176            public boolean isInTrashContainer(long classPK)
177                    throws PortalException, SystemException {
178    
179                    JournalFolder folder = getJournalFolder(classPK);
180    
181                    return folder.isInTrashContainer();
182            }
183    
184            @Override
185            public boolean isRestorable(long classPK)
186                    throws PortalException, SystemException {
187    
188                    JournalFolder folder = getJournalFolder(classPK);
189    
190                    if ((folder.getParentFolderId() > 0) &&
191                            (JournalFolderLocalServiceUtil.fetchFolder(
192                                    folder.getParentFolderId()) == null)) {
193    
194                            return false;
195                    }
196    
197                    return !folder.isInTrashContainer();
198            }
199    
200            @Override
201            public void moveEntry(
202                            long userId, long classPK, long containerModelId,
203                            ServiceContext serviceContext)
204                    throws PortalException, SystemException {
205    
206                    JournalFolderLocalServiceUtil.moveFolder(
207                            classPK, containerModelId, serviceContext);
208            }
209    
210            @Override
211            public void moveTrashEntry(
212                            long userId, long classPK, long containerModelId,
213                            ServiceContext serviceContext)
214                    throws PortalException, SystemException {
215    
216                    JournalFolderLocalServiceUtil.moveFolderFromTrash(
217                            userId, classPK, containerModelId, serviceContext);
218            }
219    
220            @Override
221            public void restoreTrashEntry(long userId, long classPK)
222                    throws PortalException, SystemException {
223    
224                    JournalFolderLocalServiceUtil.restoreFolderFromTrash(userId, classPK);
225            }
226    
227            @Override
228            public void updateTitle(long classPK, String name)
229                    throws PortalException, SystemException {
230    
231                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
232    
233                    folder.setName(name);
234    
235                    JournalFolderLocalServiceUtil.updateJournalFolder(folder);
236            }
237    
238            protected void checkDuplicateEntry(
239                            long classPK, long trashEntryId, long containerModelId,
240                            String originalTitle, String newName)
241                    throws PortalException, SystemException {
242    
243                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
244    
245                    if (Validator.isNotNull(newName)) {
246                            originalTitle = newName;
247                    }
248    
249                    JournalFolder duplicateFolder =
250                            JournalFolderLocalServiceUtil.fetchFolder(
251                                    folder.getGroupId(), containerModelId, originalTitle);
252    
253                    if (duplicateFolder != null) {
254                            DuplicateEntryException dee = new DuplicateEntryException();
255    
256                            dee.setDuplicateEntryId(duplicateFolder.getFolderId());
257                            dee.setOldName(duplicateFolder.getName());
258                            dee.setTrashEntryId(trashEntryId);
259    
260                            throw dee;
261                    }
262            }
263    
264            @Override
265            protected long getGroupId(long classPK)
266                    throws PortalException, SystemException {
267    
268                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
269    
270                    return folder.getGroupId();
271            }
272    
273            protected JournalFolder getJournalFolder(long classPK)
274                    throws PortalException, SystemException {
275    
276                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
277    
278                    return folder;
279            }
280    
281            @Override
282            protected boolean hasPermission(
283                            PermissionChecker permissionChecker, long classPK, String actionId)
284                    throws PortalException, SystemException {
285    
286                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
287    
288                    return JournalFolderPermission.contains(
289                            permissionChecker, folder, actionId);
290            }
291    
292    }