package fi.otavanopisto.pyramus.util; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import fi.internetix.smvc.controllers.RequestController; import fi.internetix.smvc.controllers.RequestControllerMapper; import fi.otavanopisto.pyramus.breadcrumbs.BreadcrumbHandler; import fi.otavanopisto.pyramus.breadcrumbs.Breadcrumbable; import fi.otavanopisto.pyramus.framework.PyramusViewController; public class BreadcrumbFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { try { if (request instanceof HttpServletRequest) { HttpServletRequest httpRequest = (HttpServletRequest) request; String uri = httpRequest.getRequestURI(); String ctxPath = httpRequest.getContextPath(); String controllerName = uri.substring(ctxPath.length() + 1); // TODO: Needed?? // if (StringUtils.isNotBlank(applicationPath)) { // controllerName = controllerName.substring(applicationPath.length()); // } RequestController requestController = RequestControllerMapper.getRequestController(controllerName); if (requestController instanceof PyramusViewController && requestController instanceof Breadcrumbable) { BreadcrumbHandler breadcrumbHandler = getBreadcrumbHandler(httpRequest); if (request.getParameter("resetbreadcrumb") != null) { breadcrumbHandler.clear(); } if (requestController instanceof Breadcrumbable && "GET".equals(httpRequest.getMethod())) { Breadcrumbable breadcrumbable = (Breadcrumbable) requestController; breadcrumbHandler.process(httpRequest, breadcrumbable); } } } } finally { chain.doFilter(request, response); } } private synchronized BreadcrumbHandler getBreadcrumbHandler(HttpServletRequest request) { HttpSession session = request.getSession(true); BreadcrumbHandler breadcrumbHandler = (BreadcrumbHandler) session.getAttribute("breadcrumbHandler"); if (breadcrumbHandler == null) { breadcrumbHandler = new BreadcrumbHandler(); session.setAttribute("breadcrumbHandler", breadcrumbHandler); } return breadcrumbHandler; } @Override public void destroy() { } }