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