You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2010/01/31 01:54:13 UTC

svn commit: r904942 - in /myfaces/core/trunk: api/src/main/java/javax/faces/component/ impl/src/main/java/org/apache/myfaces/renderkit/html/

Author: lu4242
Date: Sun Jan 31 00:54:13 2010
New Revision: 904942

URL: http://svn.apache.org/viewvc?rev=904942&view=rev
Log:
MYFACES-2342 New objects added for new api in UIViewRoot, UIComponent and UIComponentBase could be saved and restored

Modified:
    myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponent.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlScriptRenderer.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlStylesheetRenderer.java

Modified: myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponent.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponent.java?rev=904942&r1=904941&r2=904942&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponent.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponent.java Sun Jan 31 00:54:13 2010
@@ -1128,24 +1128,45 @@
 
         public void restoreState(FacesContext context, Object state)
         {
-            //TODO: Delta
+            if (state == null)
+            {
+                return;
+            }
             Object[] values = (Object[]) state;
             componentClass = (Class) values[0];
-            listener = values[1] == null ? 
-                    UIComponent.getCurrentComponent(context) : 
-                        (ComponentSystemEventListener) UIComponentBase.restoreAttachedState(context, values[1]);
+            if (values[1] instanceof _AttachedDeltaWrapper)
+            {
+                ((StateHolder)listener).restoreState(context, ((_AttachedDeltaWrapper)values[1]).getWrappedStateObject());
+            }
+            else
+            {
+                listener = values[1] == null ? 
+                        UIComponent.getCurrentComponent(context) : 
+                            (ComponentSystemEventListener) UIComponentBase.restoreAttachedState(context, values[1]);
+            }
         }
 
         public Object saveState(FacesContext context)
         {
-            //TODO: Delta
-            Object[] state = new Object[2];
-            state[0] = componentClass;
-            if (!(listener instanceof UIComponent))
+            if (!initialStateMarked())
+            {
+                Object[] state = new Object[2];
+                state[0] = componentClass;
+                if (!(listener instanceof UIComponent))
+                {
+                    state[1] = UIComponentBase.saveAttachedState(context, listener);
+                }
+                return state;
+            }
+            else
             {
-                state[1] = UIComponentBase.saveAttachedState(context, listener);
+                Object listenerSaved = ((StateHolder) listener).saveState(context);
+                if (listenerSaved == null)
+                {
+                    return null;
+                }
+                return new Object[]{componentClass, new _AttachedDeltaWrapper(listener.getClass(), listenerSaved)};
             }
-            return state;                
         }
 
         public void setTransient(boolean newTransientValue)

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlScriptRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlScriptRenderer.java?rev=904942&r1=904941&r2=904942&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlScriptRenderer.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlScriptRenderer.java Sun Jan 31 00:54:13 2010
@@ -27,6 +27,7 @@
 import javax.faces.application.FacesMessage;
 import javax.faces.application.ProjectStage;
 import javax.faces.application.Resource;
+import javax.faces.component.PartialStateHolder;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIViewRoot;
 import javax.faces.component.UniqueIdVendor;
@@ -55,7 +56,7 @@
 @JSFRenderer(renderKitId = "HTML_BASIC", family = "javax.faces.Output", type = "javax.faces.resource.Script")
 @ListenerFor(systemEventClass = PostAddToViewEvent.class)
 public class HtmlScriptRenderer extends Renderer implements
-        ComponentSystemEventListener
+        ComponentSystemEventListener, PartialStateHolder
 {
     //private static final Log log = LogFactory.getLog(HtmlScriptRenderer.class);
     private static final Logger log = Logger.getLogger(HtmlScriptRenderer.class.getName());
@@ -246,4 +247,39 @@
             writer.endElement(HTML.SCRIPT_ELEM);
         }
     }
+
+    private boolean _initialStateMarked;
+    
+    public void clearInitialState()
+    {
+        _initialStateMarked = false;
+    }
+
+    public boolean initialStateMarked()
+    {
+        return _initialStateMarked;
+    }
+
+    public void markInitialState()
+    {
+        _initialStateMarked = true;
+    }
+
+    public boolean isTransient()
+    {
+        return false;
+    }
+
+    public void restoreState(FacesContext context, Object state)
+    {
+    }
+
+    public Object saveState(FacesContext context)
+    {
+        return null;
+    }
+
+    public void setTransient(boolean newTransientValue)
+    {
+    }
 }

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlStylesheetRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlStylesheetRenderer.java?rev=904942&r1=904941&r2=904942&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlStylesheetRenderer.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlStylesheetRenderer.java Sun Jan 31 00:54:13 2010
@@ -27,6 +27,7 @@
 import javax.faces.application.FacesMessage;
 import javax.faces.application.ProjectStage;
 import javax.faces.application.Resource;
+import javax.faces.component.PartialStateHolder;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIViewRoot;
 import javax.faces.component.UniqueIdVendor;
@@ -55,7 +56,7 @@
 @JSFRenderer(renderKitId = "HTML_BASIC", family = "javax.faces.Output", type = "javax.faces.resource.Stylesheet")
 @ListenerFor(systemEventClass = PostAddToViewEvent.class)
 public class HtmlStylesheetRenderer extends Renderer implements
-    ComponentSystemEventListener
+    ComponentSystemEventListener, PartialStateHolder
 {
     //private static final Log log = LogFactory.getLog(HtmlStylesheetRenderer.class);
     private static final Logger log = Logger.getLogger(HtmlStylesheetRenderer.class.getName());
@@ -239,4 +240,39 @@
             writer.endElement(HTML.LINK_ELEM);
         }
     }
+    
+    private boolean _initialStateMarked;
+    
+    public void clearInitialState()
+    {
+        _initialStateMarked = false;
+    }
+
+    public boolean initialStateMarked()
+    {
+        return _initialStateMarked;
+    }
+
+    public void markInitialState()
+    {
+        _initialStateMarked = true;
+    }
+
+    public boolean isTransient()
+    {
+        return false;
+    }
+
+    public void restoreState(FacesContext context, Object state)
+    {
+    }
+
+    public Object saveState(FacesContext context)
+    {
+        return null;
+    }
+
+    public void setTransient(boolean newTransientValue)
+    {
+    }
 }