* System.Web20.csproj: added ObjectInputStream.cs and ObjectOutputStream.cs
[mono.git] / mcs / class / System.Web / System.Web.UI / Page.jvm.cs
index 5f57c237a40cac36eb8a705db3109f848b932d77..dd342bc11fa20b8ec95d8a93774cde4c12682239 100644 (file)
@@ -43,6 +43,7 @@ using javax.faces.el;
 using javax.faces.component;\r
 using System.Threading;\r
 using System.Web.Configuration;\r
+using Mainsoft.Web.Hosting;\r
 \r
 namespace System.Web.UI\r
 {\r
@@ -59,9 +60,9 @@ namespace System.Web.UI
                string _callbackEventError = String.Empty;\r
                static readonly object CrossPagePostBack = new object ();\r
                FacesContext _facesContext;\r
+               const string RenderBodyContentOnlyKey = "mainsoft.render.body.content.only";\r
 \r
                static readonly java.util.List emptyList = java.util.Collections.unmodifiableList (new java.util.ArrayList ());\r
-               static readonly RenderKitFactory renderFactory = (RenderKitFactory) FactoryFinder.getFactory (FactoryFinder.RENDER_KIT_FACTORY);\r
 \r
                bool _isMultiForm = false;\r
                bool _isMultiFormInited = false;\r
@@ -106,6 +107,8 @@ namespace System.Web.UI
                        _context.PushHandler (this);\r
                        if (jsfHandler == _context.Handler)\r
                                _context.Handler = this;\r
+                       \r
+                       _context.CurrentHandlerInternal = this;\r
 \r
                        return jsfHandler;\r
                }\r
@@ -200,17 +203,7 @@ namespace System.Web.UI
                        System.Diagnostics.Trace.WriteLine ("processSaveState");\r
 \r
                        object state = new Pair (_state, GetValidatorsState ());\r
-                       if (getFacesContext ().getApplication ().getStateManager ().isSavingStateInClient (getFacesContext ())) {\r
-                               int length;\r
-                               byte [] buffer = new ObjectStateFormatter (this).SerializeInternal (state, out length);\r
-                               if (buffer.Length != length) {\r
-                                       byte [] trimmedBuffer = new byte [length];\r
-                                       Array.Copy (buffer, trimmedBuffer, length);\r
-                                       buffer = trimmedBuffer;\r
-                               }\r
-                               state = vmw.common.TypeUtils.ToSByteArray (buffer);\r
-                       }\r
-                       return state;\r
+                       return new StateSerializer (state);\r
                }\r
 \r
                public override void processRestoreState (FacesContext context, object state) {\r
@@ -220,10 +213,7 @@ namespace System.Web.UI
                                throw new ArgumentNullException ("state");\r
                        IHttpHandler jsfHandler = EnterThread ();\r
                        try {\r
-                               if (getFacesContext ().getApplication ().getStateManager ().isSavingStateInClient (getFacesContext ())) {\r
-                                       byte [] buffer = (byte []) vmw.common.TypeUtils.ToByteArray ((sbyte []) state);\r
-                                       state = new ObjectStateFormatter (this).DeserializeInternal (buffer);\r
-                               }\r
+                               state = ((StateSerializer) state).State;\r
                                _state = (Pair) ((Pair) state).First;\r
                                _validatorsState = (bool []) ((Pair) state).Second;\r
                                RestorePageState ();\r
@@ -319,7 +309,7 @@ namespace System.Web.UI
                void HandleException (Exception ex) {\r
                        try {\r
                                if (ex is ThreadAbortException) {\r
-                                       if (_context.Response.FlagEnd == ((ThreadAbortException) ex).ExceptionState) {\r
+                                       if (FlagEnd.Value == ((ThreadAbortException) ex).ExceptionState) {\r
                                                Thread.ResetAbort ();\r
                                                return;\r
                                        }\r
@@ -366,19 +356,11 @@ namespace System.Web.UI
                        FacesContext facesContext = getFacesContext ();\r
 \r
                        ResponseWriter oldWriter = facesContext.getResponseWriter ();\r
-                       ResponseWriter writer;\r
-                       if (oldWriter != null) {\r
-                               writer = oldWriter.cloneWithWriter (new AspNetResponseWriter (httpWriter));\r
-                       }\r
-                       else {\r
-                               RenderKit renderKit = renderFactory.getRenderKit (facesContext, facesContext.getViewRoot ().getRenderKitId ());\r
-\r
-                               ServletResponse response = (ServletResponse) facesContext.getExternalContext ().getResponse ();\r
+                       if (oldWriter == null)\r
+                               throw new InvalidOperationException ();\r
 \r
-                               writer = renderKit.createResponseWriter (new AspNetResponseWriter (httpWriter),\r
-                                                                                                                response.getContentType (), //TODO: is this the correct content type?\r
-                                                                                                                response.getCharacterEncoding ());\r
-                       }\r
+                       ResponseWriter writer = oldWriter.cloneWithWriter (new AspNetResponseWriter (httpWriter));\r
+                       \r
                        facesContext.setResponseWriter (writer);\r
                        return oldWriter;\r
                }\r
@@ -467,5 +449,52 @@ namespace System.Web.UI
                        }\r
                }\r
                #endregion\r
+\r
+               #region StateSerializer\r
+               public sealed class StateSerializer : java.io.Externalizable\r
+               {\r
+                       object _state;\r
+\r
+                       public StateSerializer ()\r
+                       {\r
+                       }\r
+\r
+                       public StateSerializer (object state)\r
+                       {\r
+                               _state = state;\r
+                       }\r
+\r
+                       public object State\r
+                       {\r
+                               get { return _state; }\r
+                       }\r
+\r
+                       public void readExternal (java.io.ObjectInput __p1)\r
+                       {\r
+                               Console.WriteLine ("readExternal: " + CurrentPage);\r
+                               ObjectStateFormatter osf = new ObjectStateFormatter (CurrentPage);\r
+                               _state = osf.Deserialize (new ObjectInputStream (__p1));\r
+                       }\r
+\r
+                       public void writeExternal (java.io.ObjectOutput __p1)\r
+                       {\r
+                               Console.WriteLine ("writeExternal: " + CurrentPage);\r
+                               ObjectStateFormatter osf = new ObjectStateFormatter (CurrentPage);\r
+                               osf.Serialize (new ObjectOutputStream (__p1), _state);\r
+                       }\r
+\r
+                       private Page CurrentPage\r
+                       {\r
+                               get\r
+                               {\r
+                                       HttpContext context = HttpContext.Current;\r
+                                       if (context.CurrentHandler is Page)\r
+                                               return (Page) context.CurrentHandler;\r
+                                       \r
+                                       return context.CurrentHandlerInternal;\r
+                               }\r
+                       }\r
+               } \r
+               #endregion\r
        }\r
 }\r