for TARGET_J2EE only:
[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, HttpContext context, string url) {\r
16                         Type type = PageMapper.GetObjectType (context, url);\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, HttpContext context, string url) {\r
24                         Type type = PageMapper.GetObjectType (context, url);\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\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 \r
51                 sealed class ReadOnlySessionWrapperHandler : SessionWrapperHandler, IReadOnlySessionState\r
52                 {\r
53                         public ReadOnlySessionWrapperHandler (IHttpHandler handler) : base (handler) { }\r
54                 }\r
55 \r
56                 #endregion\r
57 \r
58                 #region ExtendedSessionWrappers\r
59 \r
60                 class SessionWrapperExtendedHandler : SessionWrapperHandler, IHttpExtendedHandler\r
61                 {\r
62                         public SessionWrapperExtendedHandler (IHttpExtendedHandler handler)\r
63                                 : base (handler) {\r
64                         }\r
65 \r
66                         public bool IsCompleted {\r
67                                 get { return ((IHttpExtendedHandler) _handler).IsCompleted; }\r
68                         }\r
69                 }\r
70 \r
71                 sealed class ReadOnlySessionWrapperExtendedHandler : SessionWrapperExtendedHandler, IReadOnlySessionState\r
72                 {\r
73                         public ReadOnlySessionWrapperExtendedHandler (IHttpExtendedHandler handler) : base (handler) { }\r
74                 }\r
75 \r
76                 #endregion\r
77         }\r
78 }\r