1. refactoring
[mono.git] / mcs / class / Mainsoft.Web / Mainsoft.Web.Hosting / ServletFacesPageHandler.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Web;\r
5 using javax.faces.component;\r
6 using System.Web.UI;\r
7 using javax.faces.context;\r
8 using javax.faces.lifecycle;\r
9 using javax.faces;\r
10 using javax.servlet;\r
11 using javax.faces.webapp;\r
12 using javax.servlet.http;\r
13 \r
14 namespace Mainsoft.Web.Hosting\r
15 {\r
16         class ServletFacesPageHandler : IHttpHandler\r
17         {\r
18                 readonly FacesContextFactory _facesContextFactory;\r
19                 readonly Lifecycle _lifecycle;\r
20                 readonly string _executionFilePath;\r
21 \r
22                 public bool IsReusable {\r
23                         get { return false; }\r
24                 }\r
25 \r
26                 public ServletFacesPageHandler (string executionFilePath, FacesContextFactory facesContextFactory, Lifecycle lifecycle) {\r
27                         _facesContextFactory = facesContextFactory;\r
28                         _lifecycle = lifecycle;\r
29                         _executionFilePath = executionFilePath;\r
30                 }\r
31 \r
32                 public void ProcessRequest (HttpContext context) {\r
33                         ServletWorkerRequest wr = (ServletWorkerRequest) ((IServiceProvider) context).GetService (typeof (HttpWorkerRequest));\r
34                         ServletContext servletContext = wr.GetContext ();\r
35                         HttpServletRequest request = wr.ServletRequest;\r
36                         HttpServletResponse response = wr.ServletResponse;\r
37 \r
38                         FacesContext facesContext = ServletFacesContext.GetFacesContext (_facesContextFactory, servletContext, request, response, _lifecycle, context, _executionFilePath);\r
39                         try {\r
40                                 try {\r
41                                         _lifecycle.execute (facesContext);\r
42 #if DEBUG\r
43                                         Console.WriteLine ("FacesPageHandler: before render");\r
44 #endif\r
45                                         _lifecycle.render (facesContext);\r
46 #if DEBUG\r
47                                         Console.WriteLine ("FacesPageHandler: after render");\r
48 #endif\r
49                                 }\r
50                                 catch (FacesException fex) {\r
51                                         Exception inner = fex.InnerException;\r
52                                         if (inner != null)\r
53                                                 throw inner;\r
54                                         throw;\r
55                                 }\r
56                         }\r
57                         finally {\r
58                                 facesContext.release ();\r
59                         }\r
60                 }\r
61         }\r
62 }\r