001
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
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 ContainerModel getTrashContainer(long classPK)
130 throws PortalException, SystemException {
131
132 JournalFolder folder = getJournalFolder(classPK);
133
134 return folder.getTrashContainer();
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 }