/** * Copyright (c) 2009-2014 Câmara dos Deputados. Todos os direitos reservados. * * e-Democracia é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro * dos termos da Licença Pública Geral Menor GNU como publicada pela Fundação do * Software Livre (FSF); na versão 2.1 da Licença, ou (na sua opinião) qualquer versão. * * Este programa é distribuído na esperança de que possa ser útil, mas SEM NENHUMA GARANTIA; * sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. * Veja a Licença Pública Geral Menor GNU para maiores detalhes. */ package br.gov.camara.edemocracia.util; import java.util.Enumeration; import javax.portlet.PortletRequest; import javax.portlet.PortletSession; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; /** * Utilitários para gerenciamento do escopo "flash" * * @author P_7339 * */ public class FlashScopeUtil { private FlashScopeUtil() { } private static final Log LOG = LogFactoryUtil.getLog(FlashScopeUtil.class); /** * Copia os parâmetros para o escopo da requisição * * @param req * @param att * @param defaultValue */ public static void copyToRequest(PortletRequest req, String att, Object defaultValue) { PortletSession session = req.getPortletSession(false); if (session == null) req.setAttribute(att, defaultValue); else { Object obj = session.getAttribute("FLASH_" + att); if (obj == null) req.setAttribute(att, defaultValue); else req.setAttribute(att, obj); session.removeAttribute("FLASH_" + att); } } /** * Copia os valores para a requisição. * * Se o valor existir na sessão, copia para a requisição Se não existir, e o * objeto tiver sido informado, utiliza-o Se não o objeto não for informado, * tenta obter da sessão. Se não conseguir, utiliza o default * * @param req * @param att * @param propName * @param obj * @param defaultValue */ public static void copyToRequest(PortletRequest req, String att, String propName, Object obj, Object defaultValue) { PortletSession session = req.getPortletSession(false); if (session != null) { Object val = session.getAttribute("FLASH_" + att); if (val != null) { req.setAttribute(att, val); session.removeAttribute("FLASH_" + att); return; } } // Não existe na sessão if (obj == null) { req.setAttribute(att, defaultValue); } else { // Obtem o valor do objeto e copia - aqui apenas strings try { Object value = PropertyUtils.getProperty(obj, propName); req.setAttribute(att, value); } catch (Exception e) { LOG.error("Erro ao copiar propriedade " + propName + " da classe " + obj.getClass().getName(), e); } } } /** * Limpa o escopo flash * * @param req */ public static void clearFlashScope(PortletRequest req) { PortletSession session = req.getPortletSession(false); if (session == null) return; Enumeration<String> attNames = session.getAttributeNames(); while (attNames.hasMoreElements()) { String att = attNames.nextElement(); if (att.startsWith("FLASH_")) session.removeAttribute(att); } } /** * Altera um valor no escopo flash * * @param req * @param name * @param value */ public static void set(PortletRequest req, String name, Object value) { req.getPortletSession().setAttribute("FLASH_" + name, value); } /** * Limpa o escopo flash * * @param req */ public static void clearFlashScope(HttpServletRequest req) { HttpSession session = req.getSession(false); if (session == null) return; @SuppressWarnings("unchecked") Enumeration<String> attNames = session.getAttributeNames(); while (attNames.hasMoreElements()) { String att = attNames.nextElement(); if (att.startsWith("FLASH_")) session.removeAttribute(att); } } }