* System.Web20.csproj: added ObjectInputStream.cs and ObjectOutputStream.cs
[mono.git] / mcs / class / System.Web / System.Web.UI / Page.jvm.cs
index 404a88f58a03be96f3b5614f776033171ad73097..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
@@ -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
@@ -459,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