You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ma...@apache.org on 2008/10/08 09:11:18 UTC

svn commit: r702742 - in /myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean: FacesBeanImpl.java ValueBindingValueExpression.java ValueExpressionValueBinding.java

Author: matzew
Date: Wed Oct  8 00:11:17 2008
New Revision: 702742

URL: http://svn.apache.org/viewvc?rev=702742&view=rev
Log:
TRINIDAD-1253 - Problems with ValueBindingValueExpression and ValueExpressionValueBinding

Thx to Blake Sullivan for the patch

Modified:
    myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/FacesBeanImpl.java
    myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/ValueBindingValueExpression.java
    myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/ValueExpressionValueBinding.java

Modified: myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/FacesBeanImpl.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/FacesBeanImpl.java?rev=702742&r1=702741&r2=702742&view=diff
==============================================================================
--- myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/FacesBeanImpl.java (original)
+++ myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/FacesBeanImpl.java Wed Oct  8 00:11:17 2008
@@ -149,7 +149,7 @@
     if (ve instanceof ValueBindingValueExpression)
       return ((ValueBindingValueExpression) ve).getValueBinding();
       
-    return new ValueExpressionValueBinding(ve);
+    return ValueExpressionValueBinding.newValueExpressionValueBinding(ve);
   }
 
   final public void setValueBinding(PropertyKey key, ValueBinding binding)
@@ -162,7 +162,7 @@
     }
     else
     {
-      ve = new ValueBindingValueExpression(binding);
+      ve = ValueBindingValueExpression.newValueBindingValueExpression(binding);
     }
 
     setValueExpression(key, ve);

Modified: myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/ValueBindingValueExpression.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/ValueBindingValueExpression.java?rev=702742&r1=702741&r2=702742&view=diff
==============================================================================
--- myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/ValueBindingValueExpression.java (original)
+++ myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/ValueBindingValueExpression.java Wed Oct  8 00:11:17 2008
@@ -24,19 +24,39 @@
 import javax.el.ELException;
 import javax.el.ValueExpression;
 
+import javax.faces.component.StateHolder;
 import javax.faces.context.FacesContext;
 import javax.faces.el.EvaluationException;
 import javax.faces.el.ValueBinding;
 
 
 @Deprecated
-class ValueBindingValueExpression
-  extends ValueExpression implements Serializable
+class ValueBindingValueExpression extends ValueExpression
 {
-
-  // TODO implement serialization correctly?
-  public ValueBindingValueExpression(ValueBinding binding)
+  public static ValueBindingValueExpression newValueBindingValueExpression(ValueBinding binding)
+  {
+    if (binding instanceof StateHolder)
+    {
+      if (binding instanceof Serializable)
+        return new SerializableStateHolderValueBindingValueExpression(binding);
+      else
+        return new StateHolderValueBindingValueExpression(binding);      
+    }
+    else if (binding instanceof Serializable)
+    {
+      return new SerializableValueBindingValueExpression(binding);
+    }
+    else
+    {
+      return new ValueBindingValueExpression(binding);      
+    }
+  }
+  
+  private ValueBindingValueExpression(ValueBinding binding)
   {
+    if (binding == null)
+      throw new NullPointerException();
+    
     _binding = binding;
   }
   
@@ -127,6 +147,63 @@
   {
     return _binding.hashCode();
   }
+  
+  public String toString()
+  {
+    return super.toString() + ", binding=" + _binding;
+  }
+
+  private static class SerializableValueBindingValueExpression extends ValueBindingValueExpression
+                                                               implements Serializable                                                 
+  {
+    public SerializableValueBindingValueExpression(ValueBinding binding)
+    {
+      super(binding);
+    }
+  }
+  
+  private static class StateHolderValueBindingValueExpression extends ValueBindingValueExpression
+                                                              implements StateHolder
+  {
+    public StateHolderValueBindingValueExpression(ValueBinding binding)
+    {
+      super(binding);
+      _stateHolder = (StateHolder)binding;
+    }
+    
+    public Object saveState(FacesContext facesContext)
+    {
+      return _stateHolder.saveState(facesContext);
+    }
+
+    public void restoreState(FacesContext facesContext, Object object)
+    {
+      _stateHolder.restoreState(facesContext, object);
+    }
+
+    public boolean isTransient()
+    {
+      return _stateHolder.isTransient();
+    }
+
+    public void setTransient(boolean b)
+    {
+      _stateHolder.setTransient(b);
+    }
+    
+    private final StateHolder _stateHolder;
+  }
+  
+  private static class SerializableStateHolderValueBindingValueExpression extends 
+                                                             StateHolderValueBindingValueExpression
+                                                              implements Serializable
+  {
+    public SerializableStateHolderValueBindingValueExpression(ValueBinding binding)
+    {
+      super(binding);
+    }
+  }
 
   private final ValueBinding _binding;
 }
