/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.trash.taglib.servlet.taglib; import com.liferay.portal.kernel.model.TrashedModel; import com.liferay.portal.kernel.servlet.SessionMessages; import com.liferay.portal.kernel.theme.PortletDisplay; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.trash.TrashHandler; import com.liferay.portal.kernel.trash.TrashRenderer; import com.liferay.portal.kernel.util.Constants; import com.liferay.portal.kernel.util.JavaConstants; import com.liferay.portal.kernel.util.ListUtil; import com.liferay.portal.kernel.util.MapUtil; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.taglib.util.IncludeTag; import com.liferay.trash.kernel.model.TrashEntry; import com.liferay.trash.taglib.servlet.ServletContextUtil; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.portlet.PortletRequest; import javax.portlet.PortletURL; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.PageContext; /** * Creates a message confirming items were moved to the Recycle Bin, and * presents an option to restore them. * * @author Julio Camarero */ public class UndoTag extends IncludeTag { @Override public int doStartTag() { return EVAL_BODY_INCLUDE; } @Override public void setPageContext(PageContext pageContext) { super.setPageContext(pageContext); servletContext = ServletContextUtil.getServletContext(); } public void setPortletURL(PortletURL portletURL) { _portletURL = portletURL.toString(); } public void setPortletURL(String portletURL) { _portletURL = portletURL; } public void setRedirect(String redirect) { _redirect = redirect; } @Override protected void cleanUp() { _portletURL = null; _redirect = null; } @Override protected String getPage() { if (ListUtil.isEmpty(_getTrashedModels())) { return null; } return _PAGE; } @Override protected boolean isCleanUpSetAttributes() { return _CLEAN_UP_SET_ATTRIBUTES; } @Override protected void setAttributes(HttpServletRequest request) { ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute( WebKeys.THEME_DISPLAY); List<TrashedModel> trashedModels = _getTrashedModels(); List<String> classNames = new ArrayList<>(); List<Long> restoreTrashEntryIds = new ArrayList<>(); List<String> titles = new ArrayList<>(); for (TrashedModel trashedModel : trashedModels) { try { TrashEntry trashEntry = trashedModel.getTrashEntry(); TrashHandler trashHandler = trashedModel.getTrashHandler(); TrashRenderer trashRenderer = trashHandler.getTrashRenderer( trashedModel.getTrashEntryClassPK()); classNames.add(trashRenderer.getClassName()); restoreTrashEntryIds.add(trashEntry.getEntryId()); titles.add(trashRenderer.getTitle(themeDisplay.getLocale())); } catch (Exception e) { } } request.setAttribute("liferay-trash:undo:classNames", classNames); request.setAttribute("liferay-trash:undo:cmd", _getCmd()); request.setAttribute("liferay-trash:undo:portletURL", _portletURL); request.setAttribute("liferay-trash:undo:redirect", _redirect); request.setAttribute( "liferay-trash:undo:restoreTrashEntryIds", restoreTrashEntryIds); request.setAttribute("liferay-trash:undo:titles", titles); request.setAttribute( "liferay-trash:undo:trashedEntriesCount", restoreTrashEntryIds.size()); } private String _getCmd() { Map<String, Object> data = _getData(); if (data == null) { return Constants.MOVE_TO_TRASH; } return MapUtil.getString(data, Constants.CMD); } private Map<String, Object> _getData() { ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute( WebKeys.THEME_DISPLAY); PortletRequest portletRequest = (PortletRequest)request.getAttribute( JavaConstants.JAVAX_PORTLET_REQUEST); PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); String key = portletDisplay.getId() + SessionMessages.KEY_SUFFIX_DELETE_SUCCESS_DATA; if (!SessionMessages.contains(portletRequest, key)) { return null; } return (HashMap<String, Object>)SessionMessages.get( portletRequest, key); } private List<TrashedModel> _getTrashedModels() { Map<String, Object> data = _getData(); if (data == null) { return Collections.emptyList(); } List<TrashedModel> trashedModels = (List<TrashedModel>)data.get( "trashedModels"); if (ListUtil.isEmpty(trashedModels)) { return Collections.emptyList(); } return trashedModels; } private static final boolean _CLEAN_UP_SET_ATTRIBUTES = true; private static final String _PAGE = "/undo/page.jsp"; private String _portletURL; private String _redirect; }