You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by rw...@apache.org on 2013/01/03 23:37:19 UTC

svn commit: r1428650 - in /pivot/trunk: core/src/org/apache/pivot/beans/BXMLSerializer.java wtk/src/org/apache/pivot/wtk/Spinner.java

Author: rwhitcomb
Date: Thu Jan  3 22:37:19 2013
New Revision: 1428650

URL: http://svn.apache.org/viewvc?rev=1428650&view=rev
Log:
PIVOT-887: Make changes to Spinner and BXMLSerializer such that using the DefaultProperty of Spinner (which is "spinnerData") in a BXML file will work correctly.

Normally if the original value is a Sequence (as it always will be for the spinner data) the child is added to the sequence.  But using an ImmutableList enables BXMLSerializer to catch the UnsupportedOperationException and do a beanAdapter.put instead (which results in a call to "setSpinnerData"), which is the correct thing to do.

Modified:
    pivot/trunk/core/src/org/apache/pivot/beans/BXMLSerializer.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Spinner.java

Modified: pivot/trunk/core/src/org/apache/pivot/beans/BXMLSerializer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/beans/BXMLSerializer.java?rev=1428650&r1=1428649&r2=1428650&view=diff
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/beans/BXMLSerializer.java (original)
+++ pivot/trunk/core/src/org/apache/pivot/beans/BXMLSerializer.java Thu Jan  3 22:37:19 2013
@@ -1210,7 +1210,11 @@ public class BXMLSerializer implements S
 
                             if (defaultPropertyValue instanceof Sequence<?>) {
                                 Sequence<Object> sequence = (Sequence<Object>)defaultPropertyValue;
-                                sequence.add(element.value);
+                                try {
+                                    sequence.add(element.value);
+                                } catch (UnsupportedOperationException uoe) {
+                                    beanAdapter.put(defaultPropertyName, element.value);
+                                }
                             } else {
                                 beanAdapter.put(defaultPropertyName, element.value);
                             }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Spinner.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Spinner.java?rev=1428650&r1=1428649&r2=1428650&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Spinner.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Spinner.java Thu Jan  3 22:37:19 2013
@@ -20,6 +20,7 @@ import java.util.Comparator;
 
 import org.apache.pivot.beans.DefaultProperty;
 import org.apache.pivot.collections.ArrayList;
+import org.apache.pivot.collections.immutable.ImmutableList;
 import org.apache.pivot.collections.List;
 import org.apache.pivot.collections.ListListener;
 import org.apache.pivot.collections.Sequence;
@@ -354,9 +355,14 @@ public class Spinner extends Container {
 
     /**
      * Creates a spinner populated with an empty array list.
+     * <p> The default contents is an {@link ImmutableList} so that
+     * if the default property (which is "spinnerData") is invoked in a BXML
+     * file, <code>BXMLSerializer</code> trying to add to this immutable sequence
+     * will catch an exception and will do a {@link #setSpinnerData setSpinnerData(List<?>)}
+     * instead.
      */
     public Spinner() {
-        this(new ArrayList<Object>());
+        this(new ImmutableList<Object>(new ArrayList<Object>()));
     }
 
     /**