Yuck no idea what happened.  I reverted and pushed again.  Let’s see what
it says this time.

-Alex

On 3/2/15, 3:53 AM, "Erik de Bruin" <e...@ixsoftware.nl> wrote:

>Alex,
>
>What happened to this commit? The diff looks like you completely
>replaced the entire contents of the file... While the subject suggests
>you only changed the name of one of the variables?
>
>Maybe revert and try to create a more readable diff?
>
>EdB
>
>
>
>On Sun, Mar 1, 2015 at 8:03 AM,  <aha...@apache.org> wrote:
>> Repository: flex-sdk
>> Updated Branches:
>>   refs/heads/develop ca3287102 -> 3c40976eb
>>
>>
>> Falcon caught a duplicate variable
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/3c40976e
>> Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/3c40976e
>> Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/3c40976e
>>
>> Branch: refs/heads/develop
>> Commit: 3c40976eb0b3a73d2bb7180cc22400917f719fc4
>> Parents: ca32871
>> Author: Alex Harui <aha...@apache.org>
>> Authored: Sat Feb 28 23:03:24 2015 -0800
>> Committer: Alex Harui <aha...@apache.org>
>> Committed: Sat Feb 28 23:03:24 2015 -0800
>>
>> ----------------------------------------------------------------------
>>  .../org/apache/flex/collections/ArrayList.as    | 1678
>>+++++++++---------
>>  1 file changed, 839 insertions(+), 839 deletions(-)
>> ----------------------------------------------------------------------
>>
>>
>> 
>>http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/3c40976e/frameworks/
>>projects/apache/src/org/apache/flex/collections/ArrayList.as
>> ----------------------------------------------------------------------
>> diff --git 
>>a/frameworks/projects/apache/src/org/apache/flex/collections/ArrayList.as
>> 
>>b/frameworks/projects/apache/src/org/apache/flex/collections/ArrayList.as
>> index a1ea7b4..853f812 100644
>> --- 
>>a/frameworks/projects/apache/src/org/apache/flex/collections/ArrayList.as
>> +++ 
>>b/frameworks/projects/apache/src/org/apache/flex/collections/ArrayList.as
>> @@ -1,839 +1,839 @@
>> 
>>-////////////////////////////////////////////////////////////////////////
>>////////
>> -//
>> -//  Licensed to the Apache Software Foundation (ASF) under one or more
>> -//  contributor license agreements.  See the NOTICE file distributed
>>with
>> -//  this work for additional information regarding copyright ownership.
>> -//  The ASF licenses this file to You under the Apache License,
>>Version 2.0
>> -//  (the "License"); you may not use this file except in compliance
>>with
>> -//  the License.  You may obtain a copy of the License at
>> -//
>> -//      http://www.apache.org/licenses/LICENSE-2.0
>> -//
>> -//  Unless required by applicable law or agreed to in writing, software
>> -//  distributed under the License is distributed on an "AS IS" BASIS,
>> -//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>implied.
>> -//  See the License for the specific language governing permissions and
>> -//  limitations under the License.
>> -//
>> 
>>-////////////////////////////////////////////////////////////////////////
>>////////
>> -
>> -package org.apache.flex.collections
>> -{
>> -
>> -import flash.events.EventDispatcher;
>> -import flash.events.IEventDispatcher;
>> -import flash.utils.IDataInput;
>> -import flash.utils.IDataOutput;
>> -import flash.utils.IExternalizable;
>> -import flash.utils.getQualifiedClassName;
>> -
>> -import mx.collections.ICollectionView;
>> -import mx.collections.IList;
>> -import mx.core.IPropertyChangeNotifier;
>> -import mx.events.CollectionEvent;
>> -import mx.events.CollectionEventKind;
>> -import mx.events.PropertyChangeEvent;
>> -import mx.events.PropertyChangeEventKind;
>> -import mx.resources.IResourceManager;
>> -import mx.resources.ResourceManager;
>> -import mx.utils.ArrayUtil;
>> -import mx.utils.UIDUtil;
>> -
>> -//--------------------------------------
>> -//  Events
>> -//--------------------------------------
>> -
>> -/**
>> - *  Dispatched when the IList has been updated in some way.
>> - *
>> - *  @eventType mx.events.CollectionEvent.COLLECTION_CHANGE
>> - *
>> - *  @langversion 3.0
>> - *  @playerversion Flash 9
>> - *  @playerversion AIR 1.1
>> - *  @productversion Flex 3
>> - */
>> -[Event(name="collectionChange", type="mx.events.CollectionEvent")]
>> -
>> -//--------------------------------------
>> -//  Other metadata
>> -//--------------------------------------
>> -
>> -[RemoteClass(alias="flex.messaging.io.ArrayList")]
>> -
>> -[ResourceBundle("collections")]
>> -
>> -[DefaultProperty("source")]
>> -
>> -/**
>> - *  The ArrayList class is a simple implementation of IList
>> - *  that uses a backing Array as the source of the data.
>> - *
>> - *  Items in the backing Array can be accessed and manipulated
>> - *  using the methods and properties of the <code>IList</code>
>> - *  interface. Operations on an ArrayList instance modify the
>> - *  data source; for example, if you use the
>><code>removeItemAt()</code>
>> - *  method on an ArrayList, you remove the item from the underlying
>> - *  Array.
>> - *
>> - *  This base class will not throw ItemPendingErrors but it
>> - *  is possible that a subclass might.
>> - *
>> - *  <pre>
>> - *  &lt;mx:ArrayList
>> - *  <b>Properties</b>
>> - *  source="null"
>> - *  /&gt;
>> - *  </pre>
>> - *
>> - *  @langversion 3.0
>> - *  @playerversion Flash 10
>> - *  @playerversion AIR 1.5
>> - *  @productversion Flex 4
>> - */
>> -public class ArrayList extends EventDispatcher
>> -       implements IList, IExternalizable, IPropertyChangeNotifier
>> -{
>> -    //include "../core/Version.as";
>> -
>> -    
>>//-----------------------------------------------------------------------
>>---
>> -    //
>> -    // Constructor
>> -    //
>> -    
>>//-----------------------------------------------------------------------
>>---
>> -
>> -    /**
>> -     *  Construct a new ArrayList using the specified array as its
>>source.
>> -     *  If no source is specified an empty array will be used.
>> -     *
>> -     *  @param source The Array to use as a source for the ArrayList.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function ArrayList(source:Array = null)
>> -    {
>> -        super();
>> -
>> -        disableEvents();
>> -        this.source = source;
>> -        enableEvents();
>> -    }
>> -
>> -    
>>//-----------------------------------------------------------------------
>>---
>> -    //
>> -    // Variables
>> -    //
>> -    
>>//-----------------------------------------------------------------------
>>---
>> -
>> -    /**
>> -     *  @private
>> -     *  Used for accessing localized Error messages.
>> -     */
>> -    private var resourceManager:IResourceManager =
>> -        ResourceManager.getInstance();
>> -
>> -    /**
>> -     *  @private
>> -     *  Indicates if events should be dispatched.
>> -     *  calls to enableEvents() and disableEvents() effect the value
>>when == 0
>> -     *  events should be dispatched.
>> -     */
>> -    private var _dispatchEvents:int = 0;
>> -
>> -    
>>//-----------------------------------------------------------------------
>>---
>> -    //
>> -    // Properties
>> -    //
>> -    
>>//-----------------------------------------------------------------------
>>---
>> -
>> -    //----------------------------------
>> -    // length
>> -    //----------------------------------
>> -
>> -    [Bindable("collectionChange")]
>> -
>> -    /**
>> -     *  Get the number of items in the list.  An ArrayList should
>>always
>> -     *  know its length so it shouldn't return -1, though a subclass
>>may
>> -     *  override that behavior.
>> -     *
>> -     *  @return int representing the length of the source.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function get length():int
>> -    {
>> -        if (source)
>> -            return source.length;
>> -        else
>> -            return 0;
>> -    }
>> -
>> -    //----------------------------------
>> -    // source
>> -    //----------------------------------
>> -
>> -    /**
>> -     *  @private
>> -     *  Storage for the source Array.
>> -     */
>> -    private var _source:Array;
>> -
>> -    /**
>> -     *  The source array for this ArrayList.
>> -     *  Any changes done through the IList interface will be reflected
>>in the
>> -     *  source array.
>> -     *  If no source array was supplied the ArrayList will create one
>>internally.
>> -     *  Changes made directly to the underlying Array (e.g., calling
>> -     *  <code>theList.source.pop()</code> will not cause
>><code>CollectionEvents</code>
>> -     *  to be dispatched.
>> -     *
>> -     *  @return An Array that represents the underlying source.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function get source():Array
>> -    {
>> -        return _source;
>> -    }
>> -
>> -    public function set source(s:Array):void
>> -    {
>> -        var i:int;
>> -        var len:int;
>> -        if (_source && _source.length)
>> -        {
>> -            len = _source.length;
>> -            for (i = 0; i < len; i++)
>> -            {
>> -                stopTrackUpdates(_source[i]);
>> -            }
>> -        }
>> -        _source  = s ? s : [];
>> -        len = _source.length;
>> -        for (i = 0; i < len; i++)
>> -        {
>> -            startTrackUpdates(_source[i]);
>> -        }
>> -
>> -        if (_dispatchEvents == 0)
>> -        {
>> -           var event:CollectionEvent =
>> -            new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
>> -           event.kind = CollectionEventKind.RESET;
>> -           dispatchEvent(event);
>> -        }
>> -    }
>> -
>> -    //----------------------------------
>> -    // uid -- mx.core.IPropertyChangeNotifier
>> -    //----------------------------------
>> -
>> -    /**
>> -     *  @private
>> -     *  Storage for the UID String.
>> -     */
>> -    private var _uid:String;
>> -
>> -    /**
>> -     *  Provides access to the unique id for this list.
>> -     *
>> -     *  @return String representing the internal uid.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function get uid():String
>> -    {
>> -               if (!_uid) {
>> -                       _uid = UIDUtil.createUID();
>> -               }
>> -        return _uid;
>> -    }
>> -
>> -    public function set uid(value:String):void
>> -    {
>> -        _uid = value;
>> -    }
>> -
>> -    
>>//-----------------------------------------------------------------------
>>---
>> -    //
>> -    // Methods
>> -    //
>> -    
>>//-----------------------------------------------------------------------
>>---
>> -
>> -    /**
>> -     *  Get the item at the specified index.
>> -     *
>> -     *  @param  index the index in the list from which to retrieve the
>>item
>> -     *  @param  prefetch int indicating both the direction and amount
>>of items
>> -     *          to fetch during the request should the item not be
>>local.
>> -     *  @return the item at that index, null if there is none
>> -     *  @throws ItemPendingError if the data for that index needs to be
>> -     *                           loaded from a remote location
>> -     *  @throws RangeError if the index &lt; 0 or index &gt;= length
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function getItemAt(index:int, prefetch:int = 0):Object
>> -    {
>> -        if (index < 0 || index >= length)
>> -        {
>> -            var message:String = resourceManager.getString(
>> -                "collections", "outOfBounds", [ index ]);
>> -            throw new RangeError(message);
>> -        }
>> -
>> -        return source[index];
>> -    }
>> -
>> -    /**
>> -     *  Place the item at the specified index.
>> -     *  If an item was already at that index the new item will replace
>>it and it
>> -     *  will be returned.
>> -     *
>> -     *  @param  item the new value for the index
>> -     *  @param  index the index at which to place the item
>> -     *  @return the item that was replaced, null if none
>> -     *  @throws RangeError if index is less than 0 or greater than or
>>equal to length
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function setItemAt(item:Object, index:int):Object
>> -    {
>> -        if (index < 0 || index >= length)
>> -        {
>> -            var message:String = resourceManager.getString(
>> -                "collections", "outOfBounds", [ index ]);
>> -            throw new RangeError(message);
>> -        }
>> -
>> -        var oldItem:Object = source[index];
>> -        source[index] = item;
>> -        stopTrackUpdates(oldItem);
>> -        startTrackUpdates(item);
>> -
>> -        //dispatch the appropriate events
>> -        if (_dispatchEvents == 0)
>> -        {
>> -            var hasCollectionListener:Boolean =
>> -                hasEventListener(CollectionEvent.COLLECTION_CHANGE);
>> -            var hasPropertyListener:Boolean =
>> -                hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE);
>> -            var updateInfo:PropertyChangeEvent;
>> -
>> -            if (hasCollectionListener || hasPropertyListener)
>> -            {
>> -                updateInfo = new
>>PropertyChangeEvent(PropertyChangeEvent.PROPERTY_CHANGE);
>> -                updateInfo.kind = PropertyChangeEventKind.UPDATE;
>> -                updateInfo.oldValue = oldItem;
>> -                updateInfo.newValue = item;
>> -                updateInfo.property = index;
>> -            }
>> -
>> -            if (hasCollectionListener)
>> -            {
>> -                var event:CollectionEvent =
>> -                    new
>>CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
>> -                event.kind = CollectionEventKind.REPLACE;
>> -                event.location = index;
>> -                event.items.push(updateInfo);
>> -                dispatchEvent(event);
>> -            }
>> -
>> -            if (hasPropertyListener)
>> -            {
>> -                dispatchEvent(updateInfo);
>> -            }
>> -        }
>> -        return oldItem;
>> -    }
>> -
>> -    /**
>> -     *  Add the specified item to the end of the list.
>> -     *  Equivalent to addItemAt(item, length);
>> -     *
>> -     *  @param item the item to add
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function addItem(item:Object):void
>> -    {
>> -        addItemAt(item, length);
>> -    }
>> -
>> -    /**
>> -     *  Add the item at the specified index.
>> -     *  Any item that was after this index is moved out by one.
>> -     *
>> -     *  @param item the item to place at the index
>> -     *  @param index the index at which to place the item
>> -     *  @throws RangeError if index is less than 0 or greater than the
>>length
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function addItemAt(item:Object, index:int):void
>> -    {
>> -        const spliceUpperBound:int = length;
>> -
>> -        if (index < spliceUpperBound && index > 0)
>> -        {
>> -            source.splice(index, 0, item);
>> -        }
>> -        else if (index == spliceUpperBound)
>> -        {
>> -            source.push(item);
>> -        }
>> -        else if (index == 0)
>> -        {
>> -            source.unshift(item);
>> -        }
>> -        else
>> -        {
>> -            var message:String = resourceManager.getString(
>> -                "collections", "outOfBounds", [ index ]);
>> -            throw new RangeError(message);
>> -        }
>> -
>> -        startTrackUpdates(item);
>> -        internalDispatchEvent(CollectionEventKind.ADD, item, index);
>> -    }
>> -
>> -    /**
>> -     *  @copy mx.collections.ListCollectionView#addAll()
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function addAll(addList:IList):void
>> -    {
>> -        addAllAt(addList, length);
>> -    }
>> -
>> -    /**
>> -     *  @copy mx.collections.ListCollectionView#addAllAt()
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function addAllAt(addList:IList, index:int):void
>> -    {
>> -        var length:int = addList.length;
>> -        for (var i:int = 0; i < length; i++)
>> -        {
>> -            this.addItemAt(addList.getItemAt(i), i+index);
>> -        }
>> -    }
>> -
>> -    /**
>> -     *  Return the index of the item if it is in the list such that
>> -     *  getItemAt(index) == item.
>> -     *  Note that in this implementation the search is linear and is
>>therefore
>> -     *  O(n).
>> -     *
>> -     *  @param item the item to find
>> -     *  @return the index of the item, -1 if the item is not in the
>>list.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function getItemIndex(item:Object):int
>> -    {
>> -        return ArrayUtil.getItemIndex(item, source);
>> -    }
>> -
>> -    /**
>> -     *  Removes the specified item from this list, should it exist.
>> -     *
>> -     *  @param  item Object reference to the item that should be
>>removed.
>> -     *  @return Boolean indicating if the item was removed.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function removeItem(item:Object):Boolean
>> -    {
>> -        var index:int = getItemIndex(item);
>> -        var result:Boolean = index >= 0;
>> -        if (result)
>> -            removeItemAt(index);
>> -
>> -        return result;
>> -    }
>> -
>> -    /**
>> -     *  Remove the item at the specified index and return it.
>> -     *  Any items that were after this index are now one index earlier.
>> -     *
>> -     *  @param index The index from which to remove the item.
>> -     *  @return The item that was removed.
>> -     *  @throws RangeError if index &lt; 0 or index &gt;= length.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function removeItemAt(index:int):Object
>> -    {
>> -        const spliceUpperBound:int = length - 1;
>> -        var removed:Object;
>> -
>> -        if (index > 0 && index < spliceUpperBound)
>> -        {
>> -            removed = source.splice(index, 1)[0];
>> -        }
>> -        else if (index == spliceUpperBound)
>> -        {
>> -            removed = source.pop();
>> -        }
>> -        else if (index == 0)
>> -        {
>> -            removed = source.shift();
>> -        }
>> -        else
>> -        {
>> -            var message:String = resourceManager.getString(
>> -                "collections", "outOfBounds", [ index ]);
>> -            throw new RangeError(message);
>> -        }
>> -
>> -        var removed:Object = source.splice(index, 1)[0];
>> -        stopTrackUpdates(removed);
>> -        internalDispatchEvent(CollectionEventKind.REMOVE, removed,
>>index);
>> -        return removed;
>> -    }
>> -
>> -    /**
>> -     *  Remove all items from the list.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function removeAll():void
>> -    {
>> -        if (length > 0)
>> -        {
>> -            var len:int = length;
>> -            for (var i:int = 0; i < len; i++)
>> -            {
>> -                stopTrackUpdates(source[i]);
>> -            }
>> -
>> -            source.splice(0, length);
>> -            internalDispatchEvent(CollectionEventKind.RESET);
>> -        }
>> -    }
>> -
>> -    /**
>> -     *  Notify the view that an item has been updated.
>> -     *  This is useful if the contents of the view do not implement
>> -     *  <code>IEventDispatcher</code>.
>> -     *  If a property is specified the view may be able to optimize its
>> -     *  notification mechanism.
>> -     *  Otherwise it may choose to simply refresh the whole view.
>> -     *
>> -     *  @param item The item within the view that was updated.
>> -     *
>> -     *  @param property A String, QName, or int
>> -     *  specifying the property that was updated.
>> -     *
>> -     *  @param oldValue The old value of that property.
>> -     *  (If property was null, this can be the old value of the item.)
>> -     *
>> -     *  @param newValue The new value of that property.
>> -     *  (If property was null, there's no need to specify this
>> -     *  as the item is assumed to be the new value.)
>> -     *
>> -     *  @see mx.events.CollectionEvent
>> -     *  @see mx.core.IPropertyChangeNotifier
>> -     *  @see mx.events.PropertyChangeEvent
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -     public function itemUpdated(item:Object, property:Object = null,
>> -                                 oldValue:Object = null,
>> -                                 newValue:Object = null):void
>> -    {
>> -        var event:PropertyChangeEvent =
>> -            new
>>PropertyChangeEvent(PropertyChangeEvent.PROPERTY_CHANGE);
>> -
>> -        event.kind = PropertyChangeEventKind.UPDATE;
>> -        event.source = item;
>> -        event.property = property;
>> -        event.oldValue = oldValue;
>> -        event.newValue = newValue;
>> -
>> -               //This handler was intended to handle events from child
>>objects, not to be called directly
>> -               //itemUpdateHandler(event);
>> -
>> -               internalDispatchEvent(CollectionEventKind.UPDATE,
>>event);
>> -
>> -               // need to dispatch object event now
>> -               if (_dispatchEvents == 0 &&
>>hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE))
>> -               {
>> -                       dispatchPropertyChangeEventClone( event, item );
>> -               }
>> -    }
>> -
>> -    /**
>> -     *  Return an Array that is populated in the same order as the
>>IList
>> -     *  implementation.
>> -     *
>> -     *  @return An Array populated in the same order as the IList
>> -     *  implementation.
>> -     *
>> -     *  @throws ItemPendingError if the data is not yet completely
>>loaded
>> -     *  from a remote location
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    public function toArray():Array
>> -    {
>> -        return source.concat();
>> -    }
>> -
>> -    /**
>> -     *  Ensures that only the source property is seralized.
>> -     *  @private
>> -     */
>> -    public function readExternal(input:IDataInput):void
>> -    {
>> -        source = input.readObject();
>> -    }
>> -
>> -    /**
>> -     *  Ensures that only the source property is serialized.
>> -     *  @private
>> -     */
>> -    public function writeExternal(output:IDataOutput):void
>> -    {
>> -        output.writeObject(_source);
>> -    }
>> -
>> -    /**
>> -     *  Pretty prints the contents of this ArrayList to a string and
>>returns it.
>> -     *
>> -     *  @return A String containing the contents of the ArrayList.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    override public function toString():String
>> -    {
>> -        if (source)
>> -            return source.toString();
>> -        else
>> -            return getQualifiedClassName(this);
>> -    }
>> -
>> -    
>>//-----------------------------------------------------------------------
>>---
>> -    //
>> -    // Internal Methods
>> -    //
>> -    
>>//-----------------------------------------------------------------------
>>---
>> -
>> -       /**
>> -        *  Dispatches a PropertyChangeEvent clone either from a child
>>object whose event needs to be redispatched
>> -        *  or when a PropertyChangeEvent is faked inside of this class
>>for the purposes of informing the view
>> -        *  of an update to underlying data.
>> -        *
>> -        *  @param event The PropertyChangeEvent to be cloned and
>>dispatched
>> -        *  @param item The item within the view that was updated.
>> -        *
>> -        *  @see mx.core.IPropertyChangeNotifier
>> -        *  @see mx.events.PropertyChangeEvent
>> -        */
>> -
>> -       private function dispatchPropertyChangeEventClone(
>>event:PropertyChangeEvent, item:Object ):void {
>> -               var objEvent:PropertyChangeEvent =
>>PropertyChangeEvent(event.clone());
>> -
>> -               var index:int = getItemIndex( item );
>> -               objEvent.property = index.toString() + "." +
>>event.property;
>> -               dispatchEvent(objEvent);
>> -       }
>> -
>> -    /**
>> -     *  Enables event dispatch for this list.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    private function enableEvents():void
>> -    {
>> -        _dispatchEvents++;
>> -        if (_dispatchEvents > 0)
>> -            _dispatchEvents = 0;
>> -    }
>> -
>> -    /**
>> -     *  Disables event dispatch for this list.
>> -     *  To re-enable events call enableEvents(), enableEvents() must
>>be called
>> -     *  a matching number of times as disableEvents().
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    private function disableEvents():void
>> -    {
>> -        _dispatchEvents--;
>> -    }
>> -
>> -    /**
>> -     *  Dispatches a collection event with the specified information.
>> -     *
>> -     *  @param kind String indicates what the kind property of the
>>event should be
>> -     *  @param item Object reference to the item that was added or
>>removed
>> -     *  @param location int indicating where in the source the item
>>was added.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    private function internalDispatchEvent(kind:String, item:Object =
>>null, location:int = -1):void
>> -    {
>> -        if (_dispatchEvents == 0)
>> -        {
>> -            if (hasEventListener(CollectionEvent.COLLECTION_CHANGE))
>> -            {
>> -                var event:CollectionEvent =
>> -                    new
>>CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
>> -                event.kind = kind;
>> -                event.items.push(item);
>> -                event.location = location;
>> -                dispatchEvent(event);
>> -            }
>> -
>> -            // now dispatch a complementary PropertyChangeEvent
>> -            if (hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE)
>>&&
>> -               (kind == CollectionEventKind.ADD || kind ==
>>CollectionEventKind.REMOVE))
>> -            {
>> -                var objEvent:PropertyChangeEvent =
>> -                    new
>>PropertyChangeEvent(PropertyChangeEvent.PROPERTY_CHANGE);
>> -                objEvent.property = location;
>> -                if (kind == CollectionEventKind.ADD)
>> -                    objEvent.newValue = item;
>> -                else
>> -                    objEvent.oldValue = item;
>> -                dispatchEvent(objEvent);
>> -            }
>> -        }
>> -    }
>> -
>> -    /**
>> -     *  Called when any of the contained items in the list dispatch an
>> -     *  ObjectChange event.
>> -     *  Wraps it in a <code>CollectionEventKind.UPDATE</code> object.
>> -     *
>> -     *  @param event The event object for the ObjectChange event.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    protected function
>>itemUpdateHandler(event:PropertyChangeEvent):void
>> -    {
>> -        internalDispatchEvent(CollectionEventKind.UPDATE, event);
>> -
>> -               // need to dispatch object event now
>> -               if (_dispatchEvents == 0 &&
>>hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE))
>> -               {
>> -                       dispatchPropertyChangeEventClone( event,
>>event.target );
>> -               }
>> -    }
>> -
>> -    /**
>> -     *  If the item is an IEventDispatcher, watch it for updates.
>> -     *  This method is called by the <code>addItemAt()</code> method,
>> -     *  and when the source is initially assigned.
>> -     *
>> -     *  @param item The item passed to the <code>addItemAt()</code>
>>method.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    protected function startTrackUpdates(item:Object):void
>> -    {
>> -        if (item && (item is IEventDispatcher))
>> -        {
>> -            IEventDispatcher(item).addEventListener(
>> -               
>>PropertyChangeEvent.PROPERTY_CHANGE,
>> -                                        itemUpdateHandler, false, 0,
>>true);
>> -        }
>> -    }
>> -
>> -    /**
>> -     *  If the item is an IEventDispatcher, stop watching it for
>>updates.
>> -     *  This method is called by the <code>removeItemAt()</code> and
>> -     *  <code>removeAll()</code> methods, and before a new
>> -     *  source is assigned.
>> -     *
>> -     *  @param item The item passed to the <code>removeItemAt()</code>
>>method.
>> -     *
>> -     *  @langversion 3.0
>> -     *  @playerversion Flash 9
>> -     *  @playerversion AIR 1.1
>> -     *  @productversion Flex 3
>> -     */
>> -    protected function stopTrackUpdates(item:Object):void
>> -    {
>> -        if (item && item is IEventDispatcher)
>> -        {
>> -            IEventDispatcher(item).removeEventListener(
>> -               
>>PropertyChangeEvent.PROPERTY_CHANGE,
>> -                                        itemUpdateHandler);
>> -        }
>> -    }
>> -
>> -}
>> -
>> -}
>> 
>>+////////////////////////////////////////////////////////////////////////
>>////////
>> +//
>> +//  Licensed to the Apache Software Foundation (ASF) under one or more
>> +//  contributor license agreements.  See the NOTICE file distributed
>>with
>> +//  this work for additional information regarding copyright ownership.
>> +//  The ASF licenses this file to You under the Apache License,
>>Version 2.0
>> +//  (the "License"); you may not use this file except in compliance
>>with
>> +//  the License.  You may obtain a copy of the License at
>> +//
>> +//      http://www.apache.org/licenses/LICENSE-2.0
>> +//
>> +//  Unless required by applicable law or agreed to in writing, software
>> +//  distributed under the License is distributed on an "AS IS" BASIS,
>> +//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>implied.
>> +//  See the License for the specific language governing permissions and
>> +//  limitations under the License.
>> +//
>> 
>>+////////////////////////////////////////////////////////////////////////
>>////////
>> +
>> +package org.apache.flex.collections
>> +{
>> +
>> +import flash.events.EventDispatcher;
>> +import flash.events.IEventDispatcher;
>> +import flash.utils.IDataInput;
>> +import flash.utils.IDataOutput;
>> +import flash.utils.IExternalizable;
>> +import flash.utils.getQualifiedClassName;
>> +
>> +import mx.collections.ICollectionView;
>> +import mx.collections.IList;
>> +import mx.core.IPropertyChangeNotifier;
>> +import mx.events.CollectionEvent;
>> +import mx.events.CollectionEventKind;
>> +import mx.events.PropertyChangeEvent;
>> +import mx.events.PropertyChangeEventKind;
>> +import mx.resources.IResourceManager;
>> +import mx.resources.ResourceManager;
>> +import mx.utils.ArrayUtil;
>> +import mx.utils.UIDUtil;
>> +
>> +//--------------------------------------
>> +//  Events
>> +//--------------------------------------
>> +
>> +/**
>> + *  Dispatched when the IList has been updated in some way.
>> + *
>> + *  @eventType mx.events.CollectionEvent.COLLECTION_CHANGE
>> + *
>> + *  @langversion 3.0
>> + *  @playerversion Flash 9
>> + *  @playerversion AIR 1.1
>> + *  @productversion Flex 3
>> + */
>> +[Event(name="collectionChange", type="mx.events.CollectionEvent")]
>> +
>> +//--------------------------------------
>> +//  Other metadata
>> +//--------------------------------------
>> +
>> +[RemoteClass(alias="flex.messaging.io.ArrayList")]
>> +
>> +[ResourceBundle("collections")]
>> +
>> +[DefaultProperty("source")]
>> +
>> +/**
>> + *  The ArrayList class is a simple implementation of IList
>> + *  that uses a backing Array as the source of the data.
>> + *
>> + *  Items in the backing Array can be accessed and manipulated
>> + *  using the methods and properties of the <code>IList</code>
>> + *  interface. Operations on an ArrayList instance modify the
>> + *  data source; for example, if you use the 
>><code>removeItemAt()</code>
>> + *  method on an ArrayList, you remove the item from the underlying
>> + *  Array.
>> + *
>> + *  This base class will not throw ItemPendingErrors but it
>> + *  is possible that a subclass might.
>> + *
>> + *  <pre>
>> + *  &lt;mx:ArrayList
>> + *  <b>Properties</b>
>> + *  source="null"
>> + *  /&gt;
>> + *  </pre>
>> + *
>> + *  @langversion 3.0
>> + *  @playerversion Flash 10
>> + *  @playerversion AIR 1.5
>> + *  @productversion Flex 4
>> + */
>> +public class ArrayList extends EventDispatcher
>> +       implements IList, IExternalizable, IPropertyChangeNotifier
>> +{
>> +    //include "../core/Version.as";
>> +
>> +    
>>//-----------------------------------------------------------------------
>>---
>> +    //
>> +    // Constructor
>> +    //
>> +    
>>//-----------------------------------------------------------------------
>>---
>> +
>> +    /**
>> +     *  Construct a new ArrayList using the specified array as its 
>>source.
>> +     *  If no source is specified an empty array will be used.
>> +     *
>> +     *  @param source The Array to use as a source for the ArrayList.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function ArrayList(source:Array = null)
>> +    {
>> +        super();
>> +
>> +        disableEvents();
>> +        this.source = source;
>> +        enableEvents();
>> +    }
>> +
>> +    
>>//-----------------------------------------------------------------------
>>---
>> +    //
>> +    // Variables
>> +    //
>> +    
>>//-----------------------------------------------------------------------
>>---
>> +
>> +    /**
>> +     *  @private
>> +     *  Used for accessing localized Error messages.
>> +     */
>> +    private var resourceManager:IResourceManager =
>> +        ResourceManager.getInstance();
>> +
>> +    /**
>> +     *  @private
>> +     *  Indicates if events should be dispatched.
>> +     *  calls to enableEvents() and disableEvents() effect the value 
>>when == 0
>> +     *  events should be dispatched.
>> +     */
>> +    private var _dispatchEvents:int = 0;
>> +
>> +    
>>//-----------------------------------------------------------------------
>>---
>> +    //
>> +    // Properties
>> +    //
>> +    
>>//-----------------------------------------------------------------------
>>---
>> +
>> +    //----------------------------------
>> +    // length
>> +    //----------------------------------
>> +
>> +    [Bindable("collectionChange")]
>> +
>> +    /**
>> +     *  Get the number of items in the list.  An ArrayList should 
>>always
>> +     *  know its length so it shouldn't return -1, though a subclass 
>>may
>> +     *  override that behavior.
>> +     *
>> +     *  @return int representing the length of the source.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function get length():int
>> +    {
>> +        if (source)
>> +            return source.length;
>> +        else
>> +            return 0;
>> +    }
>> +
>> +    //----------------------------------
>> +    // source
>> +    //----------------------------------
>> +
>> +    /**
>> +     *  @private
>> +     *  Storage for the source Array.
>> +     */
>> +    private var _source:Array;
>> +
>> +    /**
>> +     *  The source array for this ArrayList.
>> +     *  Any changes done through the IList interface will be reflected 
>>in the
>> +     *  source array.
>> +     *  If no source array was supplied the ArrayList will create one 
>>internally.
>> +     *  Changes made directly to the underlying Array (e.g., calling
>> +     *  <code>theList.source.pop()</code> will not cause 
>><code>CollectionEvents</code>
>> +     *  to be dispatched.
>> +     *
>> +     *  @return An Array that represents the underlying source.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function get source():Array
>> +    {
>> +        return _source;
>> +    }
>> +
>> +    public function set source(s:Array):void
>> +    {
>> +        var i:int;
>> +        var len:int;
>> +        if (_source && _source.length)
>> +        {
>> +            len = _source.length;
>> +            for (i = 0; i < len; i++)
>> +            {
>> +                stopTrackUpdates(_source[i]);
>> +            }
>> +        }
>> +        _source  = s ? s : [];
>> +        len = _source.length;
>> +        for (i = 0; i < len; i++)
>> +        {
>> +            startTrackUpdates(_source[i]);
>> +        }
>> +
>> +        if (_dispatchEvents == 0)
>> +        {
>> +           var event:CollectionEvent =
>> +            new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
>> +           event.kind = CollectionEventKind.RESET;
>> +           dispatchEvent(event);
>> +        }
>> +    }
>> +
>> +    //----------------------------------
>> +    // uid -- mx.core.IPropertyChangeNotifier
>> +    //----------------------------------
>> +
>> +    /**
>> +     *  @private
>> +     *  Storage for the UID String.
>> +     */
>> +    private var _uid:String;
>> +
>> +    /**
>> +     *  Provides access to the unique id for this list.
>> +     *
>> +     *  @return String representing the internal uid.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function get uid():String
>> +    {
>> +               if (!_uid) {
>> +                       _uid = UIDUtil.createUID();
>> +               }
>> +        return _uid;
>> +    }
>> +
>> +    public function set uid(value:String):void
>> +    {
>> +        _uid = value;
>> +    }
>> +
>> +    
>>//-----------------------------------------------------------------------
>>---
>> +    //
>> +    // Methods
>> +    //
>> +    
>>//-----------------------------------------------------------------------
>>---
>> +
>> +    /**
>> +     *  Get the item at the specified index.
>> +     *
>> +     *  @param  index the index in the list from which to retrieve the 
>>item
>> +     *  @param  prefetch int indicating both the direction and amount 
>>of items
>> +     *          to fetch during the request should the item not be 
>>local.
>> +     *  @return the item at that index, null if there is none
>> +     *  @throws ItemPendingError if the data for that index needs to be
>> +     *                           loaded from a remote location
>> +     *  @throws RangeError if the index &lt; 0 or index &gt;= length
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function getItemAt(index:int, prefetch:int = 0):Object
>> +    {
>> +        if (index < 0 || index >= length)
>> +        {
>> +            var message:String = resourceManager.getString(
>> +                "collections", "outOfBounds", [ index ]);
>> +            throw new RangeError(message);
>> +        }
>> +
>> +        return source[index];
>> +    }
>> +
>> +    /**
>> +     *  Place the item at the specified index.
>> +     *  If an item was already at that index the new item will replace 
>>it and it
>> +     *  will be returned.
>> +     *
>> +     *  @param  item the new value for the index
>> +     *  @param  index the index at which to place the item
>> +     *  @return the item that was replaced, null if none
>> +     *  @throws RangeError if index is less than 0 or greater than or 
>>equal to length
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function setItemAt(item:Object, index:int):Object
>> +    {
>> +        if (index < 0 || index >= length)
>> +        {
>> +            var message:String = resourceManager.getString(
>> +                "collections", "outOfBounds", [ index ]);
>> +            throw new RangeError(message);
>> +        }
>> +
>> +        var oldItem:Object = source[index];
>> +        source[index] = item;
>> +        stopTrackUpdates(oldItem);
>> +        startTrackUpdates(item);
>> +
>> +        //dispatch the appropriate events
>> +        if (_dispatchEvents == 0)
>> +        {
>> +            var hasCollectionListener:Boolean =
>> +                hasEventListener(CollectionEvent.COLLECTION_CHANGE);
>> +            var hasPropertyListener:Boolean =
>> +                hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE);
>> +            var updateInfo:PropertyChangeEvent;
>> +
>> +            if (hasCollectionListener || hasPropertyListener)
>> +            {
>> +                updateInfo = new 
>>PropertyChangeEvent(PropertyChangeEvent.PROPERTY_CHANGE);
>> +                updateInfo.kind = PropertyChangeEventKind.UPDATE;
>> +                updateInfo.oldValue = oldItem;
>> +                updateInfo.newValue = item;
>> +                updateInfo.property = index;
>> +            }
>> +
>> +            if (hasCollectionListener)
>> +            {
>> +                var event:CollectionEvent =
>> +                    new 
>>CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
>> +                event.kind = CollectionEventKind.REPLACE;
>> +                event.location = index;
>> +                event.items.push(updateInfo);
>> +                dispatchEvent(event);
>> +            }
>> +
>> +            if (hasPropertyListener)
>> +            {
>> +                dispatchEvent(updateInfo);
>> +            }
>> +        }
>> +        return oldItem;
>> +    }
>> +
>> +    /**
>> +     *  Add the specified item to the end of the list.
>> +     *  Equivalent to addItemAt(item, length);
>> +     *
>> +     *  @param item the item to add
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function addItem(item:Object):void
>> +    {
>> +        addItemAt(item, length);
>> +    }
>> +
>> +    /**
>> +     *  Add the item at the specified index.
>> +     *  Any item that was after this index is moved out by one.
>> +     *
>> +     *  @param item the item to place at the index
>> +     *  @param index the index at which to place the item
>> +     *  @throws RangeError if index is less than 0 or greater than the 
>>length
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function addItemAt(item:Object, index:int):void
>> +    {
>> +        const spliceUpperBound:int = length;
>> +
>> +        if (index < spliceUpperBound && index > 0)
>> +        {
>> +            source.splice(index, 0, item);
>> +        }
>> +        else if (index == spliceUpperBound)
>> +        {
>> +            source.push(item);
>> +        }
>> +        else if (index == 0)
>> +        {
>> +            source.unshift(item);
>> +        }
>> +        else
>> +        {
>> +            var message:String = resourceManager.getString(
>> +                "collections", "outOfBounds", [ index ]);
>> +            throw new RangeError(message);
>> +        }
>> +
>> +        startTrackUpdates(item);
>> +        internalDispatchEvent(CollectionEventKind.ADD, item, index);
>> +    }
>> +
>> +    /**
>> +     *  @copy mx.collections.ListCollectionView#addAll()
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function addAll(addList:IList):void
>> +    {
>> +        addAllAt(addList, length);
>> +    }
>> +
>> +    /**
>> +     *  @copy mx.collections.ListCollectionView#addAllAt()
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function addAllAt(addList:IList, index:int):void
>> +    {
>> +        var length:int = addList.length;
>> +        for (var i:int = 0; i < length; i++)
>> +        {
>> +            this.addItemAt(addList.getItemAt(i), i+index);
>> +        }
>> +    }
>> +
>> +    /**
>> +     *  Return the index of the item if it is in the list such that
>> +     *  getItemAt(index) == item.
>> +     *  Note that in this implementation the search is linear and is 
>>therefore
>> +     *  O(n).
>> +     *
>> +     *  @param item the item to find
>> +     *  @return the index of the item, -1 if the item is not in the 
>>list.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function getItemIndex(item:Object):int
>> +    {
>> +        return ArrayUtil.getItemIndex(item, source);
>> +    }
>> +
>> +    /**
>> +     *  Removes the specified item from this list, should it exist.
>> +     *
>> +     *  @param  item Object reference to the item that should be 
>>removed.
>> +     *  @return Boolean indicating if the item was removed.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function removeItem(item:Object):Boolean
>> +    {
>> +        var index:int = getItemIndex(item);
>> +        var result:Boolean = index >= 0;
>> +        if (result)
>> +            removeItemAt(index);
>> +
>> +        return result;
>> +    }
>> +
>> +    /**
>> +     *  Remove the item at the specified index and return it.
>> +     *  Any items that were after this index are now one index earlier.
>> +     *
>> +     *  @param index The index from which to remove the item.
>> +     *  @return The item that was removed.
>> +     *  @throws RangeError if index &lt; 0 or index &gt;= length.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function removeItemAt(index:int):Object
>> +    {
>> +        const spliceUpperBound:int = length - 1;
>> +        var removed:Object;
>> +
>> +        if (index > 0 && index < spliceUpperBound)
>> +        {
>> +            removed = source.splice(index, 1)[0];
>> +        }
>> +        else if (index == spliceUpperBound)
>> +        {
>> +            removed = source.pop();
>> +        }
>> +        else if (index == 0)
>> +        {
>> +            removed = source.shift();
>> +        }
>> +        else
>> +        {
>> +            var message:String = resourceManager.getString(
>> +                "collections", "outOfBounds", [ index ]);
>> +            throw new RangeError(message);
>> +        }
>> +
>> +        removed = source.splice(index, 1)[0];
>> +        stopTrackUpdates(removed);
>> +        internalDispatchEvent(CollectionEventKind.REMOVE, removed, 
>>index);
>> +        return removed;
>> +    }
>> +
>> +    /**
>> +     *  Remove all items from the list.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function removeAll():void
>> +    {
>> +        if (length > 0)
>> +        {
>> +            var len:int = length;
>> +            for (var i:int = 0; i < len; i++)
>> +            {
>> +                stopTrackUpdates(source[i]);
>> +            }
>> +
>> +            source.splice(0, length);
>> +            internalDispatchEvent(CollectionEventKind.RESET);
>> +        }
>> +    }
>> +
>> +    /**
>> +     *  Notify the view that an item has been updated.
>> +     *  This is useful if the contents of the view do not implement
>> +     *  <code>IEventDispatcher</code>.
>> +     *  If a property is specified the view may be able to optimize its
>> +     *  notification mechanism.
>> +     *  Otherwise it may choose to simply refresh the whole view.
>> +     *
>> +     *  @param item The item within the view that was updated.
>> +     *
>> +     *  @param property A String, QName, or int
>> +     *  specifying the property that was updated.
>> +     *
>> +     *  @param oldValue The old value of that property.
>> +     *  (If property was null, this can be the old value of the item.)
>> +     *
>> +     *  @param newValue The new value of that property.
>> +     *  (If property was null, there's no need to specify this
>> +     *  as the item is assumed to be the new value.)
>> +     *
>> +     *  @see mx.events.CollectionEvent
>> +     *  @see mx.core.IPropertyChangeNotifier
>> +     *  @see mx.events.PropertyChangeEvent
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +     public function itemUpdated(item:Object, property:Object = null,
>> +                                 oldValue:Object = null,
>> +                                 newValue:Object = null):void
>> +    {
>> +        var event:PropertyChangeEvent =
>> +            new 
>>PropertyChangeEvent(PropertyChangeEvent.PROPERTY_CHANGE);
>> +
>> +        event.kind = PropertyChangeEventKind.UPDATE;
>> +        event.source = item;
>> +        event.property = property;
>> +        event.oldValue = oldValue;
>> +        event.newValue = newValue;
>> +
>> +               //This handler was intended to handle events from child 
>>objects, not to be called directly
>> +               //itemUpdateHandler(event);
>> +
>> +               internalDispatchEvent(CollectionEventKind.UPDATE, 
>>event);
>> +
>> +               // need to dispatch object event now
>> +               if (_dispatchEvents == 0 && 
>>hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE))
>> +               {
>> +                       dispatchPropertyChangeEventClone( event, item );
>> +               }
>> +    }
>> +
>> +    /**
>> +     *  Return an Array that is populated in the same order as the 
>>IList
>> +     *  implementation.
>> +     *
>> +     *  @return An Array populated in the same order as the IList
>> +     *  implementation.
>> +     *
>> +     *  @throws ItemPendingError if the data is not yet completely 
>>loaded
>> +     *  from a remote location
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    public function toArray():Array
>> +    {
>> +        return source.concat();
>> +    }
>> +
>> +    /**
>> +     *  Ensures that only the source property is seralized.
>> +     *  @private
>> +     */
>> +    public function readExternal(input:IDataInput):void
>> +    {
>> +        source = input.readObject();
>> +    }
>> +
>> +    /**
>> +     *  Ensures that only the source property is serialized.
>> +     *  @private
>> +     */
>> +    public function writeExternal(output:IDataOutput):void
>> +    {
>> +        output.writeObject(_source);
>> +    }
>> +
>> +    /**
>> +     *  Pretty prints the contents of this ArrayList to a string and 
>>returns it.
>> +     *
>> +     *  @return A String containing the contents of the ArrayList.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    override public function toString():String
>> +    {
>> +        if (source)
>> +            return source.toString();
>> +        else
>> +            return getQualifiedClassName(this);
>> +    }
>> +
>> +    
>>//-----------------------------------------------------------------------
>>---
>> +    //
>> +    // Internal Methods
>> +    //
>> +    
>>//-----------------------------------------------------------------------
>>---
>> +
>> +       /**
>> +        *  Dispatches a PropertyChangeEvent clone either from a child 
>>object whose event needs to be redispatched
>> +        *  or when a PropertyChangeEvent is faked inside of this class 
>>for the purposes of informing the view
>> +        *  of an update to underlying data.
>> +        *
>> +        *  @param event The PropertyChangeEvent to be cloned and 
>>dispatched
>> +        *  @param item The item within the view that was updated.
>> +        *
>> +        *  @see mx.core.IPropertyChangeNotifier
>> +        *  @see mx.events.PropertyChangeEvent
>> +        */
>> +
>> +       private function dispatchPropertyChangeEventClone( 
>>event:PropertyChangeEvent, item:Object ):void {
>> +               var objEvent:PropertyChangeEvent = 
>>PropertyChangeEvent(event.clone());
>> +
>> +               var index:int = getItemIndex( item );
>> +               objEvent.property = index.toString() + "." + 
>>event.property;
>> +               dispatchEvent(objEvent);
>> +       }
>> +
>> +    /**
>> +     *  Enables event dispatch for this list.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    private function enableEvents():void
>> +    {
>> +        _dispatchEvents++;
>> +        if (_dispatchEvents > 0)
>> +            _dispatchEvents = 0;
>> +    }
>> +
>> +    /**
>> +     *  Disables event dispatch for this list.
>> +     *  To re-enable events call enableEvents(), enableEvents() must 
>>be called
>> +     *  a matching number of times as disableEvents().
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    private function disableEvents():void
>> +    {
>> +        _dispatchEvents--;
>> +    }
>> +
>> +    /**
>> +     *  Dispatches a collection event with the specified information.
>> +     *
>> +     *  @param kind String indicates what the kind property of the 
>>event should be
>> +     *  @param item Object reference to the item that was added or 
>>removed
>> +     *  @param location int indicating where in the source the item 
>>was added.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    private function internalDispatchEvent(kind:String, item:Object = 
>>null, location:int = -1):void
>> +    {
>> +        if (_dispatchEvents == 0)
>> +        {
>> +            if (hasEventListener(CollectionEvent.COLLECTION_CHANGE))
>> +            {
>> +                var event:CollectionEvent =
>> +                    new 
>>CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
>> +                event.kind = kind;
>> +                event.items.push(item);
>> +                event.location = location;
>> +                dispatchEvent(event);
>> +            }
>> +
>> +            // now dispatch a complementary PropertyChangeEvent
>> +            if (hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE) 
>>&&
>> +               (kind == CollectionEventKind.ADD || kind == 
>>CollectionEventKind.REMOVE))
>> +            {
>> +                var objEvent:PropertyChangeEvent =
>> +                    new 
>>PropertyChangeEvent(PropertyChangeEvent.PROPERTY_CHANGE);
>> +                objEvent.property = location;
>> +                if (kind == CollectionEventKind.ADD)
>> +                    objEvent.newValue = item;
>> +                else
>> +                    objEvent.oldValue = item;
>> +                dispatchEvent(objEvent);
>> +            }
>> +        }
>> +    }
>> +
>> +    /**
>> +     *  Called when any of the contained items in the list dispatch an
>> +     *  ObjectChange event.
>> +     *  Wraps it in a <code>CollectionEventKind.UPDATE</code> object.
>> +     *
>> +     *  @param event The event object for the ObjectChange event.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    protected function 
>>itemUpdateHandler(event:PropertyChangeEvent):void
>> +    {
>> +        internalDispatchEvent(CollectionEventKind.UPDATE, event);
>> +
>> +               // need to dispatch object event now
>> +               if (_dispatchEvents == 0 && 
>>hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE))
>> +               {
>> +                       dispatchPropertyChangeEventClone( event, 
>>event.target );
>> +               }
>> +    }
>> +
>> +    /**
>> +     *  If the item is an IEventDispatcher, watch it for updates.
>> +     *  This method is called by the <code>addItemAt()</code> method,
>> +     *  and when the source is initially assigned.
>> +     *
>> +     *  @param item The item passed to the <code>addItemAt()</code> 
>>method.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    protected function startTrackUpdates(item:Object):void
>> +    {
>> +        if (item && (item is IEventDispatcher))
>> +        {
>> +            IEventDispatcher(item).addEventListener(
>> +                                        
>>PropertyChangeEvent.PROPERTY_CHANGE,
>> +                                        itemUpdateHandler, false, 0, 
>>true);
>> +        }
>> +    }
>> +
>> +    /**
>> +     *  If the item is an IEventDispatcher, stop watching it for 
>>updates.
>> +     *  This method is called by the <code>removeItemAt()</code> and
>> +     *  <code>removeAll()</code> methods, and before a new
>> +     *  source is assigned.
>> +     *
>> +     *  @param item The item passed to the <code>removeItemAt()</code> 
>>method.
>> +     *
>> +     *  @langversion 3.0
>> +     *  @playerversion Flash 9
>> +     *  @playerversion AIR 1.1
>> +     *  @productversion Flex 3
>> +     */
>> +    protected function stopTrackUpdates(item:Object):void
>> +    {
>> +        if (item && item is IEventDispatcher)
>> +        {
>> +            IEventDispatcher(item).removeEventListener(
>> +                                        
>>PropertyChangeEvent.PROPERTY_CHANGE,
>> +                                        itemUpdateHandler);
>> +        }
>> +    }
>> +
>> +}
>> +
>> +}
>>
>
>
>
>-- 
>Ix Multimedia Software
>
>Jan Luykenstraat 27
>3521 VB Utrecht
>
>T. 06-51952295
>I. www.ixsoftware.nl

Reply via email to