package com.processpuzzle.application.configuration.control;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import com.processpuzzle.application.control.control.CommandControllerErrorHelper;
import com.processpuzzle.application.domain.ApplicationException;
public class ApplicationErrorFilter implements Filter {
public static final String EXCEPTION_ATTRIBUTE = "ApplicationException";
public void init(FilterConfig arg0) throws ServletException {
//Do nothing
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpSession httpSession = (HttpSession) httpRequest.getSession();
ServletContext servletContext = httpSession.getServletContext();
// ApplicationLifecycleListener only checks if application setup was unsuccessfull.
ApplicationException applicationException = (ApplicationException) servletContext.getAttribute( ApplicationLifecycleListener.STARTUP_FAILURE_ATTRIBUTE );
if( applicationException != null ) {
CommandControllerErrorHelper errorHelper = new CommandControllerErrorHelper( "Application Starup Exception", applicationException.getMessage(), applicationException );
request.setAttribute( EXCEPTION_ATTRIBUTE, errorHelper );
RequestDispatcher dispatcher = request.getRequestDispatcher( ApplicationLifecycleListener.STARUP_FAILURE_PAGE );
dispatcher.forward( request , response );
} else chain.doFilter( request, response );
}
public void destroy() {
//Do nothing
}
}