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>()));
     }
 
     /**


Reply via email to