001
014
015 package com.liferay.portal.kernel.trash;
016
017 import aQute.bnd.annotation.ProviderType;
018
019 import com.liferay.portal.kernel.exception.PortalException;
020 import com.liferay.portal.kernel.exception.SystemException;
021 import com.liferay.portal.kernel.json.JSONFactoryUtil;
022 import com.liferay.portal.kernel.json.JSONObject;
023 import com.liferay.portal.kernel.log.Log;
024 import com.liferay.portal.kernel.log.LogFactoryUtil;
025 import com.liferay.portal.kernel.search.Query;
026 import com.liferay.portal.kernel.search.SearchContext;
027 import com.liferay.portal.kernel.search.filter.Filter;
028 import com.liferay.portal.kernel.util.StringPool;
029 import com.liferay.portal.model.ContainerModel;
030 import com.liferay.portal.model.SystemEvent;
031 import com.liferay.portal.model.SystemEventConstants;
032 import com.liferay.portal.model.TrashedModel;
033 import com.liferay.portal.security.permission.ActionKeys;
034 import com.liferay.portal.security.permission.PermissionChecker;
035 import com.liferay.portal.service.ServiceContext;
036 import com.liferay.portal.service.SystemEventLocalServiceUtil;
037 import com.liferay.portlet.asset.AssetRendererFactoryRegistryUtil;
038 import com.liferay.portlet.asset.model.AssetRenderer;
039 import com.liferay.portlet.asset.model.AssetRendererFactory;
040 import com.liferay.portlet.trash.model.TrashEntry;
041
042 import java.util.Collections;
043 import java.util.List;
044
045 import javax.portlet.PortletRequest;
046
047
054 @ProviderType
055 public abstract class BaseTrashHandler implements TrashHandler {
056
057 @Override
058 public SystemEvent addDeletionSystemEvent(
059 long userId, long groupId, long classPK, String classUuid,
060 String referrerClassName)
061 throws PortalException {
062
063 JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
064
065 extraDataJSONObject.put("inTrash", true);
066
067 return SystemEventLocalServiceUtil.addSystemEvent(
068 userId, groupId, getSystemEventClassName(), classPK, classUuid,
069 referrerClassName, SystemEventConstants.TYPE_DELETE,
070 extraDataJSONObject.toString());
071 }
072
073
077 @Deprecated
078 @Override
079 public void checkDuplicateEntry(
080 long classPK, long containerModelId, String newName)
081 throws PortalException {
082
083 checkRestorableEntry(classPK, containerModelId, newName);
084 }
085
086
090 @Deprecated
091 @Override
092 public void checkDuplicateTrashEntry(
093 TrashEntry trashEntry, long containerModelId, String newName)
094 throws PortalException {
095
096 checkRestorableEntry(trashEntry, containerModelId, newName);
097 }
098
099 @Override
100 @SuppressWarnings("unused")
101 public void checkRestorableEntry(
102 long classPK, long containerModelId, String newName)
103 throws PortalException {
104 }
105
106 @Override
107 @SuppressWarnings("unused")
108 public void checkRestorableEntry(
109 TrashEntry trashEntry, long containerModelId, String newName)
110 throws PortalException {
111 }
112
113 @Override
114 @SuppressWarnings("unused")
115 public ContainerModel getContainerModel(long containerModelId)
116 throws PortalException {
117
118 return null;
119 }
120
121
124 @Deprecated
125 @Override
126 public String getContainerModelClassName() {
127 return getContainerModelClassName(0);
128 }
129
130 @Override
131 public String getContainerModelClassName(long classPK) {
132 return StringPool.BLANK;
133 }
134
135 @Override
136 public String getContainerModelName() {
137 return StringPool.BLANK;
138 }
139
140 @Override
141 @SuppressWarnings("unused")
142 public List<ContainerModel> getContainerModels(
143 long classPK, long containerModelId, int start, int end)
144 throws PortalException {
145
146 return Collections.emptyList();
147 }
148
149 @Override
150 @SuppressWarnings("unused")
151 public int getContainerModelsCount(long classPK, long containerModelId)
152 throws PortalException {
153
154 return 0;
155 }
156
157 @Override
158 public String getDeleteMessage() {
159 return "deleted-in-x";
160 }
161
162 @Override
163 public long getDestinationContainerModelId(
164 long classPK, long destinationContainerModelId) {
165
166 return destinationContainerModelId;
167 }
168
169 @Override
170 public Filter getExcludeFilter(SearchContext searchContext) {
171 return null;
172 }
173
174
178 @Deprecated
179 @Override
180 public Query getExcludeQuery(SearchContext searchContext) {
181 return null;
182 }
183
184 @Override
185 @SuppressWarnings("unused")
186 public ContainerModel getParentContainerModel(long classPK)
187 throws PortalException {
188
189 return null;
190 }
191
192 @Override
193 public ContainerModel getParentContainerModel(TrashedModel trashedModel)
194 throws PortalException {
195
196 if ((trashedModel == null) ||
197 !(trashedModel instanceof ContainerModel)) {
198
199 return null;
200 }
201
202 ContainerModel containerModel = (ContainerModel)trashedModel;
203
204 return getContainerModel(containerModel.getParentContainerModelId());
205 }
206
207 @Override
208 @SuppressWarnings("unused")
209 public List<ContainerModel> getParentContainerModels(long classPK)
210 throws PortalException {
211
212 return Collections.emptyList();
213 }
214
215 @Override
216 @SuppressWarnings("unused")
217 public String getRestoreContainedModelLink(
218 PortletRequest portletRequest, long classPK)
219 throws PortalException {
220
221 return StringPool.BLANK;
222 }
223
224 @Override
225 @SuppressWarnings("unused")
226 public String getRestoreContainerModelLink(
227 PortletRequest portletRequest, long classPK)
228 throws PortalException {
229
230 return StringPool.BLANK;
231 }
232
233 @Override
234 @SuppressWarnings("unused")
235 public String getRestoreMessage(PortletRequest portletRequest, long classPK)
236 throws PortalException {
237
238 return StringPool.BLANK;
239 }
240
241 @Override
242 public String getRootContainerModelName() {
243 return StringPool.BLANK;
244 }
245
246 @Override
247 public String getSubcontainerModelName() {
248 return StringPool.BLANK;
249 }
250
251 @Override
252 public String getSystemEventClassName() {
253 return getClassName();
254 }
255
256 @Override
257 public String getTrashContainedModelName() {
258 return StringPool.BLANK;
259 }
260
261 @Override
262 @SuppressWarnings("unused")
263 public int getTrashContainedModelsCount(long classPK)
264 throws PortalException {
265
266 return 0;
267 }
268
269 @Override
270 @SuppressWarnings("unused")
271 public List<TrashRenderer> getTrashContainedModelTrashRenderers(
272 long classPK, int start, int end)
273 throws PortalException {
274
275 return Collections.emptyList();
276 }
277
278 @Override
279 public String getTrashContainerModelName() {
280 return StringPool.BLANK;
281 }
282
283 @Override
284 @SuppressWarnings("unused")
285 public int getTrashContainerModelsCount(long classPK)
286 throws PortalException {
287
288 return 0;
289 }
290
291 @Override
292 @SuppressWarnings("unused")
293 public List<TrashRenderer> getTrashContainerModelTrashRenderers(
294 long classPK, int start, int end)
295 throws PortalException {
296
297 return Collections.emptyList();
298 }
299
300 @Override
301 @SuppressWarnings("unused")
302 public TrashEntry getTrashEntry(long classPK) throws PortalException {
303 return null;
304 }
305
306 @Override
307 public TrashRenderer getTrashRenderer(long classPK) throws PortalException {
308 AssetRendererFactory<?> assetRendererFactory =
309 getAssetRendererFactory();
310
311 if (assetRendererFactory != null) {
312 AssetRenderer<?> assetRenderer =
313 assetRendererFactory.getAssetRenderer(classPK);
314
315 if (assetRenderer instanceof TrashRenderer) {
316 return (TrashRenderer)assetRenderer;
317 }
318 }
319
320 return null;
321 }
322
323 @Override
324 public boolean hasTrashPermission(
325 PermissionChecker permissionChecker, long groupId, long classPK,
326 String trashActionId)
327 throws PortalException {
328
329 String actionId = trashActionId;
330
331 if (trashActionId.equals(ActionKeys.DELETE)) {
332 actionId = ActionKeys.DELETE;
333 }
334 else if (trashActionId.equals(TrashActionKeys.OVERWRITE)) {
335 actionId = ActionKeys.DELETE;
336 }
337 else if (trashActionId.equals(TrashActionKeys.MOVE)) {
338 return false;
339 }
340 else if (trashActionId.equals(TrashActionKeys.RENAME)) {
341 actionId = ActionKeys.UPDATE;
342 }
343 else if (trashActionId.equals(TrashActionKeys.RESTORE)) {
344 actionId = ActionKeys.DELETE;
345 }
346
347 return hasPermission(permissionChecker, classPK, actionId);
348 }
349
350 @Override
351 public boolean isContainerModel() {
352 return false;
353 }
354
355 @Override
356 public boolean isDeletable() {
357 return true;
358 }
359
360 @Override
361 @SuppressWarnings("unused")
362 public boolean isInTrashContainer(long classPK) throws PortalException {
363 return false;
364 }
365
366 @Override
367 public boolean isMovable() {
368 return false;
369 }
370
371 @Override
372 @SuppressWarnings("unused")
373 public boolean isRestorable(long classPK) throws PortalException {
374 return true;
375 }
376
377 @Override
378 @SuppressWarnings("unused")
379 public void moveEntry(
380 long userId, long classPK, long containerModelId,
381 ServiceContext serviceContext)
382 throws PortalException {
383 }
384
385 @Override
386 public void moveTrashEntry(
387 long userId, long classPK, long containerModelId,
388 ServiceContext serviceContext)
389 throws PortalException {
390
391 if (isRestorable(classPK)) {
392 restoreTrashEntry(userId, classPK);
393 }
394
395 _log.error(
396 "moveTrashEntry() is not implemented in " + getClass().getName());
397
398 throw new SystemException();
399 }
400
401 @Override
402 @SuppressWarnings("unused")
403 public void restoreRelatedTrashEntry(String className, long classPK)
404 throws PortalException {
405 }
406
407 @Override
408 @SuppressWarnings("unused")
409 public void updateTitle(long classPK, String title) throws PortalException {
410 }
411
412 protected AssetRendererFactory<?> getAssetRendererFactory() {
413 return AssetRendererFactoryRegistryUtil.
414 getAssetRendererFactoryByClassName(getClassName());
415 }
416
417 protected abstract boolean hasPermission(
418 PermissionChecker permissionChecker, long classPK, String actionId)
419 throws PortalException;
420
421 private static final Log _log = LogFactoryUtil.getLog(
422 BaseTrashHandler.class);
423
424 }