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 import java.util.Locale;
045
046 import javax.portlet.PortletRequest;
047
048
055 @ProviderType
056 public abstract class BaseTrashHandler implements TrashHandler {
057
058 @Override
059 public SystemEvent addDeletionSystemEvent(
060 long userId, long groupId, long classPK, String classUuid,
061 String referrerClassName)
062 throws PortalException {
063
064 JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
065
066 extraDataJSONObject.put("inTrash", true);
067
068 return SystemEventLocalServiceUtil.addSystemEvent(
069 userId, groupId, getSystemEventClassName(), classPK, classUuid,
070 referrerClassName, SystemEventConstants.TYPE_DELETE,
071 extraDataJSONObject.toString());
072 }
073
074
078 @Deprecated
079 @Override
080 public void checkDuplicateEntry(
081 long classPK, long containerModelId, String newName)
082 throws PortalException {
083
084 checkRestorableEntry(classPK, containerModelId, newName);
085 }
086
087
091 @Deprecated
092 @Override
093 public void checkDuplicateTrashEntry(
094 TrashEntry trashEntry, long containerModelId, String newName)
095 throws PortalException {
096
097 checkRestorableEntry(trashEntry, containerModelId, newName);
098 }
099
100 @Override
101 @SuppressWarnings("unused")
102 public void checkRestorableEntry(
103 long classPK, long containerModelId, String newName)
104 throws PortalException {
105 }
106
107 @Override
108 @SuppressWarnings("unused")
109 public void checkRestorableEntry(
110 TrashEntry trashEntry, long containerModelId, String newName)
111 throws PortalException {
112 }
113
114 @Override
115 @SuppressWarnings("unused")
116 public ContainerModel getContainerModel(long containerModelId)
117 throws PortalException {
118
119 return null;
120 }
121
122
125 @Deprecated
126 @Override
127 public String getContainerModelClassName() {
128 return getContainerModelClassName(0);
129 }
130
131 @Override
132 public String getContainerModelClassName(long classPK) {
133 return StringPool.BLANK;
134 }
135
136
139 @Deprecated
140 @Override
141 public String getContainerModelName() {
142 return StringPool.BLANK;
143 }
144
145
148 @Override
149 public String getContainerModelName(long classPK) throws PortalException {
150 return StringPool.BLANK;
151 }
152
153 @Override
154 @SuppressWarnings("unused")
155 public List<ContainerModel> getContainerModels(
156 long classPK, long containerModelId, int start, int end)
157 throws PortalException {
158
159 return Collections.emptyList();
160 }
161
162 @Override
163 @SuppressWarnings("unused")
164 public int getContainerModelsCount(long classPK, long containerModelId)
165 throws PortalException {
166
167 return 0;
168 }
169
170 @Override
171 public String getDeleteMessage() {
172 return "deleted-in-x";
173 }
174
175 @Override
176 public long getDestinationContainerModelId(
177 long classPK, long destinationContainerModelId) {
178
179 return destinationContainerModelId;
180 }
181
182 @Override
183 public Filter getExcludeFilter(SearchContext searchContext) {
184 return null;
185 }
186
187
191 @Deprecated
192 @Override
193 public Query getExcludeQuery(SearchContext searchContext) {
194 return null;
195 }
196
197 @Override
198 @SuppressWarnings("unused")
199 public ContainerModel getParentContainerModel(long classPK)
200 throws PortalException {
201
202 return null;
203 }
204
205 @Override
206 public ContainerModel getParentContainerModel(TrashedModel trashedModel)
207 throws PortalException {
208
209 if ((trashedModel == null) ||
210 !(trashedModel instanceof ContainerModel)) {
211
212 return null;
213 }
214
215 ContainerModel containerModel = (ContainerModel)trashedModel;
216
217 return getContainerModel(containerModel.getParentContainerModelId());
218 }
219
220 @Override
221 @SuppressWarnings("unused")
222 public List<ContainerModel> getParentContainerModels(long classPK)
223 throws PortalException {
224
225 return Collections.emptyList();
226 }
227
228 @Override
229 @SuppressWarnings("unused")
230 public String getRestoreContainedModelLink(
231 PortletRequest portletRequest, long classPK)
232 throws PortalException {
233
234 return StringPool.BLANK;
235 }
236
237 @Override
238 @SuppressWarnings("unused")
239 public String getRestoreContainerModelLink(
240 PortletRequest portletRequest, long classPK)
241 throws PortalException {
242
243 return StringPool.BLANK;
244 }
245
246 @Override
247 @SuppressWarnings("unused")
248 public String getRestoreMessage(PortletRequest portletRequest, long classPK)
249 throws PortalException {
250
251 return StringPool.BLANK;
252 }
253
254 @Override
255 public String getRootContainerModelClassName() {
256 return getContainerModelClassName(0);
257 }
258
259
262 @Override
263 public long getRootContainerModelId(long classPK) throws PortalException {
264 return 0;
265 }
266
267 @Override
268 public String getRootContainerModelName() {
269 return StringPool.BLANK;
270 }
271
272
275 @Override
276 public List<ContainerModel> getRootContainerModels(long groupId)
277 throws PortalException {
278
279 return Collections.emptyList();
280 }
281
282 @Override
283 public int getRootContainerModelsCount(long groupId) {
284 return 0;
285 }
286
287
290 @Override
291 public String getRootContainerModelTitle(
292 long containerModelId, Locale locale)
293 throws PortalException {
294
295 return StringPool.BLANK;
296 }
297
298 @Override
299 public String getSubcontainerModelName() {
300 return StringPool.BLANK;
301 }
302
303 @Override
304 public String getSystemEventClassName() {
305 return getClassName();
306 }
307
308 @Override
309 public String getTrashContainedModelName() {
310 return StringPool.BLANK;
311 }
312
313 @Override
314 @SuppressWarnings("unused")
315 public int getTrashContainedModelsCount(long classPK)
316 throws PortalException {
317
318 return 0;
319 }
320
321 @Override
322 @SuppressWarnings("unused")
323 public List<TrashRenderer> getTrashContainedModelTrashRenderers(
324 long classPK, int start, int end)
325 throws PortalException {
326
327 return Collections.emptyList();
328 }
329
330 @Override
331 public String getTrashContainerModelName() {
332 return StringPool.BLANK;
333 }
334
335 @Override
336 @SuppressWarnings("unused")
337 public int getTrashContainerModelsCount(long classPK)
338 throws PortalException {
339
340 return 0;
341 }
342
343 @Override
344 @SuppressWarnings("unused")
345 public List<TrashRenderer> getTrashContainerModelTrashRenderers(
346 long classPK, int start, int end)
347 throws PortalException {
348
349 return Collections.emptyList();
350 }
351
352 @Override
353 @SuppressWarnings("unused")
354 public TrashEntry getTrashEntry(long classPK) throws PortalException {
355 return null;
356 }
357
358 @Override
359 public TrashRenderer getTrashRenderer(long classPK) throws PortalException {
360 AssetRendererFactory assetRendererFactory = getAssetRendererFactory();
361
362 if (assetRendererFactory != null) {
363 AssetRenderer assetRenderer = assetRendererFactory.getAssetRenderer(
364 classPK);
365
366 if (assetRenderer instanceof TrashRenderer) {
367 return (TrashRenderer)assetRenderer;
368 }
369 }
370
371 return null;
372 }
373
374 @Override
375 public boolean hasTrashPermission(
376 PermissionChecker permissionChecker, long groupId, long classPK,
377 String trashActionId)
378 throws PortalException {
379
380 String actionId = trashActionId;
381
382 if (trashActionId.equals(ActionKeys.DELETE)) {
383 actionId = ActionKeys.DELETE;
384 }
385 else if (trashActionId.equals(TrashActionKeys.OVERWRITE)) {
386 actionId = ActionKeys.DELETE;
387 }
388 else if (trashActionId.equals(TrashActionKeys.MOVE)) {
389 return false;
390 }
391 else if (trashActionId.equals(TrashActionKeys.RENAME)) {
392 actionId = ActionKeys.UPDATE;
393 }
394 else if (trashActionId.equals(TrashActionKeys.RESTORE)) {
395 actionId = ActionKeys.DELETE;
396 }
397
398 return hasPermission(permissionChecker, classPK, actionId);
399 }
400
401 @Override
402 public boolean isContainerModel() {
403 return false;
404 }
405
406 @Override
407 public boolean isDeletable() {
408 return true;
409 }
410
411 @Override
412 @SuppressWarnings("unused")
413 public boolean isInTrashContainer(long classPK) throws PortalException {
414 return false;
415 }
416
417 @Override
418 public boolean isMovable() {
419 return false;
420 }
421
422 @Override
423 @SuppressWarnings("unused")
424 public boolean isRestorable(long classPK) throws PortalException {
425 return true;
426 }
427
428 @Override
429 public boolean isRootContainerModelMovable() {
430 return false;
431 }
432
433 @Override
434 @SuppressWarnings("unused")
435 public void moveEntry(
436 long userId, long classPK, long containerModelId,
437 ServiceContext serviceContext)
438 throws PortalException {
439 }
440
441 @Override
442 public void moveTrashEntry(
443 long userId, long classPK, long containerModelId,
444 ServiceContext serviceContext)
445 throws PortalException {
446
447 if (isRestorable(classPK)) {
448 restoreTrashEntry(userId, classPK);
449 }
450
451 _log.error(
452 "moveTrashEntry() is not implemented in " + getClass().getName());
453
454 throw new SystemException();
455 }
456
457 @Override
458 @SuppressWarnings("unused")
459 public void restoreRelatedTrashEntry(String className, long classPK)
460 throws PortalException {
461 }
462
463 @Override
464 @SuppressWarnings("unused")
465 public void updateTitle(long classPK, String title) throws PortalException {
466 }
467
468 protected AssetRendererFactory getAssetRendererFactory() {
469 return AssetRendererFactoryRegistryUtil.
470 getAssetRendererFactoryByClassName(getClassName());
471 }
472
473 protected abstract boolean hasPermission(
474 PermissionChecker permissionChecker, long classPK, String actionId)
475 throws PortalException;
476
477 private static final Log _log = LogFactoryUtil.getLog(
478 BaseTrashHandler.class);
479
480 }