001
014
015 package com.liferay.portal.kernel.trash;
016
017 import aQute.bnd.annotation.ProviderType;
018
019 import com.liferay.asset.kernel.AssetRendererFactoryRegistryUtil;
020 import com.liferay.asset.kernel.model.AssetRenderer;
021 import com.liferay.asset.kernel.model.AssetRendererFactory;
022 import com.liferay.portal.kernel.exception.PortalException;
023 import com.liferay.portal.kernel.exception.SystemException;
024 import com.liferay.portal.kernel.json.JSONFactoryUtil;
025 import com.liferay.portal.kernel.json.JSONObject;
026 import com.liferay.portal.kernel.log.Log;
027 import com.liferay.portal.kernel.log.LogFactoryUtil;
028 import com.liferay.portal.kernel.model.ContainerModel;
029 import com.liferay.portal.kernel.model.SystemEvent;
030 import com.liferay.portal.kernel.model.SystemEventConstants;
031 import com.liferay.portal.kernel.model.TrashedModel;
032 import com.liferay.portal.kernel.search.Query;
033 import com.liferay.portal.kernel.search.SearchContext;
034 import com.liferay.portal.kernel.search.filter.Filter;
035 import com.liferay.portal.kernel.security.permission.ActionKeys;
036 import com.liferay.portal.kernel.security.permission.PermissionChecker;
037 import com.liferay.portal.kernel.service.ServiceContext;
038 import com.liferay.portal.kernel.service.SystemEventLocalServiceUtil;
039 import com.liferay.portal.kernel.util.OrderByComparator;
040 import com.liferay.portal.kernel.util.StringPool;
041 import com.liferay.trash.kernel.model.TrashEntry;
042
043 import java.util.Collections;
044 import java.util.List;
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 @Override
137 public String getContainerModelName() {
138 return StringPool.BLANK;
139 }
140
141 @Override
142 @SuppressWarnings("unused")
143 public List<ContainerModel> getContainerModels(
144 long classPK, long containerModelId, int start, int end)
145 throws PortalException {
146
147 return Collections.emptyList();
148 }
149
150 @Override
151 @SuppressWarnings("unused")
152 public int getContainerModelsCount(long classPK, long containerModelId)
153 throws PortalException {
154
155 return 0;
156 }
157
158 @Override
159 public String getDeleteMessage() {
160 return "deleted-in-x";
161 }
162
163 @Override
164 public long getDestinationContainerModelId(
165 long classPK, long destinationContainerModelId) {
166
167 return destinationContainerModelId;
168 }
169
170 @Override
171 public Filter getExcludeFilter(SearchContext searchContext) {
172 return null;
173 }
174
175
179 @Deprecated
180 @Override
181 public Query getExcludeQuery(SearchContext searchContext) {
182 return null;
183 }
184
185 @Override
186 @SuppressWarnings("unused")
187 public ContainerModel getParentContainerModel(long classPK)
188 throws PortalException {
189
190 return null;
191 }
192
193 @Override
194 public ContainerModel getParentContainerModel(TrashedModel trashedModel)
195 throws PortalException {
196
197 if ((trashedModel == null) ||
198 !(trashedModel instanceof ContainerModel)) {
199
200 return null;
201 }
202
203 ContainerModel containerModel = (ContainerModel)trashedModel;
204
205 return getContainerModel(containerModel.getParentContainerModelId());
206 }
207
208 @Override
209 @SuppressWarnings("unused")
210 public List<ContainerModel> getParentContainerModels(long classPK)
211 throws PortalException {
212
213 return Collections.emptyList();
214 }
215
216 @Override
217 @SuppressWarnings("unused")
218 public String getRestoreContainedModelLink(
219 PortletRequest portletRequest, long classPK)
220 throws PortalException {
221
222 return StringPool.BLANK;
223 }
224
225 @Override
226 @SuppressWarnings("unused")
227 public String getRestoreContainerModelLink(
228 PortletRequest portletRequest, long classPK)
229 throws PortalException {
230
231 return StringPool.BLANK;
232 }
233
234 @Override
235 @SuppressWarnings("unused")
236 public String getRestoreMessage(PortletRequest portletRequest, long classPK)
237 throws PortalException {
238
239 return StringPool.BLANK;
240 }
241
242 @Override
243 public String getRootContainerModelName() {
244 return StringPool.BLANK;
245 }
246
247 @Override
248 public String getSubcontainerModelName() {
249 return StringPool.BLANK;
250 }
251
252 @Override
253 public String getSystemEventClassName() {
254 return getClassName();
255 }
256
257 @Override
258 public String getTrashContainedModelName() {
259 return StringPool.BLANK;
260 }
261
262 @Override
263 @SuppressWarnings("unused")
264 public int getTrashContainedModelsCount(long classPK)
265 throws PortalException {
266
267 return 0;
268 }
269
270 @Override
271 @SuppressWarnings("unused")
272 public List<TrashRenderer> getTrashContainedModelTrashRenderers(
273 long classPK, int start, int end)
274 throws PortalException {
275
276 return Collections.emptyList();
277 }
278
279 @Override
280 public String getTrashContainerModelName() {
281 return StringPool.BLANK;
282 }
283
284 @Override
285 @SuppressWarnings("unused")
286 public int getTrashContainerModelsCount(long classPK)
287 throws PortalException {
288
289 return 0;
290 }
291
292 @Override
293 @SuppressWarnings("unused")
294 public List<TrashRenderer> getTrashContainerModelTrashRenderers(
295 long classPK, int start, int end)
296 throws PortalException {
297
298 return Collections.emptyList();
299 }
300
301 @Override
302 @SuppressWarnings("unused")
303 public TrashEntry getTrashEntry(long classPK) throws PortalException {
304 return null;
305 }
306
307 @Override
308 @SuppressWarnings("unused")
309 public int getTrashModelsCount(long classPK) throws PortalException {
310 return 0;
311 }
312
313 @Override
314 @SuppressWarnings("unused")
315 public List<TrashRenderer> getTrashModelTrashRenderers(
316 long classPK, int start, int end, OrderByComparator<?> obc)
317 throws PortalException {
318
319 return Collections.emptyList();
320 }
321
322 @Override
323 public TrashRenderer getTrashRenderer(long classPK) throws PortalException {
324 AssetRendererFactory<?> assetRendererFactory =
325 getAssetRendererFactory();
326
327 if (assetRendererFactory != null) {
328 AssetRenderer<?> assetRenderer =
329 assetRendererFactory.getAssetRenderer(classPK);
330
331 if (assetRenderer instanceof TrashRenderer) {
332 return (TrashRenderer)assetRenderer;
333 }
334 }
335
336 return null;
337 }
338
339 @Override
340 public boolean hasTrashPermission(
341 PermissionChecker permissionChecker, long groupId, long classPK,
342 String trashActionId)
343 throws PortalException {
344
345 String actionId = trashActionId;
346
347 if (trashActionId.equals(ActionKeys.DELETE)) {
348 actionId = ActionKeys.DELETE;
349 }
350 else if (trashActionId.equals(TrashActionKeys.OVERWRITE)) {
351 actionId = ActionKeys.DELETE;
352 }
353 else if (trashActionId.equals(TrashActionKeys.MOVE)) {
354 return false;
355 }
356 else if (trashActionId.equals(TrashActionKeys.RENAME)) {
357 actionId = ActionKeys.UPDATE;
358 }
359 else if (trashActionId.equals(TrashActionKeys.RESTORE)) {
360 actionId = ActionKeys.DELETE;
361 }
362
363 return hasPermission(permissionChecker, classPK, actionId);
364 }
365
366 @Override
367 public boolean isContainerModel() {
368 return false;
369 }
370
371 @Override
372 public boolean isDeletable() {
373 return true;
374 }
375
376 @Override
377 @SuppressWarnings("unused")
378 public boolean isInTrashContainer(long classPK) throws PortalException {
379 return false;
380 }
381
382 @Override
383 public boolean isMovable() {
384 return false;
385 }
386
387 @Override
388 @SuppressWarnings("unused")
389 public boolean isRestorable(long classPK) throws PortalException {
390 return true;
391 }
392
393 @Override
394 @SuppressWarnings("unused")
395 public void moveEntry(
396 long userId, long classPK, long containerModelId,
397 ServiceContext serviceContext)
398 throws PortalException {
399 }
400
401 @Override
402 public void moveTrashEntry(
403 long userId, long classPK, long containerModelId,
404 ServiceContext serviceContext)
405 throws PortalException {
406
407 if (isRestorable(classPK)) {
408 restoreTrashEntry(userId, classPK);
409 }
410
411 _log.error(
412 "moveTrashEntry() is not implemented in " + getClass().getName());
413
414 throw new SystemException();
415 }
416
417 @Override
418 @SuppressWarnings("unused")
419 public void restoreRelatedTrashEntry(String className, long classPK)
420 throws PortalException {
421 }
422
423 @Override
424 @SuppressWarnings("unused")
425 public void updateTitle(long classPK, String title) throws PortalException {
426 }
427
428 protected AssetRendererFactory<?> getAssetRendererFactory() {
429 return AssetRendererFactoryRegistryUtil.
430 getAssetRendererFactoryByClassName(getClassName());
431 }
432
433 protected abstract boolean hasPermission(
434 PermissionChecker permissionChecker, long classPK, String actionId)
435 throws PortalException;
436
437 private static final Log _log = LogFactoryUtil.getLog(
438 BaseTrashHandler.class);
439
440 }