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 getRestoreLink(PortletRequest portletRequest, long classPK)
098                    throws PortalException, SystemException {
099    
100                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
101    
102                    return JournalUtil.getJournalControlPanelLink(
103                            portletRequest, folder.getParentFolderId());
104            }
105    
106            @Override
107            public String getRestoreMessage(PortletRequest portletRequest, long classPK)
108                    throws PortalException, SystemException {
109    
110                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
111    
112                    return JournalUtil.getAbsolutePath(
113                            portletRequest, folder.getParentFolderId());
114            }
115    
116            @Override
117            public ContainerModel getTrashContainer(long classPK)
118                    throws PortalException, SystemException {
119    
120                    JournalFolder folder = getJournalFolder(classPK);
121    
122                    return folder.getTrashContainer();
123            }
124    
125            @Override
126            public TrashRenderer getTrashRenderer(long classPK)
127                    throws PortalException, SystemException {
128    
129                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
130    
131                    return new JournalFolderAssetRenderer(folder);
132            }
133    
134            @Override
135            public boolean hasTrashPermission(
136                            PermissionChecker permissionChecker, long groupId, long classPK,
137                            String trashActionId)
138                    throws PortalException, SystemException {
139    
140                    if (trashActionId.equals(TrashActionKeys.MOVE)) {
141                            return JournalFolderPermission.contains(
142                                    permissionChecker, groupId, classPK, ActionKeys.ADD_FOLDER);
143                    }
144    
145                    return super.hasTrashPermission(
146                            permissionChecker, groupId, classPK, trashActionId);
147            }
148    
149            @Override
150            public boolean isContainerModel() {
151                    return true;
152            }
153    
154            @Override
155            public boolean isInTrash(long classPK)
156                    throws PortalException, SystemException {
157    
158                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
159    
160                    return folder.isInTrash();
161            }
162    
163            @Override
164            public boolean isInTrashContainer(long classPK)
165                    throws PortalException, SystemException {
166    
167                    JournalFolder folder = getJournalFolder(classPK);
168    
169                    return folder.isInTrashContainer();
170            }
171    
172            @Override
173            public boolean isRestorable(long classPK)
174                    throws PortalException, SystemException {
175    
176                    JournalFolder folder = getJournalFolder(classPK);
177    
178                    if ((folder.getParentFolderId() > 0) &&
179                            (JournalFolderLocalServiceUtil.fetchFolder(
180                                    folder.getParentFolderId()) == null)) {
181    
182                            return false;
183                    }
184    
185                    return !folder.isInTrashContainer();
186            }
187    
188            @Override
189            public void moveEntry(
190                            long userId, long classPK, long containerModelId,
191                            ServiceContext serviceContext)
192                    throws PortalException, SystemException {
193    
194                    JournalFolderLocalServiceUtil.moveFolder(
195                            classPK, containerModelId, serviceContext);
196            }
197    
198            @Override
199            public void moveTrashEntry(
200                            long userId, long classPK, long containerModelId,
201                            ServiceContext serviceContext)
202                    throws PortalException, SystemException {
203    
204                    JournalFolderLocalServiceUtil.moveFolderFromTrash(
205                            userId, classPK, containerModelId, serviceContext);
206            }
207    
208            @Override
209            public void restoreTrashEntry(long userId, long classPK)
210                    throws PortalException, SystemException {
211    
212                    JournalFolderLocalServiceUtil.restoreFolderFromTrash(userId, classPK);
213            }
214    
215            @Override
216            public void updateTitle(long classPK, String name)
217                    throws PortalException, SystemException {
218    
219                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
220    
221                    folder.setName(name);
222    
223                    JournalFolderLocalServiceUtil.updateJournalFolder(folder);
224            }
225    
226            protected void checkDuplicateEntry(
227                            long classPK, long trashEntryId, long containerModelId,
228                            String originalTitle, String newName)
229                    throws PortalException, SystemException {
230    
231                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
232    
233                    if (Validator.isNotNull(newName)) {
234                            originalTitle = newName;
235                    }
236    
237                    JournalFolder duplicateFolder =
238                            JournalFolderLocalServiceUtil.fetchFolder(
239                                    folder.getGroupId(), containerModelId, originalTitle);
240    
241                    if (duplicateFolder != null) {
242                            DuplicateEntryException dee = new DuplicateEntryException();
243    
244                            dee.setDuplicateEntryId(duplicateFolder.getFolderId());
245                            dee.setOldName(duplicateFolder.getName());
246                            dee.setTrashEntryId(trashEntryId);
247    
248                            throw dee;
249                    }
250            }
251    
252            @Override
253            protected long getGroupId(long classPK)
254                    throws PortalException, SystemException {
255    
256                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
257    
258                    return folder.getGroupId();
259            }
260    
261            protected JournalFolder getJournalFolder(long classPK)
262                    throws PortalException, SystemException {
263    
264                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
265    
266                    return folder;
267            }
268    
269            @Override
270            protected boolean hasPermission(
271                            PermissionChecker permissionChecker, long classPK, String actionId)
272                    throws PortalException, SystemException {
273    
274                    JournalFolder folder = JournalFolderLocalServiceUtil.getFolder(classPK);
275    
276                    return JournalFolderPermission.contains(
277                            permissionChecker, folder, actionId);
278            }
279    
280    }