+

Modified: myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/ValueExpressionValueBinding.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/ValueExpressionValueBinding.java?rev=702742&r1=702741&r2=702742&view=diff
==============================================================================
--- myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/ValueExpressionValueBinding.java (original)
+++ myfaces/trinidad/trunk_1.2.x/trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/ValueExpressionValueBinding.java Wed Oct  8 00:11:17 2008
@@ -18,19 +18,43 @@
  */
 package org.apache.myfaces.trinidad.bean;
 
+import java.io.Serializable;
+
 import javax.el.ELException;
 import javax.el.ValueExpression;
 
+import javax.faces.component.StateHolder;
 import javax.faces.context.FacesContext;
 import javax.faces.el.EvaluationException;
 import javax.faces.el.ValueBinding;
 
 @Deprecated
-public class ValueExpressionValueBinding
-  extends ValueBinding
+public class ValueExpressionValueBinding extends ValueBinding
 {
-  public ValueExpressionValueBinding(ValueExpression ve)
+  public static ValueExpressionValueBinding newValueExpressionValueBinding(ValueExpression ve)
+  {
+    if (ve instanceof StateHolder)
+    {
+      if (ve instanceof Serializable)
+        return new SerializableStateHolderValueExpressionValueBinding(ve);
+      else
+        return new StateHolderValueExpressionValueBinding(ve);      
+    }
+    else if (ve instanceof Serializable)
+    {
+      return new SerializableValueExpressionValueBinding(ve);
+    }
+    else
+    {
+      return new ValueExpressionValueBinding(ve);      
+    }    
+  }
+  
+  private ValueExpressionValueBinding(ValueExpression ve)
   {
+    if (ve == null)
+      throw new NullPointerException();
+    
     _ve = ve;
   }
 
@@ -90,6 +114,79 @@
       throw new EvaluationException(ee.getMessage(), ee.getCause());
     }
   }
+
+  public boolean equals(Object o)
+  {
+    if (o == this)
+      return true;
+    
+    if (!(o instanceof ValueExpressionValueBinding))
+      return false;
+      
+    ValueExpressionValueBinding that = (ValueExpressionValueBinding) o;
+    return that._ve.equals(_ve);
+  }
+
+  public int hashCode()
+  {
+    return _ve.hashCode();
+  }
   
+  public String toString()
+  {
+    return super.toString() + ", expression=" + _ve;
+  }
+
+  private static class SerializableValueExpressionValueBinding extends ValueExpressionValueBinding
+                                                               implements Serializable                                                 
+  {
+    public SerializableValueExpressionValueBinding(ValueExpression ve)
+    {
+      super(ve);
+    }
+  }
+  
+  private static class StateHolderValueExpressionValueBinding extends ValueExpressionValueBinding
+                                                              implements StateHolder
+  {
+    public StateHolderValueExpressionValueBinding(ValueExpression ve)
+    {
+      super(ve);
+      _stateHolder = (StateHolder)ve;
+    }
+    
+    public Object saveState(FacesContext facesContext)
+    {
+      return _stateHolder.saveState(facesContext);
+    }
+
+    public void restoreState(FacesContext facesContext, Object object)
+    {
+      _stateHolder.restoreState(facesContext, object);
+    }
+
+    public boolean isTransient()
+    {
+      return _stateHolder.isTransient();
+    }
+
+    public void setTransient(boolean b)
+    {
+      _stateHolder.setTransient(b);
+    }
+    
+    private final StateHolder _stateHolder;
+  }
+  
+  private static class SerializableStateHolderValueExpressionValueBinding extends 
+                                                             StateHolderValueExpressionValueBinding
+                                                              implements Serializable
+  {
+    public SerializableStateHolderValueExpressionValueBinding(ValueExpression ve)
+    {
+      super(ve);
+    }
+  }
+
   private final ValueExpression _ve;
 }