Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
AbstractControllerErrorHandler |
|
| 1.5;1,5 |
1 | 0 | /** |
2 | * 2007, Digitalis Informatica. All rights reserved. Distribuicao e Gestao de Informatica, Lda. Estrada de Paco de Arcos | |
3 | * num.9 - Piso -1 2780-666 Paco de Arcos Telefone: (351) 21 4408990 Fax: (351) 21 4408999 http://www.digitalis.pt | |
4 | */ | |
5 | package pt.digitalis.dif.controller; | |
6 | ||
7 | import pt.digitalis.dif.controller.interfaces.IDIFRequest; | |
8 | import pt.digitalis.dif.controller.interfaces.IDIFResponse; | |
9 | import pt.digitalis.dif.controller.interfaces.IDispatcherErrorHandler; | |
10 | import pt.digitalis.dif.exception.controller.BusinessFlowException; | |
11 | import pt.digitalis.dif.exception.controller.ControllerException; | |
12 | ||
13 | /** | |
14 | * @author Pedro Viegas <a href="mailto:pviegas@digitalis.pt">pviegas@digitalis.pt</a> | |
15 | * @created Dec 21, 2007 | |
16 | */ | |
17 | 0 | abstract public class AbstractControllerErrorHandler implements IDispatcherErrorHandler { |
18 | ||
19 | /** | |
20 | * Builds an error response from a stage id for error handling, with a defined handler stage (or the default one) | |
21 | * | |
22 | * @param originalrequest | |
23 | * the original request | |
24 | * @param errorStageID | |
25 | * the error stage to redirect to. If null will redirect to the default error stage | |
26 | * @param exception | |
27 | * the exception launched | |
28 | * @return the response | |
29 | */ | |
30 | abstract protected IDIFResponse buildDynamicErrorResponse(IDIFRequest originalrequest, String errorStageID, | |
31 | Exception exception); | |
32 | ||
33 | /** | |
34 | * Builds an error response from a static resource for simple rendering for when the DIF has generated errors | |
35 | * | |
36 | * @param originalrequest | |
37 | * the original request | |
38 | * @param exception | |
39 | * the exception launched | |
40 | * @return the response | |
41 | */ | |
42 | abstract protected IDIFResponse buildStaticErrorResponse(IDIFRequest originalrequest, Exception exception); | |
43 | ||
44 | /** | |
45 | * @see pt.digitalis.dif.controller.interfaces.IDispatcherErrorHandler#processException(pt.digitalis.dif.controller.interfaces.IDIFRequest, | |
46 | * pt.digitalis.dif.exception.controller.BusinessFlowException) | |
47 | */ | |
48 | public IDIFResponse processException(IDIFRequest originalRequest, BusinessFlowException businessFlowException) | |
49 | { | |
50 | ||
51 | 0 | return buildDynamicErrorResponse(originalRequest, ExceptionHandlers.getExceptionHandler(businessFlowException), |
52 | 0 | businessFlowException); |
53 | } | |
54 | ||
55 | /** | |
56 | * @see pt.digitalis.dif.controller.interfaces.IDispatcherErrorHandler#processException(pt.digitalis.dif.controller.interfaces.IDIFRequest, | |
57 | * pt.digitalis.dif.exception.controller.ControllerException) | |
58 | */ | |
59 | public IDIFResponse processException(IDIFRequest originalRequest, ControllerException controllerException) | |
60 | { | |
61 | 0 | if (controllerException.isGeneratedFromException()) |
62 | 0 | return buildStaticErrorResponse(originalRequest, controllerException); |
63 | else | |
64 | 0 | return buildDynamicErrorResponse(originalRequest, ExceptionHandlers |
65 | 0 | .getExceptionHandler(controllerException), controllerException); |
66 | } | |
67 | ||
68 | /** | |
69 | * @see pt.digitalis.dif.controller.interfaces.IDispatcherErrorHandler#processException(pt.digitalis.dif.controller.interfaces.IDIFRequest, | |
70 | * java.lang.RuntimeException) | |
71 | */ | |
72 | public IDIFResponse processException(IDIFRequest originalRequest, RuntimeException runtimeException) | |
73 | { | |
74 | 0 | return buildDynamicErrorResponse(originalRequest, ExceptionHandlers.getExceptionHandler(runtimeException), |
75 | 0 | runtimeException); |
76 | } | |
77 | ||
78 | /** | |
79 | * Creates a new error request base on the original request. Injects the original request in the error one for later | |
80 | * reference in the error stage. | |
81 | * | |
82 | * @param response | |
83 | * the response to add the context to | |
84 | * @param originalRequest | |
85 | * the original request | |
86 | * @param exception | |
87 | * the exception launched | |
88 | * @return the request with the context added | |
89 | */ | |
90 | public IDIFResponse responseWithContext(IDIFResponse response, IDIFRequest originalRequest, Exception exception) | |
91 | { | |
92 | 0 | response.addStageResult(IDispatcherErrorHandler.ORIGINAL_REQUEST, originalRequest); |
93 | 0 | response.addStageResult(IDispatcherErrorHandler.EXCEPTION, exception); |
94 | ||
95 | 0 | if (response.getRequest() != null) |
96 | 0 | response.getRequest().addAttribute(ExceptionHandlers.RAISED_EXCEPTION_ATTRIBUTE, exception); |
97 | ||
98 | 0 | return response; |
99 | } | |
100 | } |