/** * */ package net.conselldemallorca.helium.webapp.v3.helper; import java.util.HashSet; import java.util.Set; import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Utilitat per a finestres sense decoració. * * @author Limit Tecnologies <limit@limit.es> */ public class NodecoHelper { private static final String ESQUEMA_PREFIX = "/helium"; private static final String URI_PREFIX_NODECO = ESQUEMA_PREFIX + "/nodeco"; private static final String REQUEST_ATTRIBUTE_NODECO = "NodecoHelper.Nodeco"; private static final String SESSION_ATTRIBUTE_URIMAP = "NodecoHelper.UriMap"; public static boolean isNodeco(HttpServletRequest request) { return request.getAttribute(REQUEST_ATTRIBUTE_NODECO) != null; } public static boolean comprovarNodecoInterceptor( HttpServletRequest request, HttpServletResponse response) throws Exception { if (isRequestUriNodeco(request)) { String uriSensePrefix = getUriSensePrefix(request); Set<String> uriMap = getUriMap(request); uriMap.add(uriSensePrefix); RequestDispatcher dispatcher = request.getRequestDispatcher(uriSensePrefix); dispatcher.forward(request, response); return false; } else { Set<String> uriMap = getUriMap(request); String uriComprovacio = request.getRequestURI().substring(ESQUEMA_PREFIX.length()); if (uriMap.contains(uriComprovacio)) { uriMap.remove(uriComprovacio); marcarNodeco(request); } return true; } } private static boolean isRequestUriNodeco( HttpServletRequest request) { return request.getRequestURI().startsWith(URI_PREFIX_NODECO); } private static String getUriSensePrefix( HttpServletRequest request) { return request.getRequestURI().substring(URI_PREFIX_NODECO.length()); } private static Set<String> getUriMap( HttpServletRequest request) { @SuppressWarnings("unchecked") Set<String> uriMap = (Set<String>)request.getSession().getAttribute(SESSION_ATTRIBUTE_URIMAP); if (uriMap == null) { uriMap = new HashSet<String>(); request.getSession().setAttribute( SESSION_ATTRIBUTE_URIMAP, uriMap); } return uriMap; } private static void marcarNodeco(HttpServletRequest request) { request.setAttribute( REQUEST_ATTRIBUTE_NODECO, new Boolean(true)); } }