1. refactoring
[mono.git] / mcs / class / Mainsoft.Web / Mainsoft.Web.Hosting / SessionWrapper.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Web;\r
5 using System.Web.J2EE;\r
6 using System.Web.SessionState;\r
7 \r
8 namespace Mainsoft.Web.Hosting\r
9 {\r
10         public static class SessionWrapper\r
11         {\r
12                 static readonly Type IRequiresSessionStateType = typeof (IRequiresSessionState);\r
13                 static readonly Type IReadOnlySessionStateType = typeof (IReadOnlySessionState);\r
14 \r
15                 public static IHttpHandler WrapHandler (IHttpHandler handler) {\r
16                         Type type = (Type) ((IServiceProvider) handler).GetService (typeof (Type));\r
17 \r
18                         if (IRequiresSessionStateType.IsAssignableFrom (type))\r
19                                 return IReadOnlySessionStateType.IsAssignableFrom (type) ?\r
20                                         new ReadOnlySessionWrapperHandler (handler) : new SessionWrapperHandler (handler);\r
21                         return handler;\r
22                 }\r
23                 public static IHttpHandler WrapHandler (IHttpExtendedHandler handler) {\r
24                         Type type = (Type) ((IServiceProvider) handler).GetService (typeof (Type));\r
25 \r
26                         if (IRequiresSessionStateType.IsAssignableFrom (type))\r
27                                 return IReadOnlySessionStateType.IsAssignableFrom (type) ?\r
28                                         new ReadOnlySessionWrapperExtendedHandler (handler) : new SessionWrapperExtendedHandler (handler);\r
29                         return handler;\r
30                 }\r
31 \r
32                 #region SessionWrappers\r
33 \r
34                 class SessionWrapperHandler : IHttpHandler, IRequiresSessionState, IServiceProvider\r
35                 {\r
36                         protected readonly IHttpHandler _handler;\r
37 \r
38                         public SessionWrapperHandler (IHttpHandler handler) {\r
39                                 _handler = handler;\r
40                         }\r
41 \r
42                         public bool IsReusable {\r
43                                 get { return _handler.IsReusable; }\r
44                         }\r
45 \r
46                         public void ProcessRequest (HttpContext context) {\r
47                                 _handler.ProcessRequest (context);\r
48                         }\r
49 \r
50                         public object GetService (Type serviceType) {\r
51                                 return ((IServiceProvider) _handler).GetService (serviceType);\r
52                         }\r
53                 }\r
54 \r
55                 sealed class ReadOnlySessionWrapperHandler : SessionWrapperHandler, IReadOnlySessionState\r
56                 {\r
57                         public ReadOnlySessionWrapperHandler (IHttpHandler handler) : base (handler) { }\r
58                 }\r
59 \r
60                 #endregion\r
61 \r
62                 #region ExtendedSessionWrappers\r
63 \r
64                 class SessionWrapperExtendedHandler : SessionWrapperHandler, IHttpExtendedHandler\r
65                 {\r
66                         public SessionWrapperExtendedHandler (IHttpExtendedHandler handler)\r
67                                 : base (handler) {\r
68                         }\r
69 \r
70                         public bool IsCompleted {\r
71                                 get { return ((IHttpExtendedHandler) _handler).IsCompleted; }\r
72                         }\r
73                 }\r
74 \r
75                 sealed class ReadOnlySessionWrapperExtendedHandler : SessionWrapperExtendedHandler, IReadOnlySessionState\r
76                 {\r
77                         public ReadOnlySessionWrapperExtendedHandler (IHttpExtendedHandler handler) : base (handler) { }\r
78                 }\r
79 \r
80                 #endregion\r
81         }\r
82 }\r