fix of 7784
[mono.git] / mcs / class / Mainsoft.Web / Mainsoft.Web.Hosting / BaseFacesViewHandler.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using javax.faces.application;\r
5 using java.util;\r
6 using javax.faces.context;\r
7 using javax.faces.component;\r
8 using javax.faces.render;\r
9 using System.Web.UI;\r
10 using System.Web;\r
11 using System.Diagnostics;\r
12 \r
13 namespace Mainsoft.Web.Hosting\r
14 {\r
15         public abstract class BaseFacesViewHandler : ViewHandler, IExtendedViewHandler\r
16         {\r
17                 readonly ViewHandler _viewHandler;\r
18                 public static readonly string NAMESPACE = "__NAMESPACE";\r
19 \r
20                 public BaseFacesViewHandler (ViewHandler viewHandler) {\r
21                         _viewHandler = viewHandler;\r
22                 }\r
23 \r
24                 public override string getActionURL (FacesContext facesContext, string viewId) {\r
25                         return _viewHandler.getActionURL (facesContext, viewId);\r
26                 }\r
27 \r
28                 public override Locale calculateLocale (FacesContext facesContext) {\r
29                         return _viewHandler.calculateLocale (facesContext);\r
30                 }\r
31 \r
32                 public override String calculateRenderKitId (FacesContext facesContext) {\r
33                         return _viewHandler.calculateRenderKitId (facesContext);\r
34                 }\r
35 \r
36                 public override UIViewRoot createView (FacesContext facesContext, String viewId) {\r
37 \r
38                         // create instance of Page by viewId\r
39                         StringBuilder sb = new StringBuilder ();\r
40                         sb.Append (facesContext.getExternalContext ().getRequestContextPath ());\r
41                         sb.Append (viewId);\r
42                         IHttpHandler page = PageParser.GetCompiledPageInstance (sb.ToString (), null, ((AspNetFacesContext) facesContext).Context);\r
43 \r
44                         HttpContext context = ((AspNetFacesContext) facesContext).Context;\r
45                         page.ProcessRequest (context);\r
46                         \r
47                         UIViewRoot uiViewRoot = _viewHandler.createView (facesContext, viewId);\r
48                         uiViewRoot.getChildren ().add (0, (UIComponent) page);\r
49                         \r
50                         Trace.WriteLine ("Created view " + viewId);\r
51                         return uiViewRoot;\r
52                 }\r
53 \r
54                 public override String getResourceURL (FacesContext facesContext, String path) {\r
55                         return _viewHandler.getResourceURL (facesContext, path);\r
56                 }\r
57 \r
58                 public override void renderView (FacesContext facesContext, UIViewRoot viewToRender) {\r
59                         if (viewToRender == null)\r
60                                 throw new ArgumentNullException ("viewToRender", "viewToRender must not be null");\r
61                         ((UIComponent) viewToRender.getChildren ().get (0)).encodeChildren (facesContext);\r
62                 }\r
63 \r
64 \r
65                 public override UIViewRoot restoreView (FacesContext facesContext, String viewId) {\r
66                         return _viewHandler.restoreView (facesContext, viewId);\r
67                 }\r
68 \r
69                 public override void writeState (FacesContext facesContext) {\r
70                         StateManager manager = facesContext.getApplication ().getStateManager ();\r
71                         StateManager.SerializedView serializedView = manager.saveSerializedView (facesContext);\r
72                         manager.writeState (facesContext, serializedView);\r
73                 }\r
74 \r
75                 public virtual string EncodeNamespace (FacesContext facesContext, string value) {\r
76                         HttpContext context = ((AspNetFacesContext) facesContext).Context;\r
77                         string ns = context.Request.Form [NAMESPACE];\r
78                         if (String.IsNullOrEmpty (ns))\r
79                                 return value;\r
80                         return ns + value;\r
81                 }\r
82         }\r
83 }\r