package com.processpuzzle.application.control.control; import java.io.IOException; import java.security.InvalidParameterException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.processpuzzle.application.security.control.AuthorizationException; import com.processpuzzle.artifact_management.control.ArtifactCommandException; import com.processpuzzle.artifact_management.control.ListQueryException; /** * @pattern Command (role=servletClass) * @generatedBy CodePro at 2005.11.13. 6:28 * @author zsolt.zsuffa * @version $Revision$ */ public class CommandControllerServlet extends HttpServlet { public static final String ERROR_HELPER_ATTRIBUTE = "error"; public static final String ERROR_PAGE = "/Commons/FrontController/FrontControllerError.jsp"; private static final long serialVersionUID = -5470896039364205824L; protected ServletContext servletContext = null; public void init( ServletConfig arg0 ) throws ServletException { super.init( arg0 ); this.servletContext = arg0.getServletContext(); } public CommandControllerServlet() { super(); } public void service( ServletRequest request, ServletResponse response ) throws ServletException, IOException { super.service( request, response ); } protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { processRequest( request, response ); } protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { processRequest( request, response ); } private void processRequest( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { CommandDispatcher dispatcher = null; CommandControllerErrorHelper errorHelper = null; String next = null; try{ dispatcher = new CommandDispatcher( request, response, servletContext ); next = dispatcher.executeCommand(); if( next == null ){ String description = "The requested response page: " + request.getRequestURI() + " is invalid."; errorHelper = new CommandControllerErrorHelper( "InvalidResponsePage", description ); errorHelper.setRequestAttributes( dispatcher.getProperties() ); request.setAttribute( ERROR_HELPER_ATTRIBUTE, errorHelper ); next = ERROR_PAGE; } }catch( AuthorizationException autex ){ dispatch( request, response, "/Commons/FrontController/AuthorizationError.jsp" ); }catch( InvalidParameterException ex ){ dispatchToFrontControllerError( request, response, dispatcher, ex ); }catch( ArtifactCommandException ex ){ dispatchToFrontControllerError( request, response, dispatcher, ex ); }catch( ListQueryException ex ){ dispatchToFrontControllerError( request, response, dispatcher, ex ); }catch( Exception ex ){ dispatchToFrontControllerError( request, response, dispatcher, ex ); } if( next != "" ){ try{ dispatch( request, response, next ); }catch( Exception e ){ handleDispatchException( request, response, next, e ); } } } private void handleDispatchException( HttpServletRequest request, HttpServletResponse response, String next, Throwable throwable ) throws IOException { String servletName = (String) request.getAttribute( "javax.servlet.error.servlet_name" ); if( servletName == null ) servletName = "Unknown"; String requestUri = (String) request.getAttribute( "javax.servlet.error.request_uri" ); if( requestUri == null ) requestUri = "Unknown"; response.setContentType( "text/html" ); java.io.PrintWriter out = response.getWriter(); out.println( "<html>" ); out.println( "<head>" ); out.println( "<title>Error page</title>" ); out.println( "</head>" ); out.println( "<body>" ); if( throwable == null ){ out.println( "<h2>The error information is not available</h2>" ); out.println( "Please return to the <a href=\"" + response.encodeURL( "http://localhost:8080/home" ) + "\">home page</a>." ); }else{ out.println( "<h2>Here is the error information</h2>" ); out.println( "The servlet name associated with throwing the exception: " + servletName + "<br><br>" ); out.println( "The type of exception: " + throwable.getClass().getName() + "<br><br>" ); out.println( "The request URI: " + requestUri + "<br><br>" ); out.println( "The exception message: " + throwable.getMessage() ); } out.println( "</body>" ); out.println( "</html>" ); } private void dispatchToFrontControllerError( HttpServletRequest request, HttpServletResponse response, CommandDispatcher dispatcher, Exception ex ) throws ServletException, IOException { CommandControllerErrorHelper errorHelper; errorHelper = new CommandControllerErrorHelper( "Exception", ex.getMessage(), ex ); errorHelper.setRequestAttributes( dispatcher.getProperties() ); request.setAttribute( ERROR_HELPER_ATTRIBUTE, errorHelper ); dispatch( request, response, ERROR_PAGE ); } private void dispatch( HttpServletRequest request, HttpServletResponse response, String page ) throws ServletException, IOException { RequestDispatcher dispatcher = getServletContext().getRequestDispatcher( page ); dispatcher.forward( request, response ); } }