You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ha...@apache.org on 2016/09/27 09:49:46 UTC

[01/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Added itemRendererCreated event to DataItemFactory* classes.

Repository: flex-asjs
Updated Branches:
  refs/heads/refactor-sprite 216602496 -> 26bc15194


Added itemRendererCreated event to DataItemFactory* classes.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/db261add
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/db261add
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/db261add

Branch: refs/heads/refactor-sprite
Commit: db261add7954b9855311e2170b62fa25add0b255
Parents: 2ebc6c2
Author: Peter Ent <pe...@apache.org>
Authored: Thu Sep 8 14:25:40 2016 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Thu Sep 8 14:25:40 2016 -0400

----------------------------------------------------------------------
 .../projects/HTML/src/main/flex/HTMLClasses.as  |   1 -
 .../org/apache/flex/events/ItemRendererEvent.as |  90 +++++++++
 ...ererFactoryAndEventDispatcherForArrayData.as | 191 -------------------
 .../DataItemRendererFactoryForArrayData.as      |  22 ++-
 .../DataItemRendererFactoryForArrayList.as      |  13 +-
 ...ataItemRendererFactoryForHierarchicalData.as |   4 +
 .../TextItemRendererFactoryForArrayData.as      |  22 ++-
 ...extItemRendererFactoryForStringVectorData.as |  23 ++-
 .../HTML/src/main/resources/basic-manifest.xml  |   6 +
 9 files changed, 166 insertions(+), 206 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/db261add/frameworks/projects/HTML/src/main/flex/HTMLClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/HTMLClasses.as b/frameworks/projects/HTML/src/main/flex/HTMLClasses.as
index f5c0f41..51b5e48 100644
--- a/frameworks/projects/HTML/src/main/flex/HTMLClasses.as
+++ b/frameworks/projects/HTML/src/main/flex/HTMLClasses.as
@@ -144,7 +144,6 @@ internal class HTMLClasses
     import org.apache.flex.html.beads.TextItemRendererFactoryForArrayData; TextItemRendererFactoryForArrayData;
 	import org.apache.flex.html.beads.DataItemRendererFactoryForArrayData; DataItemRendererFactoryForArrayData;
 	import org.apache.flex.html.beads.DataItemRendererFactoryForArrayList; DataItemRendererFactoryForArrayList;
-	import org.apache.flex.html.beads.DataItemRendererFactoryAndEventDispatcherForArrayData; DataItemRendererFactoryAndEventDispatcherForArrayData;
 	import org.apache.flex.html.beads.DataItemRendererFactoryForHierarchicalData; DataItemRendererFactoryForHierarchicalData;
 	import org.apache.flex.html.supportClasses.DataGroup; DataGroup;
 	import org.apache.flex.html.supportClasses.Viewport; Viewport;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/db261add/frameworks/projects/HTML/src/main/flex/org/apache/flex/events/ItemRendererEvent.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/events/ItemRendererEvent.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/events/ItemRendererEvent.as
new file mode 100644
index 0000000..f4044a4
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/events/ItemRendererEvent.as
@@ -0,0 +1,90 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+
+//  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.events
+{
+	import org.apache.flex.core.IItemRenderer;
+	import org.apache.flex.events.CustomEvent;
+	
+	/**
+	 * The ItemRendererEvent is dispatched by DataItemRendererFactory classes under
+	 * various conditions.
+	 *
+	 * @langversion 3.0
+	 * @playerversion Flash 10.2
+	 * @playerversion AIR 2.6
+	 * @productversion FlexJS 0.0
+	 */
+	public class ItemRendererEvent extends CustomEvent
+	{
+		// dispatched when a new itemRenderer has been created and added to the IItemRendererParent.
+		static public const CREATED:String = "itemRendererCreated";
+		
+		//--------------------------------------
+		//   Constructor
+		//--------------------------------------
+
+		/**
+		 * Constructor.
+		 *
+		 * @param type The name of the event.
+		 * @param bubbles Whether the event bubbles.
+		 * @param cancelable Whether the event can be canceled.
+		 *
+		 * @langversion 3.0
+		 * @playerversion Flash 10.2
+		 * @playerversion AIR 2.6
+		 * @productversion FlexJS 0.0
+		 */
+		public function ItemRendererEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
+		{
+            COMPILE::SWF
+            {
+                super(type, bubbles, cancelable);                    
+            }
+            COMPILE::JS
+            {
+                super(type);
+            }
+			
+			itemRenderer = null;
+		}
+		
+		/**
+		 * The itemRenderer that has been created.
+		 *
+		 * @export
+		 * @langversion 3.0
+		 * @playerversion Flash 10.2
+		 * @playerversion AIR 2.6
+		 * @productversion FlexJS 0.0
+		 */
+		public var itemRenderer:IItemRenderer;
+		
+		/**
+		 * @private
+		 */
+		override public function cloneEvent():org.apache.flex.events.Event
+		{
+			var newEvent:ItemRendererEvent = new ItemRendererEvent(type);
+			newEvent.itemRenderer = itemRenderer;
+			return newEvent;
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/db261add/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryAndEventDispatcherForArrayData.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryAndEventDispatcherForArrayData.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryAndEventDispatcherForArrayData.as
deleted file mode 100644
index 3c55c60..0000000
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryAndEventDispatcherForArrayData.as
+++ /dev/null
@@ -1,191 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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.html.beads
-{
-	import org.apache.flex.core.IBead;
-	import org.apache.flex.core.IDataProviderItemRendererMapper;
-	import org.apache.flex.core.IItemRendererClassFactory;
-	import org.apache.flex.core.IItemRendererParent;
-	import org.apache.flex.core.IListPresentationModel;
-	import org.apache.flex.core.ISelectableItemRenderer;
-	import org.apache.flex.core.ISelectionModel;
-	import org.apache.flex.core.IStrand;
-	import org.apache.flex.core.IUIBase;
-	import org.apache.flex.core.SimpleCSSStyles;
-	import org.apache.flex.core.UIBase;
-	import org.apache.flex.core.ValuesManager;
-	import org.apache.flex.events.Event;
-	import org.apache.flex.events.EventDispatcher;
-	import org.apache.flex.events.IEventDispatcher;
-	import org.apache.flex.html.List;
-
-    /**
-     *  The DataItemRendererFactoryAndEventDispatcherForArrayData class reads an
-     *  array of data and creates an item renderer for every
-     *  item in the array.  As each itemRenderer is created, a function is called
-	 *  that can be overridden in a subclass. Other implementations of
-     *  IDataProviderItemRendererMapper map different data
-     *  structures or manage a virtual set of renderers.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion FlexJS 0.0
-     */
-	public class DataItemRendererFactoryAndEventDispatcherForArrayData extends EventDispatcher implements IBead, IDataProviderItemRendererMapper
-	{
-        /**
-         *  Constructor.
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion FlexJS 0.0
-         */
-		public function DataItemRendererFactoryAndEventDispatcherForArrayData()
-		{
-			super()
-		}
-
-		private var selectionModel:ISelectionModel;
-
-		private var labelField:String;
-
-		private var _strand:IStrand;
-
-        /**
-         *  @copy org.apache.flex.core.IBead#strand
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion FlexJS 0.0
-         */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			var listView:IListView = _strand.getBeadByType(IListView) as IListView;
-			if (listView == null) {
-				IEventDispatcher(_strand).addEventListener("viewChanged", completeSetup);
-			}
-			else {
-				completeSetup(null);
-			}
-		}
-
-		private function completeSetup(event:Event):void
-		{
-			selectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
-			var listView:IListView = _strand.getBeadByType(IListView) as IListView;
-			dataGroup = listView.dataGroup;
-			selectionModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
-
-			labelField = (listView.host as List).labelField;
-
-			if (!itemRendererFactory)
-			{
-				_itemRendererFactory = new (ValuesManager.valuesImpl.getValue(_strand, "iItemRendererClassFactory")) as IItemRendererClassFactory;
-				_strand.addBead(_itemRendererFactory);
-			}
-
-			dataProviderChangeHandler(null);
-		}
-
-		private var _itemRendererFactory:IItemRendererClassFactory;
-
-        /**
-         *  The org.apache.flex.core.IItemRendererClassFactory used
-         *  to generate instances of item renderers.
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion FlexJS 0.0
-         */
-		public function get itemRendererFactory():IItemRendererClassFactory
-		{
-			return _itemRendererFactory;
-		}
-
-        /**
-         *  @private
-         */
-		public function set itemRendererFactory(value:IItemRendererClassFactory):void
-		{
-			_itemRendererFactory = value;
-		}
-
-        /**
-         *  The org.apache.flex.core.IItemRendererParent that will
-         *  parent the item renderers.
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion FlexJS 0.0
-         */
-		protected var dataGroup:IItemRendererParent;
-
-		private function dataProviderChangeHandler(event:Event):void
-		{
-			var dp:Array = selectionModel.dataProvider as Array;
-			if (!dp)
-				return;
-
-			dataGroup.removeAllElements();
-
-			var listView:IListView = _strand.getBeadByType(IListView) as IListView;
-			var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel;
-
-			var n:int = dp.length;
-			for (var i:int = 0; i < n; i++)
-			{
-				var ir:ISelectableItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer;
-				ir.index = i;
-				ir.labelField = labelField;
-				if (presentationModel) {
-					var style:SimpleCSSStyles = new SimpleCSSStyles();
-					style.marginBottom = presentationModel.separatorThickness;
-					UIBase(ir).style = style;
-					UIBase(ir).height = presentationModel.rowHeight;
-				}
-				dataGroup.addElement(ir);
-				ir.data = dp[i];
-
-				itemRendererCreated(ir);
-			}
-
-			IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated"));
-		}
-
-		/**
-		 * Override this function in a subclass to hook event listeners or other features into
-		 * the itemRenderer when it has been created and set.
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion FlexJS 0.0
-		 */
-		protected function itemRendererCreated(ir:ISelectableItemRenderer):void
-		{
-			// do something with this in a subclass
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/db261add/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as
index 609bfbc..49e6fcc 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as
@@ -31,9 +31,13 @@ package org.apache.flex.html.beads
 	import org.apache.flex.core.UIBase;
 	import org.apache.flex.core.ValuesManager;
 	import org.apache.flex.events.Event;
+	import org.apache.flex.events.EventDispatcher;
 	import org.apache.flex.events.IEventDispatcher;
+	import org.apache.flex.events.ItemRendererEvent;
 	import org.apache.flex.html.List;
 	
+	[Event(name="itemRendererCreated",type="org.apache.flex.events.ItemRendererEvent")]
+	
     /**
      *  The DataItemRendererFactoryForArrayData class reads an
      *  array of data and creates an item renderer for every
@@ -46,7 +50,7 @@ package org.apache.flex.html.beads
      *  @playerversion AIR 2.6
      *  @productversion FlexJS 0.0
      */
-	public class DataItemRendererFactoryForArrayData implements IBead, IDataProviderItemRendererMapper
+	public class DataItemRendererFactoryForArrayData extends EventDispatcher implements IBead, IDataProviderItemRendererMapper
 	{
         /**
          *  Constructor.
@@ -56,8 +60,9 @@ package org.apache.flex.html.beads
          *  @playerversion AIR 2.6
          *  @productversion FlexJS 0.0
          */
-		public function DataItemRendererFactoryForArrayData()
+		public function DataItemRendererFactoryForArrayData(target:Object=null)
 		{
+			super(target);
 		}
 		
 		private var selectionModel:ISelectionModel;
@@ -77,8 +82,13 @@ package org.apache.flex.html.beads
 		public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			selectionModel = value.getBeadByType(ISelectionModel) as ISelectionModel;
-			var listView:IListView = value.getBeadByType(IListView) as IListView;
+			IEventDispatcher(value).addEventListener("beadsAdded",finishSetup);
+		}
+		
+		private function finishSetup(event:Event):void
+		{
+			selectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+			var listView:IListView = _strand.getBeadByType(IListView) as IListView;
 			dataGroup = listView.dataGroup;
 			selectionModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
 			
@@ -153,6 +163,10 @@ package org.apache.flex.html.beads
 				}
 				dataGroup.addElement(ir);
 				ir.data = dp[i];
+				
+				var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED);
+				newEvent.itemRenderer = ir;
+				dispatchEvent(newEvent);
 			}
 			
 			IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated"));

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/db261add/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayList.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayList.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayList.as
index 901b5f3..42b159c 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayList.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayList.as
@@ -33,8 +33,12 @@ package org.apache.flex.html.beads
 	import org.apache.flex.core.ValuesManager;
 	import org.apache.flex.events.Event;
 	import org.apache.flex.events.IEventDispatcher;
+	import org.apache.flex.events.EventDispatcher;
+	import org.apache.flex.events.ItemRendererEvent;
 	import org.apache.flex.html.List;
 	
+	[Event(name="itemRendererCreated",type="org.apache.flex.events.ItemRendererEvent")]
+	
     /**
      *  The DataItemRendererFactoryForArrayList class uses an ArrayList
 	 *  and creates an item renderer for every
@@ -47,7 +51,7 @@ package org.apache.flex.html.beads
      *  @playerversion AIR 2.6
      *  @productversion FlexJS 0.0
      */
-	public class DataItemRendererFactoryForArrayList implements IBead, IDataProviderItemRendererMapper
+	public class DataItemRendererFactoryForArrayList extends EventDispatcher implements IBead, IDataProviderItemRendererMapper
 	{
         /**
          *  Constructor.
@@ -57,8 +61,9 @@ package org.apache.flex.html.beads
          *  @playerversion AIR 2.6
          *  @productversion FlexJS 0.0
          */
-		public function DataItemRendererFactoryForArrayList()
+		public function DataItemRendererFactoryForArrayList(target:Object=null)
 		{
+			super(target);
 		}
 		
 		protected var selectionModel:ISelectionModel;
@@ -177,6 +182,10 @@ package org.apache.flex.html.beads
 				}
 				dataGroup.addElement(ir);
 				setData(ir, dp.getItemAt(i), i);
+				
+				var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED);
+				newEvent.itemRenderer = ir;
+				dispatchEvent(newEvent);
 			}
 			
 			IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated"));

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/db261add/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForHierarchicalData.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForHierarchicalData.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForHierarchicalData.as
index 58bfd21..5c9c59c 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForHierarchicalData.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForHierarchicalData.as
@@ -31,10 +31,14 @@ package org.apache.flex.html.beads
 	import org.apache.flex.core.UIBase;
 	import org.apache.flex.core.ValuesManager;
 	import org.apache.flex.events.Event;
+	import org.apache.flex.events.EventDispatcher;
+	import org.apache.flex.events.ItemRendererEvent;
 	import org.apache.flex.events.IEventDispatcher;
 	import org.apache.flex.html.List;
 	import org.apache.flex.html.supportClasses.TreeListData;
 	import org.apache.flex.collections.FlattenedList;
+	
+	[Event(name="itemRendererCreated",type="org.apache.flex.events.ItemRendererEvent")]
 
     /**
      *  The DataItemRendererFactoryForHierarchicalData class reads a

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/db261add/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as
index f500094..9eda39c 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as
@@ -26,7 +26,11 @@ package org.apache.flex.html.beads
     import org.apache.flex.core.IStrand;
     import org.apache.flex.core.ValuesManager;
     import org.apache.flex.events.Event;
+	import org.apache.flex.events.EventDispatcher;
+	import org.apache.flex.events.ItemRendererEvent;
     import org.apache.flex.events.IEventDispatcher;
+	
+	[Event(name="itemRendererCreated",type="org.apache.flex.events.ItemRendererEvent")]
 
     /**
      *  The TextItemRendererFactoryForArrayData class is the 
@@ -41,7 +45,7 @@ package org.apache.flex.html.beads
      *  @playerversion AIR 2.6
      *  @productversion FlexJS 0.0
      */
-	public class TextItemRendererFactoryForArrayData implements IBead, IDataProviderItemRendererMapper
+	public class TextItemRendererFactoryForArrayData extends EventDispatcher implements IBead, IDataProviderItemRendererMapper
 	{
         /**
          *  Constructor.
@@ -51,8 +55,9 @@ package org.apache.flex.html.beads
          *  @playerversion AIR 2.6
          *  @productversion FlexJS 0.0
          */
-		public function TextItemRendererFactoryForArrayData()
+		public function TextItemRendererFactoryForArrayData(target:Object=null)
 		{
+			super(target);
 		}
 		
 		private var selectionModel:ISelectionModel;
@@ -70,8 +75,13 @@ package org.apache.flex.html.beads
 		public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			selectionModel = value.getBeadByType(ISelectionModel) as ISelectionModel;
-			var listView:IListView = value.getBeadByType(IListView) as IListView;
+			IEventDispatcher(value).addEventListener("beadsAdded",finishSetup);
+		}
+		
+		private function finishSetup(event:Event):void
+		{
+			selectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+			var listView:IListView = _strand.getBeadByType(IListView) as IListView;
 			dataGroup = listView.dataGroup;
 			selectionModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
             
@@ -135,6 +145,10 @@ package org.apache.flex.html.beads
                     tf.text = dp[i][selectionModel.labelField];
                 else
     				tf.text = dp[i];
+				
+				var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED);
+				newEvent.itemRenderer = tf;
+				dispatchEvent(newEvent);
 			}
 			
 			IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated"));

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/db261add/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForStringVectorData.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForStringVectorData.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForStringVectorData.as
index 5c034d9..b0c11b5 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForStringVectorData.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForStringVectorData.as
@@ -25,6 +25,11 @@ package org.apache.flex.html.beads
     import org.apache.flex.core.ISelectionModel;
     import org.apache.flex.core.IStrand;
 	import org.apache.flex.events.Event;
+	import org.apache.flex.events.EventDispatcher;
+	import org.apache.flex.events.IEventDispatcher;
+	import org.apache.flex.events.ItemRendererEvent;
+	
+	[Event(name="itemRendererCreated",type="org.apache.flex.events.ItemRendererEvent")]
 
     /**
      *  The TextItemRendererFactoryForStringVectorData class is the 
@@ -39,7 +44,7 @@ package org.apache.flex.html.beads
      *  @playerversion AIR 2.6
      *  @productversion FlexJS 0.0
      */
-	public class TextItemRendererFactoryForStringVectorData implements IBead
+	public class TextItemRendererFactoryForStringVectorData extends EventDispatcher implements IBead
 	{
         /**
          *  Constructor.
@@ -49,8 +54,9 @@ package org.apache.flex.html.beads
          *  @playerversion AIR 2.6
          *  @productversion FlexJS 0.0
          */
-		public function TextItemRendererFactoryForStringVectorData()
+		public function TextItemRendererFactoryForStringVectorData(target:Object=null)
 		{
+			super(target);
 		}
 		
 		private var selectionModel:ISelectionModel;
@@ -68,8 +74,13 @@ package org.apache.flex.html.beads
 		public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			selectionModel = value.getBeadByType(ISelectionModel) as ISelectionModel;
-			var listView:IListView = value.getBeadByType(IListView) as IListView;
+			IEventDispatcher(value).addEventListener("beadsAdded",finishSetup);
+		}
+		
+		private function finishSetup(event:Event):void
+		{
+			selectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+			var listView:IListView = _strand.getBeadByType(IListView) as IListView;
 			dataGroup = listView.dataGroup;
 			selectionModel.addEventListener("dataProviderChange", dataProviderChangeHandler);
 			dataProviderChangeHandler(null);
@@ -121,6 +132,10 @@ package org.apache.flex.html.beads
                 tf.index = i;
                 dataGroup.addElement(tf);
 				tf.text = dp[i];
+				
+				var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED);
+				newEvent.itemRenderer = tf;
+				dispatchEvent(newEvent);
 			}			
 		}
 		

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/db261add/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/resources/basic-manifest.xml b/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
index baa4ff0..604fdd7 100644
--- a/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
@@ -91,6 +91,12 @@
     <component id="DataGridButtonBarTextButton" class="org.apache.flex.html.DataGridButtonBarTextButton"/>
     <component id="DataGridColumn" class="org.apache.flex.html.supportClasses.DataGridColumn"/>
     <component id="DataGridLinesBead" class="org.apache.flex.html.beads.DataGridLinesBead"/>
+    
+    <component id="DataItemRendererFactoryForArrayData" class="org.apache.flex.html.beads.DataItemRendererFactoryForArrayData" />
+    <component id="DataItemRendererFactoryForArrayList" class="org.apache.flex.html.beads.DataItemRendererFactoryForArrayList" />
+    <component id="DataItemRendererFactoryForHierarchicalData" class="org.apache.flex.html.beads.DataItemRendererFactoryForHierarchicalData" />
+    <component id="TextItemRendererFactoryForArrayData" class="org.apache.flex.html.beads.TextItemRendererFactoryForArrayData" />
+    <component id="TextItemRendererFactoryForStringVectorData" class="org.apache.flex.html.beads.TextItemRendererFactoryForStringVectorData" />
 
     <component id="DateChooser" class="org.apache.flex.html.DateChooser"/>
     <component id="DateField" class="org.apache.flex.html.DateField"/>


[24/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Setup for side-by-side Unit test view of swf and js, with flexuint shim, added Reflection tests

Posted by ha...@apache.org.
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass2.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass2.as b/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass2.as
new file mode 100644
index 0000000..bcc7988
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass2.as
@@ -0,0 +1,103 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests.reflection.support
+{
+
+
+	[TestMeta(foo="class")]
+	public class TestClass2 
+	{
+		//Note: do not change this test class unless you change the related tests to 
+		//support any changes that might appear when testing reflection into it
+		
+		public function TestClass2(blah:String){
+
+		}
+		
+		
+		[TestMeta(foo="instanceMethod")]
+		public function testMethod():void{
+			_testReadWrite = "testMethod was called";
+		}
+		
+		[TestMeta(foo="instanceMethod")]
+		public function testMethodWithArgs(mandatory:String,optional:Boolean=true):Boolean{
+			_testReadWrite = "testMethodWithArgs was called";
+			return optional;
+		}
+		
+		[TestMeta(foo="instanceVariable")]
+		public var testVar:String = "testVar_val";
+		
+		[TestMeta(foo="instanceAccessor")]
+		public function get testReadOnly():String{
+			return _testReadWrite
+		}
+		
+		[TestMeta(foo="instanceAccessor")]
+		public function set testWriteOnly(value:String):void{
+			_testReadWrite=value;
+		}
+		
+		[TestMeta(foo="instanceAccessor")]
+		public function get testReadWrite():String{
+			return _testReadWrite
+		}
+		public function set testReadWrite(value:String):void{
+			_testReadWrite=value;
+		}
+		
+		[TestMeta(foo="staticMethod")]
+		public static function testStaticMethod():void{
+			_testStaticReadWrite = "testStaticMethod was called";
+		}
+		
+		[TestMeta(foo="staticMethod")]
+		public static function testStaticMethodWithArgs(mandatory:String,optional:Boolean=true):Boolean{
+			_testStaticReadWrite = "testStaticMethodWithArgs was called";
+			return optional;
+		}
+		
+		[TestMeta(foo="staticVariable")]
+		public static var testStaticVar:String = "testStaticVar_val";
+		
+		[TestMeta(foo="staticAccessor")]
+		public static function get testStaticReadOnly():String{
+			return _testStaticReadWrite
+		}
+		
+		[TestMeta(foo="staticAccessor")]
+		public static function set testStaticWriteOnly(value:String):void{
+			_testStaticReadWrite = value;
+		}
+		
+		[TestMeta(foo="staticAccessor")]
+		public static function get testStaticReadWrite():String{
+			return _testStaticReadWrite;
+		}
+		public static function set testStaticReadWrite(value:String):void{
+			_testStaticReadWrite = value;
+		}
+		
+		
+		
+		private static var _testStaticReadWrite:String = "staticAccessor_initial_value";
+		private var _testReadWrite:String = "instanceAccessor_initial_value";
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass3.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass3.as b/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass3.as
new file mode 100644
index 0000000..0b4c59b
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass3.as
@@ -0,0 +1,39 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests.reflection.support
+{
+
+
+
+	public class TestClass3 extends TestClass1 implements ITestInterface2, ITestInterface3
+	{
+		
+		public var something:String;
+		
+		
+		public function someMethod2(compulsoryArg:int, optArg:String=null):TestClass1
+		{
+			return null;
+		}
+		
+		public function get someValue2():Boolean {
+			return false;
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass4.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass4.as b/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass4.as
new file mode 100644
index 0000000..5d0a28f
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass4.as
@@ -0,0 +1,95 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests.reflection.support
+{
+
+
+
+	public class TestClass4 extends TestClass2
+	{
+		//Note: do not change this test class unless you change the related tests to 
+		//support any changes that might appear when testing reflection into it
+		
+		public function TestClass4(){
+			super("");
+		}
+		
+		
+		[TestMeta(foo="instanceMethod")]
+		public function testMethod2():void{
+		
+		}
+		
+		[TestMeta(foo="instanceMethod")]
+		public function testMethodWithArgs2(mandatory:String,optional:Boolean=true):void{
+		
+		}
+		
+		[TestMeta(foo="instanceVariable")]
+		public var testVar2:String;
+		
+		[TestMeta(foo="instanceAccessor")]
+		public function get testReadonly2():String{
+			return null
+		}
+		
+		[TestMeta(foo="instanceAccessor")]
+		public function set testWriteonly2(value:String):void{
+			
+		}
+		
+		[TestMeta(foo="instanceAccessor")]
+		public function get testReadeWrite2():String{
+			return null
+		}
+		public function set testReadeWrite2(value:String):void{
+			
+		}
+		
+		[TestMeta(foo="staticMethod")]
+		public static function testStaticMethod():void{
+		}
+		
+		[TestMeta(foo="staticMethod")]
+		public static function testStaticMethodWithArgs(mandatory:String,optional:Boolean=true):void{
+		}
+		
+		[TestMeta(foo="staticVariable")]
+		public static var testStaticVar:String;
+		
+		[TestMeta(foo="staticAccessor")]
+		public static function get testStaticReadonly():String{
+			return null
+		}
+		
+		[TestMeta(foo="staticAccessor")]
+		public static function set testStaticWriteonly(value:String):void{
+			
+		}
+		
+		[TestMeta(foo="staticAccessor")]
+		public static function get testStaticReadeWrite():String{
+			return null
+		}
+		public static function set testStaticReadeWrite(value:String):void{
+			
+		}
+
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexunit/framework/Assert.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexunit/framework/Assert.as b/manualtests/GenericTests/src/flexunit/framework/Assert.as
new file mode 100644
index 0000000..171f695
--- /dev/null
+++ b/manualtests/GenericTests/src/flexunit/framework/Assert.as
@@ -0,0 +1,305 @@
+/*
+ * 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 flexunit.framework
+{
+	//import flexunit.framework.AssertionFailedError;
+ 	
+	/**
+	 * A set of assert methods.  Messages are only displayed when an assert fails.
+	 */
+	public class Assert
+	{
+		/**
+		 * @private
+		 */
+		public static var _assertCount:uint = 0;
+		
+		/**
+		 * Returns the number of assertions that have been made
+		 */
+		public static function get assertionsMade() : uint {
+			return _assertCount;
+		}
+		
+		
+		/**
+		 * Resets the count for the number of assertions that have been made back to zero
+		 */
+		public static function resetAssertionsFields() : void {
+			_assertCount = 0;
+		}
+		
+		/**
+		 * @private
+		 */
+		public static function assertWithApply( asserter:Function, args:Array ):void {
+			_assertCount++;
+			asserter.apply( null, args );
+		}
+
+		/**
+		 * @private
+		 */
+		public static function assertWith( asserter:Function, ...rest ):void {
+			_assertCount++;
+			asserter.apply( null, rest );
+		}
+
+		/**
+		 * Asserts that two provided values are equal.
+		 * 
+		 * @param asserter The function to use for assertion. 
+		 * @param rest
+		 * 			Must be passed at least 2 arguments of type Object to compare for equality.
+		 * 			If three arguments are passed, the first argument must be a String
+		 * 			and will be used as the error message.
+		 *          The first of the comparison arguments represents the expected result
+		 *          The second is the actual result to compare with the expected result.
+		 * 
+		 * 			<code>assertEquals( String, Object, Object );</code>
+		 * 			<code>assertEquals( Object, Object );</code>
+		 */
+		public static function assertEquals(... rest):void
+		{
+			_assertCount++;
+			if ( rest.length == 3 )
+				failNotEquals( rest[0], rest[1], rest[2] );
+			else
+				failNotEquals( "", rest[0], rest[1] );
+		}
+	
+        /**
+         * @private
+         */
+		public static function failNotEquals( message:String, expected:Object, actual:Object ):void
+		{
+			if ( expected != actual )
+			   failWithUserMessage( message, "expected:<" + expected + "> but was:<" + actual + ">" );
+		}
+	
+		/**
+		 * /**
+		 * Asserts that the provided values are strictly equal.
+		 * 
+		 * @param rest
+		 * 			Must be passed at least 2 arguments of type Object to compare for strict equality.
+		 * 			If three arguments are passed, the first argument must be a String
+		 * 			and will be used as the error message.
+		 *          The first of the comparison arguments represents the expected result
+		 *          The second is the actual result to compare with the expected result.
+		 * 
+		 * 			<code>assertStrictlyEquals( String, Object, Object );</code>
+		 * 			<code>assertStrictlyEquals( Object, Object );</code>
+		 */
+		public static function assertStrictlyEquals(... rest):void
+		{
+			_assertCount++;
+			if ( rest.length == 3 )
+				failNotStrictlyEquals( rest[0], rest[1], rest[2] );
+			else
+				failNotStrictlyEquals( "", rest[0], rest[1] );
+		}
+	
+        /**
+         * @private
+         */
+		public static function failNotStrictlyEquals( message:String, expected:Object, actual:Object ):void
+		{
+			if ( expected !== actual )
+			   failWithUserMessage( message, "expected:<" + expected + "> but was:<" + actual + ">" );
+		}
+	
+		/**
+		 * Asserts that a condition is true.
+		 * 
+		 * @param rest
+		 * 			Accepts an argument of type Boolean.
+		 * 			If two arguments are passed the first argument must be a String 
+		 * 			and will be used as the error message.
+		 * 			
+		 * 			<code>assertTrue( String, Boolean );</code>
+		 * 			<code>assertTrue( Boolean );</code>
+		 */
+		public static function assertTrue(... rest):void
+		{
+			_assertCount++;
+			if ( rest.length == 2 )
+				failNotTrue( rest[0], rest[1] );
+			else
+				failNotTrue( "", rest[0] );
+		}
+	
+        /**
+         * Asserts that a condition is not true.
+		 * 
+		 * @param rest
+		 * 			Accepts an argument of type Boolean.
+		 * 			If two arguments are passed the first argument must be a String 
+		 * 			and will be used as the error message.
+		 * 			
+		 * 			<code>assertTrue( String, Boolean );</code>
+		 * 			<code>assertTrue( Boolean );</code>
+         */
+		public static function failNotTrue( message:String, condition:Boolean ):void
+		{
+			if ( !condition )
+			   failWithUserMessage( message, "expected true but was false" );
+		}
+	
+		/**
+         * Asserts that a condition is false.
+		 * 
+		 * @param rest
+		 * 			Accepts an argument of type Boolean.
+		 * 			If two arguments are passed the first argument must be a String
+		 * 			and will be used as the error message.
+		 * 			
+		 * 			<code>assertFalse( String, Boolean );</code>
+		 * 			<code>assertFalse( Boolean );</code>
+		 */
+		public static function assertFalse(... rest):void
+		{
+			_assertCount++;
+			if ( rest.length == 2 )
+				failTrue( rest[0], rest[1] );
+			else
+				failTrue( "", rest[0] );
+		}
+	
+        /**
+         * Asserts that a condition is false. 
+		 * 
+		 * @param rest
+		 * 			Accepts an argument of type Boolean.
+		 * 			If two arguments are passed the first argument must be a String 
+		 * 			and will be used as the error message.
+		 * 			
+		 * 			<code>assertTrue( String, Boolean );</code>
+		 * 			<code>assertTrue( Boolean );</code>
+         */
+		public static function failTrue( message:String, condition:Boolean ):void
+		{
+			if ( condition )
+			   failWithUserMessage( message, "expected false but was true" );
+		}
+	
+		//TODO:  (<code>null</code> okay) needs removal?
+		/**
+		 * Asserts that an object is null.
+		 * 
+		 * @param rest
+		 * 			Accepts an argument of type Object.
+		 * 			If two arguments are passed the first argument must be a String
+		 * 			and will be used as the error message.
+		 * 			
+		 * 			<code>assertNull( String, Object );</code>
+		 * 			<code>assertNull( Object );</code>
+		 * 
+		 */
+		public static function assertNull(... rest):void
+		{
+			_assertCount++;
+			if ( rest.length == 2 )
+				failNotNull( rest[0], rest[1] );
+			else
+				failNotNull( "", rest[0] );
+		}
+	
+        /**
+         * Asserts that an object is not null. 
+		 * 
+		 * @param rest
+		 * 			Accepts an argument of type Boolean.
+		 * 			If two arguments are passed the first argument must be a String 
+		 * 			and will be used as the error message.
+		 * 			
+		 * 			<code>assertTrue( String, Boolean );</code>
+		 * 			<code>assertTrue( Boolean );</code>
+         */
+		public static function failNull( message:String, object:Object ):void
+		{
+			if ( object == null )
+			   failWithUserMessage( message, "object was null: " + object );
+		}
+	
+		//TODO:  (<code>null</code> okay) needs removal?
+		/**
+		 * Asserts that an object is not null.
+		 * 
+		 * @param rest
+		 * 			Accepts an argument of type Object.
+		 * 			If two arguments are passed the first argument must be a String
+		 * 			and will be used as the error message.
+		 * 			
+		 * 			<code>assertNotNull( String, Object );</code>
+		 * 			<code>assertNotNull( Object );</code>
+		 */
+		public static function assertNotNull(... rest):void
+		{
+			_assertCount++;
+			if ( rest.length == 2 )
+				failNull( rest[0], rest[1] );
+			else
+				failNull( "", rest[0] );
+		}
+	
+        /**
+         * Asserts that an object is not null.
+		 * 
+		 * @param rest
+		 * 			Accepts an argument of type Boolean.
+		 * 			If two arguments are passed the first argument must be a String 
+		 * 			and will be used as the error message.
+		 * 			
+		 * 			<code>assertTrue( String, Boolean );</code>
+		 * 			<code>assertTrue( Boolean );</code>
+         */
+		public static function failNotNull( message:String, object:Object ):void
+		{
+			if ( object != null )
+			   failWithUserMessage( message, "object was not null: " + object );
+		}
+		//TODO:  (<code>null</code> okay) needs removal?
+		/**
+		 * Fails a test with the argument message.
+		 * 
+		 * @param failMessage
+		 *            the identifying message for the <code> AssertionFailedError</code> (<code>null</code>
+		 *            okay)
+		 * @see AssertionFailedError
+		 */
+		public static function fail( failMessage:String = ""):void
+		{
+			var error:AssertionFailedError = new AssertionFailedError(failMessage);
+			//this seems necessary for js:
+			if (error.message!=failMessage) error.message = failMessage;
+			throw error;
+		}
+	
+
+        /**
+         * @private
+         */
+		private static function failWithUserMessage( userMessage:String, failMessage:String ):void
+		{
+			if ( userMessage.length > 0 )
+				userMessage = userMessage + " - ";
+			failMessage = userMessage + failMessage;
+			fail(failMessage);
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexunit/framework/AssertionFailedError.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexunit/framework/AssertionFailedError.as b/manualtests/GenericTests/src/flexunit/framework/AssertionFailedError.as
new file mode 100644
index 0000000..359361f
--- /dev/null
+++ b/manualtests/GenericTests/src/flexunit/framework/AssertionFailedError.as
@@ -0,0 +1,39 @@
+/*
+ * 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 flexunit.framework
+{
+	/**
+	 * <code>Error</code> class used for failures in assertions
+	 * 
+	 * @see Assert
+	 */
+	public class AssertionFailedError extends Error
+	{
+		/**
+		 * Throws a new <code>Error</code> of type <code>AssertionError</code>
+		 * with the passed in message
+		 * 
+		 * @param message The message associated with the error (<code>null</code> okay)
+		 * @param id The id of the error if desired (<code>null</code> okay)
+		 */
+		public function AssertionFailedError(message:String="", id:int=0)
+		{
+			super(message, id);
+		}
+		
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/testshim/FlexJSUnitTestRunner.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/testshim/FlexJSUnitTestRunner.as b/manualtests/GenericTests/src/testshim/FlexJSUnitTestRunner.as
new file mode 100644
index 0000000..7494963
--- /dev/null
+++ b/manualtests/GenericTests/src/testshim/FlexJSUnitTestRunner.as
@@ -0,0 +1,186 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 testshim {
+
+import org.apache.flex.reflection.MetaDataArgDefinition;
+import org.apache.flex.reflection.MetaDataDefinition;
+import org.apache.flex.reflection.MethodDefinition;
+import org.apache.flex.reflection.TypeDefinition;
+import org.apache.flex.reflection.describeType;
+
+import flexunit.framework.Assert;
+public class FlexJSUnitTestRunner {
+
+
+    public function FlexJSUnitTestRunner(testerClass:Class, notificationReceiver:Function) {
+        this.testerClass = testerClass;
+        this.callback = notificationReceiver;
+        prepare();
+    }
+
+    private var testerClass:Class;
+    private var callback:Function;
+
+    private var _testingName:String;
+    public function get testingName():String{
+        return _testingName;
+    }
+    private var _successCount:uint=0;
+    public function get successCount():uint {
+        return _successCount;
+    }
+
+    private var _failCount:uint=0;
+    public function get failCount():uint {
+        return _failCount;
+    }
+
+    private var _successfulAssertions:uint=0;
+    public function get successfulAssertions():uint {
+        return _successfulAssertions;
+    }
+
+    private var beforeClassFunc:Function;
+    private var afterClassFunc:Function;
+    private var setupFunc:MethodDefinition;
+    private var tearDownFunc:MethodDefinition;
+
+    private var testMethods:Array=[];
+
+    private function prepare():void{
+        var typeDef:TypeDefinition = describeType(testerClass);
+        _testingName = typeDef.name;
+        var staticMethods:Array = typeDef.staticMethods;
+        for each (var methodDef:MethodDefinition in staticMethods) {
+            var beforeClass:Array = methodDef.retrieveMetaDataByName("BeforeClass");
+            var afterClass:Array = methodDef.retrieveMetaDataByName("AfterClass");
+            if ( beforeClass.length ) {
+                if (beforeClassFunc!=null) throw new Error("BeforeClass used more than once in "+typeDef.qualifiedName);
+                beforeClassFunc = testerClass[methodDef.name];
+            }
+            if ( afterClass.length ) {
+                if (afterClassFunc!=null) throw new Error("AfterClass used more than once in "+typeDef.qualifiedName);
+                afterClassFunc = testerClass[methodDef.name];
+            }
+        }
+        var methods:Array = typeDef.methods;
+        for each (methodDef in methods) {
+            var beforeTests:Array = methodDef.retrieveMetaDataByName("Before");
+            var afterTests:Array = methodDef.retrieveMetaDataByName("After");
+            if ( beforeTests.length ) {
+                if (setupFunc!=null) throw new Error("Before used more than once in "+typeDef.qualifiedName);
+                setupFunc = methodDef;
+            }
+            if ( afterTests.length ) {
+                if (tearDownFunc!=null) throw new Error("After used more than once in "+typeDef.qualifiedName);
+                tearDownFunc = methodDef;
+            }
+            var test:Array = methodDef.retrieveMetaDataByName("Test");
+            if (test.length) {
+                testMethods.push(methodDef);
+            }
+            testMethods.sortOn("name");
+        }
+
+        if (testMethods.length == 0) {
+            throw new Error("Zero test methods detected in "+typeDef.qualifiedName+", check to make sure -keep-as3-metadata is configured");
+        }
+    }
+
+    private function begin():void {
+        if (beforeClassFunc!=null) beforeClassFunc();
+    }
+
+    public function runTests():void{
+        begin();
+        var testInstance:Object = new testerClass();
+        if (setupFunc!=null) {
+            testInstance[setupFunc.name]();
+        }
+        var i:uint=0, l:uint=testMethods.length;
+
+        for(;i<l;i++) {
+            runFlexJSTest(_testingName,testInstance,testMethods[i],callback);
+        }
+
+        if (tearDownFunc!=null) {
+            testInstance[tearDownFunc.name]();
+        }
+        end();
+    }
+
+    private function end():void{
+        if (afterClassFunc!=null) afterClassFunc();
+    }
+
+
+    private function runFlexJSTest(testClass:String,instance:Object,methodDef:MethodDefinition,callback:Function=null):void{
+        var methodName:String = methodDef.name;
+        trace('running test in '+testClass+":"+methodName);
+        var varianceMetas:Array = methodDef.retrieveMetaDataByName("TestVariance");
+        
+        var method:Function = instance[methodName];
+        var preAssertCount:uint = Assert.assertionsMade;
+        var result:TestResult = new TestResult();
+        result.assertions = 0;
+        result.pass = true;
+        result.error = null;
+        result.testClass = testClass;
+        result.testMethod = methodName;
+
+        while (varianceMetas.length) {
+            var varianceMeta:MetaDataDefinition = varianceMetas.shift();
+            var varianceArgs:Array = varianceMeta.getArgsByKey("variance");
+            var i:uint=0, l:uint= varianceArgs.length;
+            if (l) {
+                result.hasVariance=true;
+                for(;i<l;i++) varianceArgs[i] = varianceArgs[i].value;
+                result.varianceTarget = varianceArgs.join(",");
+            }
+            if (result.hasVariance) {
+                var descriptionArgs:Array= varianceMeta.getArgsByKey("description");
+                if (descriptionArgs.length) result.varianceDescription = "";
+                while(descriptionArgs.length) {
+                    var description:MetaDataArgDefinition = descriptionArgs.shift();
+                    result.varianceDescription +=description.value;
+                    if (descriptionArgs.length) result.varianceDescription += ", ";
+                }
+            }
+        }
+        //run the test method
+        try {
+            method();
+        } catch (e:Error) {
+            result.pass=false;
+            result.error = e.name+":" + e.message;
+        }
+        result.assertions = Assert.assertionsMade - preAssertCount;
+        if (preAssertCount == Assert.assertionsMade) {
+            result.warning = "WARNING: This test method appears to have zero Assertions";
+        }
+        if (result.pass) _successCount++;
+        else _failCount++;
+        _successfulAssertions += result.assertions;
+        if (callback!=null) {
+            callback(result);
+        }
+    }
+
+}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/testshim/TestResult.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/testshim/TestResult.as b/manualtests/GenericTests/src/testshim/TestResult.as
new file mode 100644
index 0000000..d9bc514
--- /dev/null
+++ b/manualtests/GenericTests/src/testshim/TestResult.as
@@ -0,0 +1,56 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 testshim {
+public class TestResult {
+    public function TestResult() {
+    }
+
+    public var testClass:String;
+
+    public var testMethod:String;
+
+    public var pass:Boolean;
+
+    public var assertions:uint;
+
+    public var error:String;
+
+    public var hasVariance:Boolean;
+
+    public var varianceTarget:String;
+
+    public var varianceDescription:String;
+    
+    public var warning:String;
+
+    public function toString(newline:String=null):String {
+        if (newline==null) newline="\n";
+        var s:String="";
+        var postFix:String = testMethod+" in "+testClass;
+        if (pass) {
+           s += "PASSED ("+assertions+" assertions made) ["+postFix+"]";
+        } else {
+            s += "FAILED ( at assertion "+assertions+" in test method) ["+postFix+"]"+newline;
+            s += "["+error+"]";
+        }
+        return s;
+    }
+
+}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/testsview/image/Flex.png
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/testsview/image/Flex.png b/manualtests/GenericTests/testsview/image/Flex.png
new file mode 100644
index 0000000..cb68fec
Binary files /dev/null and b/manualtests/GenericTests/testsview/image/Flex.png differ

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/testsview/index.html
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/testsview/index.html b/manualtests/GenericTests/testsview/index.html
new file mode 100644
index 0000000..f90813a
--- /dev/null
+++ b/manualtests/GenericTests/testsview/index.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+	<style>
+		.boxLeft { 
+			display:inline-block; 
+			width:50% ;
+			position:absolute; 
+			top:100px; 
+			bottom:15px; 
+			left:0px
+		}
+		.boxRight { 
+			display:inline-block; 
+			width:50% ;
+			position:absolute; 
+			top:100px; 
+			bottom:15px; 
+			right:0px
+		}
+		.pageStyles {
+			font-family: Arial,sans-serif;
+			color: #333;
+			background: #f5f5f5;
+			font-size: 14px;
+			line-height: 1.5;
+		}
+		h1 {
+			font-size: 28px;
+			line-height: 1.25;
+			font-weight: normal;
+		}
+		em {
+		  font-weight: bold;
+		}
+		.logo {
+			margin-right: 10px;
+			float: left;
+			width: 48px;
+			height: 48px;
+			border-radius: 50%;
+			border: 0;
+			margin: 0;
+			padding: 0;
+		}
+		.titleContent {
+			white-space:nowrap;
+		}
+	</style>
+	<script type="text/javascript">
+	
+	console.API;
+
+	if (typeof console._commandLineAPI !== 'undefined') {
+		console.API = console._commandLineAPI; //chrome
+	} else if (typeof console._inspectorCommandLineAPI !== 'undefined') {
+		console.API = console._inspectorCommandLineAPI; //Safari
+	} else if (typeof console.clear !== 'undefined') {
+		console.API = console;
+	}
+
+	function swapJSBuild() {
+		var button = document.getElementById("swapJsButton");
+		var JS_RELEASE = "JS-Release";
+		var JS_DEBUG = "JS-Debug";
+		var SWAP_TO_RELEASE = "Swap To "+JS_RELEASE;
+		var SWAP_TO_DEBUG = "Swap To "+JS_DEBUG;
+		var debug = "../bin/js-debug/index.html";
+		var release = "../bin/js-release/index.html";
+		var jsIframe = document.getElementById("jsIframe");
+		var status = document.getElementById("jsStatus");
+		if (button && jsIframe) {
+			var current = button.innerHTML;
+			switch (current) {
+				case SWAP_TO_RELEASE:
+					console.API.clear();
+					button.innerHTML = SWAP_TO_DEBUG;
+					jsIframe.src = release;		
+					status.innerHTML = "Currently showing <em>"+JS_RELEASE+"</em>";;				
+				break;
+				case SWAP_TO_DEBUG:
+					console.API.clear();
+					button.innerHTML = SWAP_TO_RELEASE;
+					jsIframe.src = debug;	
+					status.innerHTML = "Currently showing <em>"+JS_DEBUG+"</em>";	
+				break;
+			}
+		}
+	}
+	</script>
+</head>
+<body class="pageStyles">
+	<div>
+		<div >
+			<img class="logo" src="image/Flex.png" alt="Apache Flex logo">
+			<div class="titleContent">
+				<h1>FlexJS Framework Development Unit Tests</h1>
+			</div>
+		<div id="jsStatus" style="position: relative; display: inline-block;">Currently showing <em>JS-Debug</em></div>
+			<button id="swapJsButton" onclick="swapJSBuild()" type="button" class="quoteButton TextButton" style="position: relative; display: inline-block;">Swap To JS-Release</button>
+		</div>
+		<div class="boxLeft">
+			<iframe id="jsIframe" src="../bin/js-debug/index.html" frameborder="1" scrolling="no" height="100%" width="100%" align="left" ></iframe>
+		</div>
+		<div class="boxRight">
+			<iframe id="swfIframe"  src="../bin-debug/GenericTests.html" frameborder="1" scrolling="no" height="100%" width="100%" align="left" ></iframe>
+		</div>
+	</div>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/testsview/src/GenericTestsContainer.mxml
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/testsview/src/GenericTestsContainer.mxml b/manualtests/GenericTests/testsview/src/GenericTestsContainer.mxml
new file mode 100644
index 0000000..9f86bb6
--- /dev/null
+++ b/manualtests/GenericTests/testsview/src/GenericTestsContainer.mxml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!---
+//
+//  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.
+//
+////////////////////////////////////////////////////////////////////////////////
+-->
+<js:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+				   xmlns:local="*"
+				   xmlns:js="library://ns.apache.org/flexjs/basic" 
+				   >
+	
+	<js:valuesImpl>
+		<js:SimpleCSSValuesImpl />
+	</js:valuesImpl>
+	<js:initialView>
+		<local:MyInitialView />
+	</js:initialView>
+</js:Application>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/testsview/src/MyInitialView.mxml
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/testsview/src/MyInitialView.mxml b/manualtests/GenericTests/testsview/src/MyInitialView.mxml
new file mode 100644
index 0000000..bee6823
--- /dev/null
+++ b/manualtests/GenericTests/testsview/src/MyInitialView.mxml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+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.
+
+-->
+<js:View xmlns:fx="http://ns.adobe.com/mxml/2009"
+				xmlns:js="library://ns.apache.org/flexjs/basic"
+				xmlns:local="*" 
+				xmlns:acc="org.apache.flex.html.accessories.*"
+				className="viewStyles">
+	
+	<fx:Style>
+		.title {
+			font-size: 14pt;
+			font-weight: bold;
+		}
+		
+		.viewStyles {
+			font-family: Arial,sans-serif;
+			color: #333;
+			background: #f5f5f5;
+			font-size: 14px;
+			line-height: 1.5;
+		}
+
+		.h1 {
+			font-size: 28px;
+			line-height: 1.25;
+			font-weight: normal;
+		}
+
+	</fx:Style>
+	
+	<fx:Script>
+		<![CDATA[			
+			import org.apache.flex.core.IPopUpHost;
+			import org.apache.flex.events.Event;
+			import org.apache.flex.utils.UIUtils;
+			import org.apache.flex.events.EventDispatcher;
+						
+            import org.apache.flex.reflection.describeType;
+			import org.apache.flex.reflection.getDefinitionByName;
+            import org.apache.flex.reflection.MetaDataArgDefinition;
+            import org.apache.flex.reflection.MetaDataDefinition;
+            import org.apache.flex.reflection.MethodDefinition;
+            import org.apache.flex.reflection.TypeDefinition;
+			import org.apache.flex.reflection.VariableDefinition;
+			
+			import testclasses.TestClass1;
+			import testclasses.TestClass2;
+			import testclasses.ITestInterface;
+			import testclasses.ITestInterface2;
+			import testclasses.ITestInterface3;
+		
+			
+			
+	
+		]]>
+	</fx:Script>
+	<js:beads>
+        <js:ViewDataBinding/>
+		<js:HorizontalLayout />
+    </js:beads>
+	<js:Container id="cont" width="100%" height="700" x="0" y="0">
+		<js:beads>
+			<js:VerticalLayout />
+		</js:beads>
+		<js:Container id="header" width="100%" height="100" x="0" y="0">
+			<js:beads>
+				<js:HorizontalLayout />
+			</js:beads>
+			<js:Label text="FlexJS Framework Development Unit Tests" className="h1" />
+		</js:Container>
+		<js:Container id="tests" width="100%" height="100%" x="0" y="100">
+			<js:beads>
+				<js:HorizontalLayout />
+			</js:beads>
+			
+		</js:Container>
+	</js:Container>
+	
+</js:View>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/testsview/src/controllers/MyController.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/testsview/src/controllers/MyController.as b/manualtests/GenericTests/testsview/src/controllers/MyController.as
new file mode 100644
index 0000000..43622ff
--- /dev/null
+++ b/manualtests/GenericTests/testsview/src/controllers/MyController.as
@@ -0,0 +1,52 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 controllers
+{
+	import org.apache.flex.events.Event;
+	
+	import org.apache.flex.core.Application;
+	import org.apache.flex.core.IDocument;
+    
+    import models.MyModel;
+    	
+	public class MyController implements IDocument
+	{
+		public function MyController(app:Application = null)
+		{
+			if (app)
+			{
+				this.app = app as GenericTests;
+				app.addEventListener("viewChanged", viewChangeHandler);
+			}
+		}
+		
+		private var app:GenericTests;
+		
+		private function viewChangeHandler(event:Event):void
+		{
+		}
+		        
+		public function setDocument(document:Object, id:String = null):void
+		{
+			this.app = document as GenericTests;
+			app.addEventListener("viewChanged", viewChangeHandler);
+		}
+
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/testsview/src/models/MyModel.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/testsview/src/models/MyModel.as b/manualtests/GenericTests/testsview/src/models/MyModel.as
new file mode 100644
index 0000000..5a16d02
--- /dev/null
+++ b/manualtests/GenericTests/testsview/src/models/MyModel.as
@@ -0,0 +1,125 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 models
+{
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.EventDispatcher;
+	
+	public class MyModel extends EventDispatcher
+	{
+		public function MyModel()
+		{
+		}
+		
+		private var _requestedField:String = "Ask";
+		
+		[Bindable("requestedFieldChanged")]
+		public function get requestedField():String
+		{
+			return _requestedField;
+		}
+		
+		public function set requestedField(value:String):void
+		{
+			if (value != _requestedField)
+			{
+				_requestedField = value;
+				dispatchEvent(new Event("requestedFieldChanged"));
+				if (_responseData)
+					dispatchEvent(new Event("responseTextChanged"));
+			}
+		}
+		
+		[Bindable("responseTextChanged")]
+		public function get responseText():String
+		{
+			if (_responseData == null)
+				return "";
+			if (_responseData == "No Data")
+				return _responseData as String;
+			var s:String = _responseData[_requestedField];
+			if (s == null)
+			{
+				if (_requestedField == "Ask")
+					s = _responseData["Bid"];
+			}
+			return s;
+		}
+		
+		private var _responseData:Object;
+		
+		[Bindable("responseDataChanged")]
+		public function get responseData():Object
+		{
+			return _responseData;
+		}
+		
+		public function set responseData(value:Object):void
+		{
+			if (value != _responseData)
+			{
+				_responseData = value;
+				_allData = "";
+				dispatchEvent(new Event("responseDataChanged"));
+				dispatchEvent(new Event("responseTextChanged"));
+			}
+		}
+		
+		private var _allData:String = "";
+		
+		[Bindable("responseDataChanged")]
+		public function get allData():String
+		{
+			if (_allData == "" && _responseData != null)
+			{
+				for (var p:String in _responseData)
+				{
+					_allData += p + ": " + _responseData[p] + "\n";
+				}
+			}
+			return _allData;
+		}
+		
+		
+		private var _stockSymbol:String;
+		
+		[Bindable("stockSymbolChanged")]
+		public function get stockSymbol():String
+		{
+			return _stockSymbol;
+		}
+		
+		public function set stockSymbol(value:String):void
+		{
+			if (value != _stockSymbol)
+			{
+				_stockSymbol = value;
+				dispatchEvent(new Event("stockSymbolChanged"));
+			}
+		}
+
+        private var _strings:Array = ["AAPL", "ADBE", "GOOG", "MSFT", "YHOO"];
+        [Bindable("__NoChangeEvent__")]
+        public function get strings():Array
+        {
+            return _strings;
+        }
+
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/testsview/src/models/TestResultsModel.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/testsview/src/models/TestResultsModel.as b/manualtests/GenericTests/testsview/src/models/TestResultsModel.as
new file mode 100644
index 0000000..eedbf54
--- /dev/null
+++ b/manualtests/GenericTests/testsview/src/models/TestResultsModel.as
@@ -0,0 +1,40 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 models
+{
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.EventDispatcher;
+	
+	public class TestResultsModel extends EventDispatcher
+	{
+		public function TestResultsModel()
+		{
+		}
+		
+		[Bindable]
+		public var completedTests:ArrayList = new ArrayList([]);
+		
+		public function addCompletedTest(testObj:Object):void{
+			completedTests.
+		}
+		
+		
+
+	}
+}
\ No newline at end of file


[12/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - change JS CSS encoding

Posted by ha...@apache.org.
change JS CSS encoding


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/8226d2fc
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/8226d2fc
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/8226d2fc

Branch: refs/heads/refactor-sprite
Commit: 8226d2fc7c28022de9ca5eede142723744db6689
Parents: 773987e
Author: Alex Harui <ah...@apache.org>
Authored: Wed Sep 14 17:17:29 2016 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Wed Sep 14 17:17:29 2016 -0700

----------------------------------------------------------------------
 .../org/apache/flex/core/SimpleCSSValuesImpl.as    | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/8226d2fc/frameworks/projects/Core/src/main/flex/org/apache/flex/core/SimpleCSSValuesImpl.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/SimpleCSSValuesImpl.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/SimpleCSSValuesImpl.as
index 7afd2ff..29ba5e9 100644
--- a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/SimpleCSSValuesImpl.as
+++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/SimpleCSSValuesImpl.as
@@ -125,21 +125,20 @@ package org.apache.flex.core
                         i += numMQ;
                     }
                     var numSel:int = cssData[i++];
-                    var props:Object = {};
+                    var propFn:Function = cssData[i + numSel];
+                    var props:Object;
                     for (var j:int = 0; j < numSel; j++)
                     {
                         var selName:String = cssData[i++];
                         if (values[selName])
+                        {
                             props = values[selName];
-                        values[selName] = props;
-                    }
-                    var numProps:int = cssData[i++];
-                    for (j = 0; j < numProps; j++)
-                    {
-                        var propName:String = cssData[i++];
-                        var propValue:Object = cssData[i++];
-                        props[propName] = propValue;
+                            propFn.prototype = props;
+                        }
+                        values[selName] = new propFn();
                     }
+                    // skip the propFn
+                    props = cssData[i++];
                 }
             }
             


[27/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Merge branch 'develop' into refactor-sprite

Posted by ha...@apache.org.
Merge branch 'develop' into refactor-sprite

* develop: (22 commits)
  Setup for side-by-side Unit test view of swf and js, with flexuint shim, added Reflection tests
  Initial sweep through wide set of Reflection functionality. Currently only verified as compatible between platforms within the FlexJS classes. This update requires corresponding Falcon/FalconJX updates
  Examples' compileair target was not copying image assets correctly to the bin-debug output directory.
  use a subclass so we don't have to bring in DG classes in a class selector.  Class selectors do not get pruned from the .css file, only Type selectors do
  New MobileStocks app. A work in progress so it is not connected to the examples build yet.
  Fix for StackedViewManager in Mobile project.
  Updated DataProviderChangeNotifier to listen for replacement of the dataProvider itself.
  Added ArrayList parallels for Chart classes.
  [FIX] Added Bindable metas to text and html getters on TextInput. Fixes mxml bindings for these properties. Issue reported by PKumar in users mailing list.
  Added missing event listeners.
  change JS CSS encoding
  add reminder to update JIRA
  - Added ImageView and ImageModel to the manifest so they are included in the build
  Removed the explicit creation of model and view for Image now that the CSS defines it universally.
  Modified the CSS definition for Image so its model and view are included for both SWF and JS production.
  try selenium 2.53.1
  update to 0.8.0
  also fix up nightly.properties
  test update from 0.6.0 to 0.7.0
  add a script to update version numbers
  ...

# Conflicts:
#	frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as
#	frameworks/projects/HTML/src/main/resources/defaults.css


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/0c031d92
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/0c031d92
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/0c031d92

Branch: refs/heads/refactor-sprite
Commit: 0c031d922de8568a51ebd80cfdc83404ccbff689
Parents: 2166024 1026ec7
Author: Harbs <ha...@in-tools.com>
Authored: Tue Sep 27 12:49:14 2016 +0300
Committer: Harbs <ha...@in-tools.com>
Committed: Tue Sep 27 12:49:14 2016 +0300

----------------------------------------------------------------------
 build.properties                                |   2 +-
 build.xml                                       |  37 +-
 examples/build_example.xml                      |   3 +-
 .../CordovaCameraExample-app.xml                |   2 +-
 examples/flexjs/DesktopMap/DesktopMap-app.xml   |   2 +-
 examples/flexjs/MapSearch/MapSearch-app.xml     |   2 +-
 .../flexjs/MobileStocks/MobileStocks-app.xml    | 252 ++++++
 examples/flexjs/MobileStocks/build-web.xml      |  61 ++
 examples/flexjs/MobileStocks/build.xml          |  94 +++
 examples/flexjs/MobileStocks/pom.xml            |  94 +++
 .../flexjs/MobileStocks/src/MobileStocks.mxml   |  43 +
 .../flexjs/MobileStocks/src/MyInitialView.mxml  | 264 ++++++
 .../src/StockDataJSONItemConverter.as           |  40 +
 .../MobileStocks/src/assets/arrow_left_24.png   | Bin 0 -> 47785 bytes
 .../MobileStocks/src/assets/background.png      | Bin 0 -> 49376 bytes
 .../flexjs/MobileStocks/src/assets/logo.png     | Bin 0 -> 55223 bytes
 .../src/controller/AlertsViewController.as      | 141 ++++
 .../src/controller/LaunchViewController.as      | 150 ++++
 .../src/controller/WatchListController.as       | 139 ++++
 .../flexjs/MobileStocks/src/models/Alert.as     |  94 +++
 .../flexjs/MobileStocks/src/models/Asset.as     |  77 ++
 .../MobileStocks/src/models/AssetsModel.as      |  57 ++
 .../MobileStocks/src/models/ProductsModel.as    | 296 +++++++
 .../flexjs/MobileStocks/src/models/Stock.as     | 168 ++++
 .../MobileStocks/src/renderers/AlertRenderer.as |  44 +
 .../src/renderers/CompanyNameRenderer.as        |  37 +
 .../src/renderers/SharesTotalRenderer.as        |  37 +
 .../MobileStocks/src/renderers/StockRenderer.as |  47 ++
 .../MobileStocks/src/views/AlertsView.mxml      | 102 +++
 .../MobileStocks/src/views/AssetsView.mxml      | 125 +++
 .../MobileStocks/src/views/LaunchView.mxml      | 161 ++++
 .../MobileStocks/src/views/SearchView.mxml      |  37 +
 .../MobileStocks/src/views/StockView.mxml       | 102 +++
 .../MobileStocks/src/views/WatchListView.mxml   | 154 ++++
 .../StorageExample/StorageExample-app.xml       |   2 +-
 .../renderers/TodoListItemRendererFactory.as    |  68 --
 .../src/sample/todo/views/TodoListView.mxml     |  53 +-
 frameworks/projects/Charts/pom.xml              |  13 +
 .../src/main/config/compile-as-config.xml       |   1 +
 .../Charts/src/main/flex/ChartsClasses.as       |  11 +
 ...ItemRendererFactoryForSeriesArrayListData.as | 139 ++++
 .../charts/beads/HorizontalCategoryAxisBead.as  |   2 +-
 .../HorizontalCategoryAxisForArrayListBead.as   |  85 ++
 .../charts/beads/HorizontalLinearAxisBead.as    |   4 +-
 .../HorizontalLinearAxisForArrayListBead.as     | 121 +++
 .../charts/beads/VerticalCategoryAxisBead.as    |   2 +-
 .../VerticalCategoryAxisForArrayListBead.as     |  98 +++
 .../flex/charts/beads/VerticalLinearAxisBead.as |   4 +-
 .../beads/VerticalLinearAxisForArrayListBead.as | 119 +++
 .../beads/layouts/BarChartLayoutForArrayList.as | 129 +++
 .../layouts/ColumnChartLayoutForArrayList.as    | 129 +++
 .../beads/layouts/PieChartLayoutForArrayList.as | 142 ++++
 .../StackedBarChartLayoutForArrayList.as        | 145 ++++
 .../StackedColumnChartLayoutForArrayList.as     | 142 ++++
 .../models/ChartArrayListSelectionModel.as      |  75 ++
 .../src/main/resources/basic-manifest.xml       |  21 +
 .../org/apache/flex/core/SimpleCSSValuesImpl.as |  17 +-
 .../projects/HTML/src/main/flex/HTMLClasses.as  |   1 -
 .../org/apache/flex/events/ItemRendererEvent.as |  90 ++
 .../src/main/flex/org/apache/flex/html/Image.as |  21 +-
 .../main/flex/org/apache/flex/html/TextInput.as |   2 +
 .../org/apache/flex/html/beads/DataGridView.as  |  13 +-
 ...ererFactoryAndEventDispatcherForArrayData.as | 191 -----
 .../DataItemRendererFactoryForArrayData.as      |  23 +-
 .../DataItemRendererFactoryForArrayList.as      |  13 +-
 ...ataItemRendererFactoryForHierarchicalData.as |   4 +
 .../html/beads/DataProviderChangeNotifier.as    |  42 +-
 .../TextItemRendererFactoryForArrayData.as      |  23 +-
 ...extItemRendererFactoryForStringVectorData.as |  23 +-
 .../html/supportClasses/DataGridColumnList.as   |  61 ++
 .../HTML/src/main/resources/basic-manifest.xml  |   9 +
 .../HTML/src/main/resources/defaults.css        |  16 +-
 .../apache/flex/mobile/StackedViewManager.as    |  13 +-
 .../flex/reflection/AccessorDefinition.as       |  86 ++
 .../apache/flex/reflection/DefinitionBase.as    |   4 +-
 .../flex/reflection/DefinitionWithMetaData.as   |  46 +-
 .../flex/reflection/MetaDataArgDefinition.as    |  24 +-
 .../flex/reflection/MetaDataDefinition.as       |  66 +-
 .../apache/flex/reflection/MethodDefinition.as  | 105 ++-
 .../flex/reflection/ParameterDefinition.as      |  84 ++
 .../apache/flex/reflection/TypeDefinition.as    | 823 ++++++++++++++++---
 .../flex/reflection/VariableDefinition.as       |  36 +-
 .../org/apache/flex/reflection/describeType.as  |  12 +-
 .../apache/flex/reflection/getAliasByClass.as   |  47 ++
 .../apache/flex/reflection/getClassByAlias.as   |  43 +
 .../flex/reflection/registerClassAlias.as       |  44 +
 installer.xml                                   |   4 +-
 manualtests/GenericTests/build.xml              |  74 ++
 manualtests/GenericTests/src/GenericTests.mxml  |  39 +
 manualtests/GenericTests/src/MyInitialView.mxml | 193 +++++
 manualtests/GenericTests/src/README.txt         |  61 ++
 manualtests/GenericTests/src/TestClasses.as     |  37 +
 .../src/flexUnitTests/CoreTester.as             |  30 +
 .../src/flexUnitTests/JiraIssuesTester.as       |  29 +
 .../src/flexUnitTests/ObservedBugsTester.as     |  29 +
 .../src/flexUnitTests/ReflectionTester.as       |  29 +
 .../flexUnitTests/core/BinaryDataTesterTest.as  | 567 +++++++++++++
 .../src/flexUnitTests/core/StrandTesterTest.as  |  55 ++
 .../src/flexUnitTests/jira/JiraTesterTest.as    |  73 ++
 .../observedbugs/ObservedBugTests.as            |  86 ++
 .../reflection/ReflectionTesterTest.as          | 368 +++++++++
 .../reflection/support/ITestInterface.as        |  27 +
 .../reflection/support/ITestInterface2.as       |  29 +
 .../reflection/support/ITestInterface3.as       |  27 +
 .../reflection/support/ITestInterface4.as       |  29 +
 .../reflection/support/TestClass1.as            |  91 ++
 .../reflection/support/TestClass2.as            | 103 +++
 .../reflection/support/TestClass3.as            |  39 +
 .../reflection/support/TestClass4.as            |  95 +++
 .../src/flexunit/framework/Assert.as            | 305 +++++++
 .../flexunit/framework/AssertionFailedError.as  |  39 +
 .../src/testshim/FlexJSUnitTestRunner.as        | 186 +++++
 .../GenericTests/src/testshim/TestResult.as     |  56 ++
 .../GenericTests/testsview/image/Flex.png       | Bin 0 -> 3526 bytes
 manualtests/GenericTests/testsview/index.html   | 112 +++
 .../testsview/src/GenericTestsContainer.mxml    |  32 +
 .../testsview/src/MyInitialView.mxml            |  96 +++
 .../testsview/src/controllers/MyController.as   |  52 ++
 .../testsview/src/models/MyModel.as             | 125 +++
 .../testsview/src/models/TestResultsModel.as    |  40 +
 marmotinni/java/downloads.xml                   |   4 +-
 nightly.properties                              |   4 +-
 122 files changed, 8995 insertions(+), 521 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/0c031d92/frameworks/projects/Core/src/main/flex/org/apache/flex/core/SimpleCSSValuesImpl.as
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/0c031d92/frameworks/projects/HTML/src/main/flex/HTMLClasses.as
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/0c031d92/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as
----------------------------------------------------------------------
diff --cc frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as
index 61953ca,0a42d2a..1eda9f4
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as
@@@ -18,10 -18,8 +18,9 @@@
  ////////////////////////////////////////////////////////////////////////////////
  package org.apache.flex.html
  {
 +	import org.apache.flex.core.IImage;
  	import org.apache.flex.core.IImageModel;
  	import org.apache.flex.core.UIBase;
-     import org.apache.flex.utils.BinaryData;
      COMPILE::JS
      {
          import org.apache.flex.core.WrappedHTMLElement;            

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/0c031d92/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/0c031d92/frameworks/projects/HTML/src/main/resources/defaults.css
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/0c031d92/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/StackedViewManager.as
----------------------------------------------------------------------


[06/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - update to 0.8.0

Posted by ha...@apache.org.
update to 0.8.0


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/35135423
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/35135423
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/35135423

Branch: refs/heads/refactor-sprite
Commit: 35135423bc3afde7bf82a954f9ea6651cdceabf9
Parents: 755dd1e
Author: Alex Harui <ah...@apache.org>
Authored: Fri Sep 9 13:04:00 2016 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Sep 9 13:04:00 2016 -0700

----------------------------------------------------------------------
 build.properties                                                 | 2 +-
 .../flexjs/CordovaCameraExample/CordovaCameraExample-app.xml     | 2 +-
 examples/flexjs/DesktopMap/DesktopMap-app.xml                    | 2 +-
 examples/flexjs/MapSearch/MapSearch-app.xml                      | 2 +-
 examples/flexjs/StorageExample/StorageExample-app.xml            | 2 +-
 installer.xml                                                    | 4 ++--
 nightly.properties                                               | 4 ++--
 7 files changed, 9 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/35135423/build.properties
----------------------------------------------------------------------
diff --git a/build.properties b/build.properties
index 2b1eef0..424ed97 100644
--- a/build.properties
+++ b/build.properties
@@ -21,7 +21,7 @@
 release.name = Apache Flex (FlexJS)
 # this is the version that appears in the flex-sdk-description <description> tag
 # and on the package name.  This is the publicly known version of FlexJS
-release.version = 0.7.0
+release.version = 0.8.0
 
 # fb.release.version must start with 4 in order for FB to accept it.
 # intellij seems to want it to be at least 4.6 in order to not use certain

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/35135423/examples/flexjs/CordovaCameraExample/CordovaCameraExample-app.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/CordovaCameraExample/CordovaCameraExample-app.xml b/examples/flexjs/CordovaCameraExample/CordovaCameraExample-app.xml
index 1531f02..7c9a0ad 100644
--- a/examples/flexjs/CordovaCameraExample/CordovaCameraExample-app.xml
+++ b/examples/flexjs/CordovaCameraExample/CordovaCameraExample-app.xml
@@ -45,7 +45,7 @@
 	<!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade.
 	Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
 	An updated version of application must have a versionNumber value higher than the previous version. Required for namespace >= 2.5 . -->
-	<versionNumber>0.7.0</versionNumber>
+	<versionNumber>0.8.0</versionNumber>
 
 	<!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. Optional. -->
 	<!-- <versionLabel></versionLabel> -->

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/35135423/examples/flexjs/DesktopMap/DesktopMap-app.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/DesktopMap/DesktopMap-app.xml b/examples/flexjs/DesktopMap/DesktopMap-app.xml
index 7e5b561..247bb2d 100644
--- a/examples/flexjs/DesktopMap/DesktopMap-app.xml
+++ b/examples/flexjs/DesktopMap/DesktopMap-app.xml
@@ -45,7 +45,7 @@
 	<!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade.
 	Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
 	An updated version of application must have a versionNumber value higher than the previous version. Required for namespace >= 2.5 . -->
-	<versionNumber>0.7.0</versionNumber>
+	<versionNumber>0.8.0</versionNumber>
 
 	<!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. Optional. -->
 	<!-- <versionLabel></versionLabel> -->

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/35135423/examples/flexjs/MapSearch/MapSearch-app.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MapSearch/MapSearch-app.xml b/examples/flexjs/MapSearch/MapSearch-app.xml
index 0655646..747b29c 100644
--- a/examples/flexjs/MapSearch/MapSearch-app.xml
+++ b/examples/flexjs/MapSearch/MapSearch-app.xml
@@ -45,7 +45,7 @@
 	<!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade.
 	Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
 	An updated version of application must have a versionNumber value higher than the previous version. Required for namespace >= 2.5 . -->
-	<versionNumber>0.7.0</versionNumber>
+	<versionNumber>0.8.0</versionNumber>
 
 	<!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. Optional. -->
 	<!-- <versionLabel></versionLabel> -->

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/35135423/examples/flexjs/StorageExample/StorageExample-app.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/StorageExample/StorageExample-app.xml b/examples/flexjs/StorageExample/StorageExample-app.xml
index 6f072a6..2e6e858 100644
--- a/examples/flexjs/StorageExample/StorageExample-app.xml
+++ b/examples/flexjs/StorageExample/StorageExample-app.xml
@@ -45,7 +45,7 @@
 	<!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade.
 	Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
 	An updated version of application must have a versionNumber value higher than the previous version. Required for namespace >= 2.5 . -->
-	<versionNumber>0.7.0</versionNumber>
+	<versionNumber>0.8.0</versionNumber>
 
 	<!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. Optional. -->
 	<!-- <versionLabel></versionLabel> -->

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/35135423/installer.xml
----------------------------------------------------------------------
diff --git a/installer.xml b/installer.xml
index 0d51dcc..d6c8722 100644
--- a/installer.xml
+++ b/installer.xml
@@ -57,8 +57,8 @@
     
     <property name="air.sdk.version" value="14.0"/>
     <property name="flash.sdk.version" value="14.0"/>
-    <property name="flexjs.version" value="0.7.0"/>
-    <property name="falcon.version" value="0.7.0"/>
+    <property name="flexjs.version" value="0.8.0"/>
+    <property name="falcon.version" value="0.8.0"/>
 
     <property name="swfobject.url.server" value="https://github.com" />
     <property name="swfobject.url.folder" value="swfobject/swfobject/archive" />

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/35135423/nightly.properties
----------------------------------------------------------------------
diff --git a/nightly.properties b/nightly.properties
index d3c8474..03928fc 100644
--- a/nightly.properties
+++ b/nightly.properties
@@ -23,12 +23,12 @@ nightly = true
 falcon.server.url = http://apacheflexbuild.cloudapp.net:8080
 falcon.md5.server.url = http://apacheflexbuild.cloudapp.net:8080
 falcon.folder = job/flex-falcon/lastSuccessfulBuild/artifact/out
-falcon.version = 0.7.0
+falcon.version = 0.8.0
 # path to local build
 # falcon.server.url = file://Users/xxx/git/flex/master
 # falcon.md5.server.url = file://Users/xxx/git/flex/master
 # falcon.folder = flex-falcon/out
-# falcon.version = 0.7.0
+# falcon.version = 0.8.0
 #need this until Installer 3.2 comes out
 #jburg.server=http://downloads.sourceforge.net
 #jburg.folder=project/jburg


[10/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - - Added ImageView and ImageModel to the manifest so they are included in the build

Posted by ha...@apache.org.
- Added ImageView and ImageModel to the manifest so they are included in the build


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/c9b2a020
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/c9b2a020
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/c9b2a020

Branch: refs/heads/refactor-sprite
Commit: c9b2a020eca39694ed601a1ea8c22138d0281282
Parents: 3874781
Author: Christofer Dutz <ch...@codecentric.de>
Authored: Tue Sep 13 11:09:24 2016 +0200
Committer: Christofer Dutz <ch...@codecentric.de>
Committed: Tue Sep 13 11:09:24 2016 +0200

----------------------------------------------------------------------
 frameworks/projects/HTML/src/main/resources/basic-manifest.xml | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c9b2a020/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/resources/basic-manifest.xml b/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
index 604fdd7..ef80984 100644
--- a/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
@@ -44,10 +44,12 @@
     <component id="VContainer" class="org.apache.flex.html.VContainer"/>
     <component id="Panel" class="org.apache.flex.html.Panel"/>
     <component id="PanelView" class="org.apache.flex.html.beads.PanelView"/>
+    <component id="ImageView" class="org.apache.flex.html.beads.ImageView"/>
     <component id="PanelWithControlBar" class="org.apache.flex.html.PanelWithControlBar"/>
     <component id="ControlBar" class="org.apache.flex.html.ControlBar"/>
     <component id="RangeStepper" class="org.apache.flex.html.RangeStepper" />
     <component id="TitleBar" class="org.apache.flex.html.TitleBar"/>
+    <component id="ImageModel" class="org.apache.flex.html.beads.models.ImageModel"/>
     <component id="TitleBarModel" class="org.apache.flex.html.beads.models.TitleBarModel"/>
     <component id="ToolTip" class="org.apache.flex.html.ToolTip"/>
     <component id="Tree" class="org.apache.flex.html.Tree"/>


[26/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/flex-asjs into develop

Posted by ha...@apache.org.
Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/flex-asjs into develop


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/1026ec72
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/1026ec72
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/1026ec72

Branch: refs/heads/refactor-sprite
Commit: 1026ec722bca36fef55922ce5a614e54bb7f076e
Parents: 438cb01 7e42fff
Author: greg-dove <gr...@gmail.com>
Authored: Tue Sep 27 21:14:13 2016 +1300
Committer: greg-dove <gr...@gmail.com>
Committed: Tue Sep 27 21:14:13 2016 +1300

----------------------------------------------------------------------
 examples/build_example.xml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------



[11/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - add reminder to update JIRA

Posted by ha...@apache.org.
add reminder to update JIRA


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/773987e1
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/773987e1
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/773987e1

Branch: refs/heads/refactor-sprite
Commit: 773987e1e3987eff2081493bd680da05be8cbd9e
Parents: c9b2a02
Author: Alex Harui <ah...@apache.org>
Authored: Tue Sep 13 08:03:06 2016 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Wed Sep 14 14:19:59 2016 -0700

----------------------------------------------------------------------
 build.xml | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/773987e1/build.xml
----------------------------------------------------------------------
diff --git a/build.xml b/build.xml
index 997fb8d..f5ab8c5 100644
--- a/build.xml
+++ b/build.xml
@@ -972,6 +972,7 @@
             value="&lt;versionNumber&gt;${new-version}&lt;/versionNumber&gt;" >
             <include name="**/*-app.xml"/>
         </replace>
+        <echo>Don't forget to update JIRA to indicate current version is released and add new version</echo>
     </target>
     
 	<!--


[13/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Added missing event listeners.

Posted by ha...@apache.org.
Added missing event listeners.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/241d2020
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/241d2020
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/241d2020

Branch: refs/heads/refactor-sprite
Commit: 241d20201c6bf298879a2123c40328b5817b6c2b
Parents: 8226d2f
Author: Peter Ent <pe...@apache.org>
Authored: Thu Sep 15 10:39:34 2016 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Thu Sep 15 10:39:34 2016 -0400

----------------------------------------------------------------------
 .../apache/flex/html/beads/DataItemRendererFactoryForArrayData.as   | 1 +
 .../apache/flex/html/beads/TextItemRendererFactoryForArrayData.as   | 1 +
 2 files changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/241d2020/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as
index 49e6fcc..fdfd9b3 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as
@@ -83,6 +83,7 @@ package org.apache.flex.html.beads
 		{
 			_strand = value;
 			IEventDispatcher(value).addEventListener("beadsAdded",finishSetup);
+			IEventDispatcher(value).addEventListener("initComplete",finishSetup);
 		}
 		
 		private function finishSetup(event:Event):void

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/241d2020/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as
index 9eda39c..9ffd9fe 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as
@@ -76,6 +76,7 @@ package org.apache.flex.html.beads
 		{
 			_strand = value;
 			IEventDispatcher(value).addEventListener("beadsAdded",finishSetup);
+			IEventDispatcher(value).addEventListener("initComplete",finishSetup);
 		}
 		
 		private function finishSetup(event:Event):void


[04/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - test update from 0.6.0 to 0.7.0

Posted by ha...@apache.org.
test update from 0.6.0 to 0.7.0


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/909bd83e
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/909bd83e
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/909bd83e

Branch: refs/heads/refactor-sprite
Commit: 909bd83e98947b6c120a133aa621a1d1545ab7bf
Parents: 37941c5
Author: Alex Harui <ah...@apache.org>
Authored: Fri Sep 9 13:00:39 2016 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Sep 9 13:00:39 2016 -0700

----------------------------------------------------------------------
 .../flexjs/CordovaCameraExample/CordovaCameraExample-app.xml     | 2 +-
 examples/flexjs/DesktopMap/DesktopMap-app.xml                    | 2 +-
 examples/flexjs/MapSearch/MapSearch-app.xml                      | 2 +-
 examples/flexjs/StorageExample/StorageExample-app.xml            | 2 +-
 installer.xml                                                    | 4 ++--
 5 files changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/909bd83e/examples/flexjs/CordovaCameraExample/CordovaCameraExample-app.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/CordovaCameraExample/CordovaCameraExample-app.xml b/examples/flexjs/CordovaCameraExample/CordovaCameraExample-app.xml
index 1bcc5c3..1531f02 100644
--- a/examples/flexjs/CordovaCameraExample/CordovaCameraExample-app.xml
+++ b/examples/flexjs/CordovaCameraExample/CordovaCameraExample-app.xml
@@ -45,7 +45,7 @@
 	<!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade.
 	Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
 	An updated version of application must have a versionNumber value higher than the previous version. Required for namespace >= 2.5 . -->
-	<versionNumber>0.6.0</versionNumber>
+	<versionNumber>0.7.0</versionNumber>
 
 	<!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. Optional. -->
 	<!-- <versionLabel></versionLabel> -->

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/909bd83e/examples/flexjs/DesktopMap/DesktopMap-app.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/DesktopMap/DesktopMap-app.xml b/examples/flexjs/DesktopMap/DesktopMap-app.xml
index 7bca53d..7e5b561 100644
--- a/examples/flexjs/DesktopMap/DesktopMap-app.xml
+++ b/examples/flexjs/DesktopMap/DesktopMap-app.xml
@@ -45,7 +45,7 @@
 	<!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade.
 	Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
 	An updated version of application must have a versionNumber value higher than the previous version. Required for namespace >= 2.5 . -->
-	<versionNumber>0.6.0</versionNumber>
+	<versionNumber>0.7.0</versionNumber>
 
 	<!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. Optional. -->
 	<!-- <versionLabel></versionLabel> -->

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/909bd83e/examples/flexjs/MapSearch/MapSearch-app.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MapSearch/MapSearch-app.xml b/examples/flexjs/MapSearch/MapSearch-app.xml
index dd8488b..0655646 100644
--- a/examples/flexjs/MapSearch/MapSearch-app.xml
+++ b/examples/flexjs/MapSearch/MapSearch-app.xml
@@ -45,7 +45,7 @@
 	<!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade.
 	Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
 	An updated version of application must have a versionNumber value higher than the previous version. Required for namespace >= 2.5 . -->
-	<versionNumber>0.6.0</versionNumber>
+	<versionNumber>0.7.0</versionNumber>
 
 	<!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. Optional. -->
 	<!-- <versionLabel></versionLabel> -->

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/909bd83e/examples/flexjs/StorageExample/StorageExample-app.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/StorageExample/StorageExample-app.xml b/examples/flexjs/StorageExample/StorageExample-app.xml
index 92e3d53..6f072a6 100644
--- a/examples/flexjs/StorageExample/StorageExample-app.xml
+++ b/examples/flexjs/StorageExample/StorageExample-app.xml
@@ -45,7 +45,7 @@
 	<!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade.
 	Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
 	An updated version of application must have a versionNumber value higher than the previous version. Required for namespace >= 2.5 . -->
-	<versionNumber>0.6.0</versionNumber>
+	<versionNumber>0.7.0</versionNumber>
 
 	<!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. Optional. -->
 	<!-- <versionLabel></versionLabel> -->

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/909bd83e/installer.xml
----------------------------------------------------------------------
diff --git a/installer.xml b/installer.xml
index 74a04e7..0d51dcc 100644
--- a/installer.xml
+++ b/installer.xml
@@ -57,8 +57,8 @@
     
     <property name="air.sdk.version" value="14.0"/>
     <property name="flash.sdk.version" value="14.0"/>
-    <property name="flexjs.version" value="0.6.0"/>
-    <property name="falcon.version" value="0.6.0"/>
+    <property name="flexjs.version" value="0.7.0"/>
+    <property name="falcon.version" value="0.7.0"/>
 
     <property name="swfobject.url.server" value="https://github.com" />
     <property name="swfobject.url.folder" value="swfobject/swfobject/archive" />


[19/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - New MobileStocks app. A work in progress so it is not connected to the examples build yet.

Posted by ha...@apache.org.
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/views/LaunchView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/views/LaunchView.mxml b/examples/flexjs/MobileStocks/src/views/LaunchView.mxml
new file mode 100644
index 0000000..5d14065
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/views/LaunchView.mxml
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+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.
+
+-->
+<js:TitleView xmlns:fx="http://ns.adobe.com/mxml/2009"
+			title="Assets"
+			xmlns:js="library://ns.apache.org/flexjs/basic"
+			xmlns:models="models.*"
+			xmlns:local="*"
+			className="AssetsView" xmlns:views="views.*">
+	<fx:Script>
+		<![CDATA[
+			import controller.LaunchViewController;
+			import models.ProductsModel;
+			import models.Stock;
+			
+			import org.apache.flex.binding.SimpleBinding;
+			import org.apache.flex.core.IBeadController;
+			import org.apache.flex.core.IBeadModel;
+			import org.apache.flex.events.Event;
+			import org.apache.flex.events.ValueChangeEvent;
+			import org.apache.flex.mobile.IViewManager;
+			import org.apache.flex.mobile.StackedViewManager;
+			import org.apache.flex.html.beads.DataProviderChangeNotifier;
+						
+			public function set dataModel(value:IBeadModel):void
+			{
+				var cm:IBeadController = controller;
+				(cm as LaunchViewController).model = value;
+				
+				var newEvent:ValueChangeEvent = new ValueChangeEvent("valueChange", false, false, null, value);
+				newEvent.propertyName = "dataModel";
+				dispatchEvent(newEvent);
+			}
+			
+			public function get dataModel():IBeadModel
+			{
+				var cm:IBeadController = controller;
+				return (cm as LaunchViewController).model;
+			}
+			
+			public function addSymbol():void
+			{
+				dispatchEvent(new org.apache.flex.events.Event("addSymbol"));
+			}
+			
+			public function removeSymbol():void
+			{
+				dispatchEvent(new org.apache.flex.events.Event("removeSymbol"));
+			}
+			
+			public function gridSelected():void
+			{
+				dispatchEvent(new org.apache.flex.events.Event("symbolSelected"));
+			}
+		]]>
+	</fx:Script>
+	
+	<fx:Style>
+		@namespace js "library://ns.apache.org/flexjs/basic";
+		.AllCharts {
+			border-width: 0px;
+			padding-left: 2px;
+			padding-top: 10px;
+			padding-bottom: 2px;
+			padding-right: 10px;
+		}
+	</fx:Style>
+	
+	<fx:Metadata>
+		[Event("next")]
+	</fx:Metadata>
+	
+	<js:beads>
+		<js:VerticalLayout />
+	</js:beads>
+	
+	<js:model>
+		<models:AssetsModel />
+	</js:model>
+
+	<js:HContainer height="10%">
+		<js:Label text="Symbol:" />
+		<js:TextInput id="symbolInput" width="50" />
+		<js:Spacer width="10" />
+		<js:Label text="Shares:" />
+		<js:TextInput id="sharesInput" width="50" />
+		<js:Spacer width="10" />
+		<js:TextButton id="addButton" text="Add" width="80" click="addSymbol()" />
+		<js:Spacer width="30" />
+		<js:TextButton id="removeButton" text="Remove" width="80" click="removeSymbol()" />
+	</js:HContainer>
+	
+	<js:DataGrid id="assetGrid" height="45%" width="510" rowHeight="25" change="gridSelected()">
+		<js:beads>
+			<js:SimpleBinding
+				eventName="update"
+				sourceID="dataModel"
+				sourcePropertyName="assetList"
+				destinationPropertyName="dataProvider" />
+			<js:DataProviderChangeNotifier sourceID="dataModel" propertyName="assetList" 
+										   destinationPropertyName="dataProvider" changeEventName="dataProviderChanged" />
+		</js:beads>
+		<js:columns>
+			<js:DataGridColumn columnWidth="250" label="Company (SYMB)" dataField="name" itemRenderer="renderers.CompanyNameRenderer" />
+			<js:DataGridColumn columnWidth="80" label="Shares" dataField="shares" />
+			<js:DataGridColumn columnWidth="80" label="Last" dataField="last" />
+			<js:DataGridColumn columnWidth="100" label="Total $" dataField="shares" itemRenderer="renderers.SharesTotalRenderer" />
+		</js:columns>
+	</js:DataGrid>
+	
+	<js:Spacer height="3%" />
+		
+	<js:StackedBarChart id="barChart" width="510" height="40%" className="AllCharts">
+		<js:model>
+			<js:ChartArrayListSelectionModel />
+		</js:model>
+		<js:beads>
+			<js:DataItemRendererFactoryForSeriesArrayListData />
+			<js:StackedBarChartLayoutForArrayList />
+			<js:SimpleBinding
+				eventName="update"
+				sourceID="dataModel"
+				sourcePropertyName="assetList"
+				destinationPropertyName="dataProvider" />
+			<js:DataProviderChangeNotifier sourceID="dataModel" propertyName="assetList" 
+										   destinationPropertyName="dataProvider" changeEventName="dataProviderChanged" />
+			<js:HorizontalLinearAxisForArrayListBead valueField="total" />
+			<js:VerticalCategoryAxisForArrayListBead categoryField="symbol" />
+		</js:beads>
+		<js:series>
+			<js:BarSeries xField="total"> 
+				<js:itemRenderer>
+					<fx:Component>
+						<js:BoxItemRenderer>
+							<js:fill>
+								<js:SolidColor color="#FF964D" alpha="1.0" />
+							</js:fill>
+						</js:BoxItemRenderer>                      
+					</fx:Component>
+				</js:itemRenderer>
+			</js:BarSeries>
+		</js:series>
+	</js:StackedBarChart>
+
+</js:TitleView>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/views/SearchView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/views/SearchView.mxml b/examples/flexjs/MobileStocks/src/views/SearchView.mxml
new file mode 100755
index 0000000..0348fba
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/views/SearchView.mxml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+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.
+
+-->
+<js:TitleView xmlns:fx="http://ns.adobe.com/mxml/2009"
+					   xmlns:js="library://ns.apache.org/flexjs/basic"
+					   xmlns:apache="org.apache.flex.html.beads.*"
+					   xmlns:local="*"
+					   className="StockView">
+	
+	<fx:Script>
+		<![CDATA[			
+			import org.apache.flex.mobile.StackedViewManager;
+			private function onBackClick() : void
+			{
+				(viewManager as StackedViewManager).pop();
+			}
+		]]>
+	</fx:Script>
+		
+	<js:Label text="Search View" x="20" y="100" />
+</js:TitleView>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/views/StockView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/views/StockView.mxml b/examples/flexjs/MobileStocks/src/views/StockView.mxml
new file mode 100755
index 0000000..ca86ba7
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/views/StockView.mxml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+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.
+
+-->
+<js:TitleView xmlns:fx="http://ns.adobe.com/mxml/2009"
+					   xmlns:js="library://ns.apache.org/flexjs/basic"
+					   xmlns:apache="org.apache.flex.html.beads.*"
+					   xmlns:local="*"
+					   className="StockView">
+	
+	<fx:Script>
+		<![CDATA[			
+			import models.Stock;
+			
+			import org.apache.flex.events.Event;
+			import org.apache.flex.mobile.StackedViewManager;
+			
+			private var _stock:Stock;
+			
+			[Bindable("stockChanged")]
+			public function get stock():Stock
+			{
+				return _stock;
+			}
+			public function set stock(value:Stock):void
+			{
+				_stock = value;
+				dispatchEvent(new org.apache.flex.events.Event("stockChanged"));
+			}
+			
+			private function onBackClick() : void
+			{
+				(viewManager as StackedViewManager).pop();
+			}
+			
+			override public function addedToParent():void
+			{
+				super.addedToParent();
+				
+				stockSymbol.text = stock.symbol;
+				stockName.text = stock.name;
+				lastPrice.text = String(stock.last);
+				openPrice.text = String(stock.open);
+				lowPrice.text = String(stock.low);
+				highPrice.text = String(stock.high);
+				changeAmount.text = String(stock.change);
+			}
+			
+			private function removeFromList():void
+			{
+				dispatchEvent(new org.apache.flex.events.Event("removeFromList"));
+			}
+		]]>
+	</fx:Script>
+	
+	<js:Container>
+		<js:beads>
+			<js:VerticalLayout />
+		</js:beads>
+		<js:style>
+			<js:SimpleCSSStyles top="10px" left="10px" />
+		</js:style>
+		
+		<js:Label id="stockSymbol" text="{stock.symbol}" className="ViewTitle" />
+		<js:Label id="stockName" text="{stock.name}" className="StockName" />
+		
+		<js:Spacer height="10" />
+		
+		<js:Container className="StockDetailArea">
+			<js:beads>
+				<js:VerticalColumnLayout numColumns="2" />
+			</js:beads>
+			
+			<js:Label text="Last Price:" className="StockLabel" /> <js:Label id="lastPrice" className="StockValue" />
+			<js:Label text="Open Price:" className="StockLabel" /> <js:Label id="openPrice" className="StockValue" />
+			<js:Label text="Low  Price:" className="StockLabel" /> <js:Label id="lowPrice" className="StockValue" />
+			<js:Label text="High Price:" className="StockLabel" /> <js:Label id="highPrice" className="StockValue" />
+			<js:Label text="Change:    " className="StockLabel" /> <js:Label id="changeAmount" className="StockValue" />
+		</js:Container>
+		
+		<js:Spacer height="10" />
+		
+		<js:Container className="StockDetailArea">
+			<js:TextButton text="Remove From List" width="200" className="StockRemoveButton" click="removeFromList()" />
+		</js:Container>
+	</js:Container>
+</js:TitleView>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/views/WatchListView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/views/WatchListView.mxml b/examples/flexjs/MobileStocks/src/views/WatchListView.mxml
new file mode 100755
index 0000000..f4dcd94
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/views/WatchListView.mxml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+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.
+
+-->
+<js:TitleView xmlns:fx="http://ns.adobe.com/mxml/2009"
+		 title="Watch List"
+		 xmlns:js="library://ns.apache.org/flexjs/basic"
+		 xmlns:controller="controller.*"
+		 xmlns:local="*"
+		 className="WatchListView"
+		 xmlns:renderers="renderers.*">
+	
+	<fx:Script>
+		<![CDATA[						
+			import controller.WatchListController;
+			
+			import models.ProductsModel;
+			import models.Stock;
+			
+			import org.apache.flex.binding.SimpleBinding;
+			import org.apache.flex.core.IBeadController;
+			import org.apache.flex.core.IBeadModel;
+			import org.apache.flex.events.Event;
+			import org.apache.flex.mobile.IViewManager;
+			import org.apache.flex.mobile.StackedViewManager;
+			
+			public function set dataModel(value:IBeadModel):void
+			{
+				var cm:IBeadController = controller;
+				(cm as WatchListController).model = value;
+				
+				var newEvent:ValueChangeEvent = new ValueChangeEvent("valueChange", false, false, null, value);
+				newEvent.propertyName = "dataModel";
+				dispatchEvent(newEvent);
+			}
+			public function get dataModel():IBeadModel
+			{
+				var cm:IBeadController = controller;
+				return (cm as WatchListController).model;
+			}
+			
+			private function onSelectStock():void
+			{
+				var stockView:StockView = new StockView();
+				var svm:IViewManager = viewManager;
+				(viewManager as StackedViewManager).push(stockView);
+			}
+			
+			private function addSymbol():void
+			{
+				dispatchEvent(new org.apache.flex.events.Event("addSymbol"));
+			}
+			
+			public var selectedStockIndex:Number;
+			
+			private function selectRow():void
+			{
+				selectedStockIndex = dataGrid.selectedIndex;
+				dispatchEvent(new org.apache.flex.events.Event("stockSelected"));
+			}
+			
+			public function showStockDetails(stock:Stock):StockView
+			{
+				var stockView:StockView = new StockView();
+				stockView.stock = stock;
+				var vm:* = viewManager;
+				(viewManager as StackedViewManager).push(stockView);
+				
+				var cm:IBeadController = controller;
+				
+				return stockView;
+			}
+			
+			public function popView():void
+			{
+				(viewManager as StackedViewManager).pop();
+			}
+		]]>
+	</fx:Script>
+	
+	<js:beads>
+		<js:VerticalLayout />
+	</js:beads>
+	
+	<js:HContainer className="WatchListInputArea" width="100%" height="10%">
+		<js:Label text="Symbol:" />
+		<js:TextInput id="symbolName" />
+		<js:TextButton text="Add" click="addSymbol()" />
+	</js:HContainer>
+	
+	<js:Spacer height="10" />
+		
+	<js:DataGrid id="dataGrid" width="100%" height="85%" change="selectRow()" className="WatchListDataGrid">
+		<js:beads>
+			<js:SimpleBinding
+				eventName="update"
+				sourceID="dataModel"
+				sourcePropertyName="watchList"
+				destinationPropertyName="dataProvider" />
+			<js:DataProviderChangeNotifier sourceID="dataModel" propertyName="watchList" 
+										   destinationPropertyName="dataProvider" changeEventName="dataProviderChanged" />
+		</js:beads>
+		<js:columns>
+			<js:DataGridColumn label="Company (SYMB)" dataField="symbol" 
+			                   itemRenderer="renderers.CompanyNameRenderer" />
+			<js:DataGridColumn label="Open" dataField="open"
+			                   itemRenderer="renderers.StockRenderer" />
+			<js:DataGridColumn label="Last" dataField="last" >
+				<js:itemRenderer>
+					<fx:Component>
+						<renderers:StockRenderer />
+					</fx:Component>
+				</js:itemRenderer>
+			</js:DataGridColumn>
+			<js:DataGridColumn label="Change" dataField="change">
+				<js:itemRenderer>
+					<fx:Component>
+						<renderers:StockRenderer />
+					</fx:Component>
+				</js:itemRenderer>
+			</js:DataGridColumn>
+			<js:DataGridColumn label="High" dataField="high" >
+				<js:itemRenderer>
+					<fx:Component>
+						<renderers:StockRenderer />
+					</fx:Component>
+				</js:itemRenderer>
+			</js:DataGridColumn>
+			<js:DataGridColumn label="Low" dataField="low" >
+				<js:itemRenderer>
+					<fx:Component>
+						<renderers:StockRenderer />
+					</fx:Component>
+				</js:itemRenderer>
+			</js:DataGridColumn>
+		</js:columns>
+	</js:DataGrid>
+	
+</js:TitleView>


[18/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Merge branch 'SuperMobileTrader' into develop

Posted by ha...@apache.org.
Merge branch 'SuperMobileTrader' into develop

* SuperMobileTrader:
  Fix for StackedViewManager in Mobile project.
  Updated DataProviderChangeNotifier to listen for replacement of the dataProvider itself.
  Added ArrayList parallels for Chart classes.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/1dac6154
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/1dac6154
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/1dac6154

Branch: refs/heads/refactor-sprite
Commit: 1dac6154834ad8b7be877a889e16a279ed86fcb8
Parents: 5d52dc6 b0f8b6d
Author: Peter Ent <pe...@apache.org>
Authored: Thu Sep 22 17:08:13 2016 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Thu Sep 22 17:08:13 2016 -0400

----------------------------------------------------------------------
 frameworks/projects/Charts/pom.xml              |  13 ++
 .../src/main/config/compile-as-config.xml       |   1 +
 .../Charts/src/main/flex/ChartsClasses.as       |  11 ++
 ...ItemRendererFactoryForSeriesArrayListData.as | 139 ++++++++++++++++++
 .../charts/beads/HorizontalCategoryAxisBead.as  |   2 +-
 .../HorizontalCategoryAxisForArrayListBead.as   |  85 +++++++++++
 .../charts/beads/HorizontalLinearAxisBead.as    |   4 +-
 .../HorizontalLinearAxisForArrayListBead.as     | 121 ++++++++++++++++
 .../charts/beads/VerticalCategoryAxisBead.as    |   2 +-
 .../VerticalCategoryAxisForArrayListBead.as     |  98 +++++++++++++
 .../flex/charts/beads/VerticalLinearAxisBead.as |   4 +-
 .../beads/VerticalLinearAxisForArrayListBead.as | 119 +++++++++++++++
 .../beads/layouts/BarChartLayoutForArrayList.as | 129 +++++++++++++++++
 .../layouts/ColumnChartLayoutForArrayList.as    | 129 +++++++++++++++++
 .../beads/layouts/PieChartLayoutForArrayList.as | 142 ++++++++++++++++++
 .../StackedBarChartLayoutForArrayList.as        | 145 +++++++++++++++++++
 .../StackedColumnChartLayoutForArrayList.as     | 142 ++++++++++++++++++
 .../models/ChartArrayListSelectionModel.as      |  75 ++++++++++
 .../src/main/resources/basic-manifest.xml       |  21 +++
 .../html/beads/DataProviderChangeNotifier.as    |  42 +++++-
 .../apache/flex/mobile/StackedViewManager.as    |  15 +-
 21 files changed, 1430 insertions(+), 9 deletions(-)
----------------------------------------------------------------------



[22/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Examples' compileair target was not copying image assets correctly to the bin-debug output directory.

Posted by ha...@apache.org.
Examples' compileair target was not copying image assets correctly to the bin-debug output directory.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/7e42fff6
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/7e42fff6
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/7e42fff6

Branch: refs/heads/refactor-sprite
Commit: 7e42fff64fc53b511904155a1dc9b6134f8d77e2
Parents: fd05c96
Author: Peter Ent <pe...@apache.org>
Authored: Mon Sep 26 10:32:12 2016 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Mon Sep 26 10:32:12 2016 -0400

----------------------------------------------------------------------
 examples/build_example.xml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/7e42fff6/examples/build_example.xml
----------------------------------------------------------------------
diff --git a/examples/build_example.xml b/examples/build_example.xml
index 4f30c8e..756b06c 100644
--- a/examples/build_example.xml
+++ b/examples/build_example.xml
@@ -178,7 +178,8 @@
         
         <copy todir="${basedir}/bin-debug">
             <fileset dir="${basedir}/src">
-                <include name="*.png" />
+                <include name="**/*.png" />
+                <include name="**/*.jpg" />
             </fileset>
         </copy>
         <copy todir="${basedir}/bin-debug">


[15/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Added ArrayList parallels for Chart classes.

Posted by ha...@apache.org.
Added ArrayList parallels for Chart classes.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/f9c4a01d
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/f9c4a01d
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/f9c4a01d

Branch: refs/heads/refactor-sprite
Commit: f9c4a01d99b0ab4dd338a3f95c8d0aad19468cef
Parents: 241d202
Author: Peter Ent <pe...@apache.org>
Authored: Mon Sep 19 15:37:41 2016 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Mon Sep 19 15:37:41 2016 -0400

----------------------------------------------------------------------
 frameworks/projects/Charts/pom.xml              |  13 ++
 .../src/main/config/compile-as-config.xml       |   1 +
 .../Charts/src/main/flex/ChartsClasses.as       |  11 ++
 ...ItemRendererFactoryForSeriesArrayListData.as | 139 ++++++++++++++++++
 .../charts/beads/HorizontalCategoryAxisBead.as  |   2 +-
 .../HorizontalCategoryAxisForArrayListBead.as   |  85 +++++++++++
 .../charts/beads/HorizontalLinearAxisBead.as    |   4 +-
 .../HorizontalLinearAxisForArrayListBead.as     | 121 ++++++++++++++++
 .../charts/beads/VerticalCategoryAxisBead.as    |   2 +-
 .../VerticalCategoryAxisForArrayListBead.as     |  98 +++++++++++++
 .../flex/charts/beads/VerticalLinearAxisBead.as |   4 +-
 .../beads/VerticalLinearAxisForArrayListBead.as | 119 +++++++++++++++
 .../beads/layouts/BarChartLayoutForArrayList.as | 129 +++++++++++++++++
 .../layouts/ColumnChartLayoutForArrayList.as    | 129 +++++++++++++++++
 .../beads/layouts/PieChartLayoutForArrayList.as | 142 ++++++++++++++++++
 .../StackedBarChartLayoutForArrayList.as        | 145 +++++++++++++++++++
 .../StackedColumnChartLayoutForArrayList.as     | 142 ++++++++++++++++++
 .../models/ChartArrayListSelectionModel.as      |  75 ++++++++++
 .../src/main/resources/basic-manifest.xml       |  21 +++
 19 files changed, 1376 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/pom.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/pom.xml b/frameworks/projects/Charts/pom.xml
index 9eefdf8..394fcfe 100644
--- a/frameworks/projects/Charts/pom.xml
+++ b/frameworks/projects/Charts/pom.xml
@@ -81,6 +81,19 @@
     </dependency>
     <dependency>
       <groupId>org.apache.flex.flexjs.framework</groupId>
+      <artifactId>Collections</artifactId>
+      <version>0.8.0-SNAPSHOT</version>
+      <type>swc</type>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.flex.flexjs.framework</groupId>
+      <artifactId>Collections</artifactId>
+      <version>0.8.0-SNAPSHOT</version>
+      <type>swc</type>
+      <classifier>typedefs</classifier>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.flex.flexjs.framework</groupId>
       <artifactId>Binding</artifactId>
       <version>0.8.0-SNAPSHOT</version>
       <type>swc</type>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/config/compile-as-config.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/config/compile-as-config.xml b/frameworks/projects/Charts/src/main/config/compile-as-config.xml
index 1fc9bce..728b5ca 100644
--- a/frameworks/projects/Charts/src/main/config/compile-as-config.xml
+++ b/frameworks/projects/Charts/src/main/config/compile-as-config.xml
@@ -24,6 +24,7 @@
         <external-library-path>
             <path-element>${env.AIR_HOME}/frameworks/libs/air/airglobal.swc</path-element>
             <path-element>../../../../../libs/Core.swc</path-element>
+            <path-element>../../../../../libs/Collections.swc</path-element>
             <path-element>../../../../../libs/Graphics.swc</path-element>
             <path-element>../../../../../libs/HTML.swc</path-element>
         </external-library-path>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/ChartsClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/ChartsClasses.as b/frameworks/projects/Charts/src/main/flex/ChartsClasses.as
index 97b998e..79de855 100644
--- a/frameworks/projects/Charts/src/main/flex/ChartsClasses.as
+++ b/frameworks/projects/Charts/src/main/flex/ChartsClasses.as
@@ -47,20 +47,31 @@ internal class ChartsClasses
 	import org.apache.flex.charts.beads.ChartView; ChartView;
 	import org.apache.flex.charts.beads.ChartItemRendererFactory; ChartItemRendererFactory;
 	import org.apache.flex.charts.beads.DataItemRendererFactoryForSeriesData; DataItemRendererFactoryForSeriesData;
+	import org.apache.flex.charts.beads.DataItemRendererFactoryForSeriesArrayListData; DataItemRendererFactoryForSeriesArrayListData;
 	import org.apache.flex.charts.beads.DataTipBead; DataTipBead;
 	import org.apache.flex.charts.beads.HorizontalCategoryAxisBead; HorizontalCategoryAxisBead;
+	import org.apache.flex.charts.beads.HorizontalCategoryAxisForArrayListBead; HorizontalCategoryAxisForArrayListBead;
 	import org.apache.flex.charts.beads.HorizontalLinearAxisBead; HorizontalLinearAxisBead;
+	import org.apache.flex.charts.beads.HorizontalLinearAxisForArrayListBead; HorizontalLinearAxisForArrayListBead;
 	import org.apache.flex.charts.beads.VerticalCategoryAxisBead; VerticalCategoryAxisBead;
+	import org.apache.flex.charts.beads.VerticalCategoryAxisForArrayListBead; VerticalCategoryAxisForArrayListBead;
 	import org.apache.flex.charts.beads.VerticalLinearAxisBead; VerticalLinearAxisBead;
+	import org.apache.flex.charts.beads.VerticalLinearAxisForArrayListBead; VerticalLinearAxisForArrayListBead;
 	import org.apache.flex.charts.beads.controllers.ChartSeriesMouseController; ChartSeriesMouseController;
 	import org.apache.flex.charts.beads.layouts.BarChartLayout; BarChartLayout;
+	import org.apache.flex.charts.beads.layouts.BarChartLayoutForArrayList; BarChartLayoutForArrayList;
 	import org.apache.flex.charts.beads.layouts.ColumnChartLayout; ColumnChartLayout;
+	import org.apache.flex.charts.beads.layouts.ColumnChartLayoutForArrayList; ColumnChartLayoutForArrayList;
 	import org.apache.flex.charts.beads.layouts.LineChartCategoryVsLinearLayout; LineChartCategoryVsLinearLayout;
 	import org.apache.flex.charts.beads.layouts.LineChartLinearVsLinearLayout; LineChartLinearVsLinearLayout;
 	import org.apache.flex.charts.beads.layouts.PieChartLayout; PieChartLayout;
+	import org.apache.flex.charts.beads.layouts.PieChartLayoutForArrayList; PieChartLayoutForArrayList;
 	import org.apache.flex.charts.beads.layouts.StackedBarChartLayout; StackedBarChartLayout;
+	import org.apache.flex.charts.beads.layouts.StackedBarChartLayoutForArrayList; StackedBarChartLayoutForArrayList;
 	import org.apache.flex.charts.beads.layouts.StackedColumnChartLayout; StackedColumnChartLayout;
+	import org.apache.flex.charts.beads.layouts.StackedColumnChartLayoutForArrayList; StackedColumnChartLayoutForArrayList;
 	import org.apache.flex.charts.beads.models.ChartArraySelectionModel; ChartArraySelectionModel;
+	import org.apache.flex.charts.beads.models.ChartArrayListSelectionModel; ChartArrayListSelectionModel;
 	import org.apache.flex.charts.supportClasses.BarSeries; BarSeries;
 	import org.apache.flex.charts.supportClasses.LineSeries; LineSeries;
 	import org.apache.flex.charts.supportClasses.PieSeries; PieSeries;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/DataItemRendererFactoryForSeriesArrayListData.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/DataItemRendererFactoryForSeriesArrayListData.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/DataItemRendererFactoryForSeriesArrayListData.as
new file mode 100644
index 0000000..7010627
--- /dev/null
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/DataItemRendererFactoryForSeriesArrayListData.as
@@ -0,0 +1,139 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.charts.beads
+{
+	import org.apache.flex.charts.core.IChart;
+	import org.apache.flex.charts.core.IChartDataGroup;
+	import org.apache.flex.charts.core.IChartItemRenderer;
+	import org.apache.flex.charts.core.IChartSeries;
+	import org.apache.flex.collections.ArrayList;
+	import org.apache.flex.core.IBead;
+	import org.apache.flex.core.IDataProviderItemRendererMapper;
+	import org.apache.flex.core.IItemRendererClassFactory;
+	import org.apache.flex.core.ISelectionModel;
+	import org.apache.flex.core.IStrand;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.IEventDispatcher;
+	import org.apache.flex.html.beads.IListView;
+	
+	/**
+	 *  The DataItemRendererFactoryForSeriesData creates the itemRenderers necessary for series-based
+	 *  charts. 
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
+	public class DataItemRendererFactoryForSeriesArrayListData implements IBead, IDataProviderItemRendererMapper
+	{
+		/**
+		 *  constructor.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		public function DataItemRendererFactoryForSeriesArrayListData()
+		{
+		}
+		
+		private var _strand:IStrand;
+		
+		/**
+		 *  @copy org.apache.flex.core.IBead#strand
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		public function set strand(value:IStrand):void
+		{
+			_strand = value;
+			IEventDispatcher(_strand).addEventListener("initComplete", initComplete);
+		}
+		public function get strand():IStrand
+		{
+			return _strand;
+		}
+		
+		private function initComplete(event:Event):void
+		{
+			var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+			selectionModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
+			
+			dataProviderChangeHandler(null);
+		}
+		
+		/**
+		 * For series data, the 'global' itemRendererFactory is not used. Each series supplies
+		 * its own itemRendererFactory.
+		 */
+		public function get itemRendererFactory():IItemRendererClassFactory
+		{
+			return null;
+		}
+		public function set itemRendererFactory(value:IItemRendererClassFactory):void
+		{
+		}
+		
+		/**
+		 * @private
+		 */
+		private function dataProviderChangeHandler(event:Event):void
+		{
+			var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+			var dp:ArrayList = selectionModel.dataProvider as ArrayList;
+			if (!dp)
+				return;
+			
+			var listView:IListView = _strand.getBeadByType(IListView) as IListView;
+			var dataGroup:IChartDataGroup = listView.dataGroup as IChartDataGroup;
+			dataGroup.removeAllElements();
+			
+			var chart:IChart = _strand as IChart;
+			var series:Array = chart.series;
+						
+			for (var s:int=0; s < series.length; s++)
+			{				
+				var n:int = dp.length; 
+				var chartSeries:IChartSeries = series[s] as IChartSeries;
+				
+				for (var i:int = 0; i < n; i++)
+				{
+					if (chartSeries.itemRenderer)
+					{
+						var ir:IChartItemRenderer = chartSeries.itemRenderer.newInstance() as IChartItemRenderer;
+						dataGroup.addElement(ir);
+						ir.itemRendererParent = dataGroup;
+						ir.index = i;
+						ir.data = dp.getItemAt(i)
+						ir.series = chartSeries;
+					}
+				}
+				
+			}
+			
+			IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated"));
+			IEventDispatcher(_strand).dispatchEvent(new Event("layoutNeeded"));
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalCategoryAxisBead.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalCategoryAxisBead.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalCategoryAxisBead.as
index 9efbd72..171a848 100644
--- a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalCategoryAxisBead.as
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalCategoryAxisBead.as
@@ -157,7 +157,7 @@ package org.apache.flex.charts.beads
 		/**
 		 * @private
 		 */
-		private function handleItemsCreated(event:Event):void
+		protected function handleItemsCreated(event:Event):void
 		{
 			var model:ArraySelectionModel = strand.getBeadByType(ISelectionModel) as ArraySelectionModel;
 			var items:Array;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalCategoryAxisForArrayListBead.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalCategoryAxisForArrayListBead.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalCategoryAxisForArrayListBead.as
new file mode 100644
index 0000000..e93add0
--- /dev/null
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalCategoryAxisForArrayListBead.as
@@ -0,0 +1,85 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.charts.beads
+{
+	import org.apache.flex.collections.ArrayList;
+	import org.apache.flex.charts.core.IHorizontalAxisBead;
+	import org.apache.flex.core.IBead;
+	import org.apache.flex.core.ISelectionModel;
+	import org.apache.flex.core.IStrand;
+	import org.apache.flex.core.UIBase;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.IEventDispatcher;
+	import org.apache.flex.html.beads.models.ArrayListSelectionModel;
+	
+	/**
+	 *  The HorizontalCategoryAxisForArrayListBead displays a horizontal axis with
+	 *  tick marks corresponding to data points identified by the
+	 *  categoryField property. This type of axis is useful for non-numeric
+	 *  plots. 
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
+	public class HorizontalCategoryAxisForArrayListBead extends HorizontalCategoryAxisBead
+	{
+		public function HorizontalCategoryAxisForArrayListBead()
+		{
+			super();
+		}
+		
+		/**
+		 * @private
+		 */
+		override protected function handleItemsCreated(event:Event):void
+		{
+			var model:ArrayListSelectionModel = strand.getBeadByType(ISelectionModel) as ArrayListSelectionModel;
+			var items:ArrayList;
+			if (model.dataProvider is ArrayList) items = model.dataProvider as ArrayList;
+			else return;
+			
+			clearGraphics();
+			
+			var xpos:Number = 0;
+			var useWidth:Number = UIBase(axisGroup).width;
+			
+			// place the labels below the axis enough to account for the tick marks
+			var labelY:Number = 7;
+			var itemWidth:Number = (useWidth - gap*(items.length-1))/items.length;
+			
+			for(var i:int=0; i < items.length; i++) 
+			{				
+				var item:Object = items.getItemAt(i);
+				addTickLabel(item[categoryField], xpos, labelY, itemWidth, 0);
+				
+				// add a tick mark, too		
+				addTickMark(xpos + itemWidth/2, 0, 0, 5);
+				
+				xpos += itemWidth + gap;
+			}
+			
+			// draw the axis and the tick marks
+			drawAxisPath(0, 0, useWidth, 1);
+			drawTickPath(0, 1);
+		}
+		
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalLinearAxisBead.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalLinearAxisBead.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalLinearAxisBead.as
index 6e24b2c..f375927 100644
--- a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalLinearAxisBead.as
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalLinearAxisBead.as
@@ -160,7 +160,7 @@ package org.apache.flex.charts.beads
 		/**
 		 * @private
 		 */
-		private function formatLabel(n:Number):String
+		protected function formatLabel(n:Number):String
 		{
 			var sign:Number = n < 0 ? -1 : 1;
 			n = Math.abs(n);
@@ -183,7 +183,7 @@ package org.apache.flex.charts.beads
 		/**
 		 * @private
 		 */
-		private function handleItemsCreated(event:Event):void
+		protected function handleItemsCreated(event:Event):void
 		{	
 			var model:ArraySelectionModel = strand.getBeadByType(ISelectionModel) as ArraySelectionModel;
 			var items:Array;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalLinearAxisForArrayListBead.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalLinearAxisForArrayListBead.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalLinearAxisForArrayListBead.as
new file mode 100644
index 0000000..4ade000
--- /dev/null
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/HorizontalLinearAxisForArrayListBead.as
@@ -0,0 +1,121 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.charts.beads
+{
+	import org.apache.flex.collections.ArrayList;
+	import org.apache.flex.charts.core.IChart;
+	import org.apache.flex.charts.core.IHorizontalAxisBead;
+	import org.apache.flex.core.IBead;
+	import org.apache.flex.core.ISelectionModel;
+	import org.apache.flex.core.IStrand;
+	import org.apache.flex.core.UIBase;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.IEventDispatcher;
+	import org.apache.flex.html.beads.models.ArrayListSelectionModel;
+	
+	/**
+	 *  The HorizontalLinearAxisForArrayListBead class provides a horizontal axis that uses a numeric
+	 *  range. 
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
+	public class HorizontalLinearAxisForArrayListBead extends HorizontalLinearAxisBead
+	{
+		/**
+		 *  constructor.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		public function HorizontalLinearAxisForArrayListBead()
+		{
+			super();
+		}
+		
+		/**
+		 * @private
+		 */
+		override protected function handleItemsCreated(event:Event):void
+		{	
+			var model:ArrayListSelectionModel = strand.getBeadByType(ISelectionModel) as ArrayListSelectionModel;
+			var items:ArrayList;
+			if (model.dataProvider is ArrayList) items = model.dataProvider as ArrayList;
+			else return;
+			
+			clearGraphics();
+			
+			var xpos:Number = 0;
+			var useWidth:Number = UIBase(axisGroup).width;
+			var series:Array = IChart(strand).series;
+			var maxValue:Number = Number.MIN_VALUE;
+			var minValue:Number = Number.MAX_VALUE;
+			
+			// determine minimum and maximum values, if needed
+			if (isNaN(minimum)) {
+				for(var i:int=0; i < items.length; i++) {
+					var item:Object = items.getItemAt(i);
+					var value:Number = Number(item[valueField]);
+					if (!isNaN(value)) minValue = Math.min(minValue,value);
+					else minValue = Math.min(minValue,0);
+				}
+			} else {
+				minValue = minimum;
+			}
+			if (isNaN(maximum)) {
+				for(i=0; i < items.length; i++) {
+					item = items.getItemAt(i);
+					value = Number(item[valueField]);
+					if (!isNaN(value)) maxValue = Math.max(maxValue,value);
+					else maxValue = Math.max(maxValue,0);
+				}
+			} else {
+				maxValue = maximum;
+			}
+			
+			var numTicks:Number = 10; // should determine this some other way, I think
+			var tickStep:Number = (maxValue - minValue)/numTicks;
+			var tickSpacing:Number = useWidth/numTicks;
+			var tickValue:Number = minValue;
+			
+			// place the labels below the axis enough to account for the tick marks
+			var labelY:Number = 7;
+			
+			for(i=0; i < numTicks+1; i++) 
+			{	
+				var label:Object = addTickLabel(formatLabel(tickValue), xpos, labelY, tickSpacing, 0);
+				label.x = xpos - label.width/2;
+				
+				// add a tick mark, too				
+				addTickMark(xpos, 0, 0, 5);
+				
+				xpos += tickSpacing;
+				tickValue += tickStep;
+			}
+			
+			// draw the axis and tick marks
+			drawAxisPath(0, 0, useWidth, 0);
+			drawTickPath(0, 1);
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalCategoryAxisBead.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalCategoryAxisBead.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalCategoryAxisBead.as
index 577bd5a..94f72e5 100644
--- a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalCategoryAxisBead.as
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalCategoryAxisBead.as
@@ -159,7 +159,7 @@ package org.apache.flex.charts.beads
 		/**
 		 * @private
 		 */
-		private function handleItemsCreated(event:Event):void
+		protected function handleItemsCreated(event:Event):void
 		{	
 			var model:ArraySelectionModel = strand.getBeadByType(ISelectionModel) as ArraySelectionModel;
 			var items:Array;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalCategoryAxisForArrayListBead.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalCategoryAxisForArrayListBead.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalCategoryAxisForArrayListBead.as
new file mode 100644
index 0000000..07a6685
--- /dev/null
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalCategoryAxisForArrayListBead.as
@@ -0,0 +1,98 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.charts.beads
+{
+	import org.apache.flex.collections.ArrayList;
+	import org.apache.flex.charts.core.IChart;
+	import org.apache.flex.charts.core.IVerticalAxisBead;
+	import org.apache.flex.core.IBead;
+	import org.apache.flex.core.ISelectionModel;
+	import org.apache.flex.core.IStrand;
+	import org.apache.flex.core.UIBase;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.IEventDispatcher;
+	import org.apache.flex.html.beads.models.ArrayListSelectionModel;
+	
+	/**
+	 *  The VerticalCategoryAxisForArrayListBead displays a vertical axis with
+	 *  tick marks corresponding to data points identified by the
+	 *  categoryField property. This type of axis is useful for non-numeric
+	 *  plots. 
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
+	public class VerticalCategoryAxisForArrayListBead extends VerticalCategoryAxisBead
+	{
+		/**
+		 *  constructor.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		public function VerticalCategoryAxisForArrayListBead()
+		{
+			super();
+		}
+		
+		/**
+		 * @private
+		 */
+		override protected function handleItemsCreated(event:Event):void
+		{	
+			var model:ArrayListSelectionModel = strand.getBeadByType(ISelectionModel) as ArrayListSelectionModel;
+			var items:ArrayList;
+			if (model.dataProvider is ArrayList) items = model.dataProvider as ArrayList;
+			else return;
+			
+			clearGraphics();
+			
+			var series:Array = IChart(strand).series;
+			
+			var useHeight:Number = UIBase(axisGroup).height;
+			var useWidth:Number  = UIBase(axisGroup).width;
+			var itemHeight:Number = (useHeight - gap*(items.length-1)) / items.length;
+			var xpos:Number = 0;
+			var ypos:Number = useHeight - itemHeight/2;
+			
+			var numTicks:Number = items.length;
+			var tickSpacing:Number = itemHeight + gap;
+			
+			for(var i:int=0; i < items.length; i++) 
+			{				
+				var item:Object = items.getItemAt(i);
+				var label:Object = addTickLabel(item[categoryField], 0, ypos, 0, itemHeight);
+				label.y = ypos - label.height/2;
+				
+				// add a tick mark, too.
+				addTickMark(useWidth-6, ypos, 5, 0);
+				
+				ypos -= tickSpacing;
+			}
+			
+			// draw the axis and tick marks
+			drawAxisPath(useWidth-1, 0, 0, useHeight);
+			drawTickPath(useWidth-6, 0);
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalLinearAxisBead.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalLinearAxisBead.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalLinearAxisBead.as
index 4cd2e63..91cf168 100644
--- a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalLinearAxisBead.as
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalLinearAxisBead.as
@@ -144,7 +144,7 @@ package org.apache.flex.charts.beads
 		/**
 		 * @private
 		 */
-		private function formatLabel(n:Number):String
+		protected function formatLabel(n:Number):String
 		{
 			var sign:Number = n < 0 ? -1 : 1;
 			n = Math.abs(n);
@@ -167,7 +167,7 @@ package org.apache.flex.charts.beads
 		/**
 		 * @private
 		 */
-		private function handleItemsCreated(event:Event):void
+		protected function handleItemsCreated(event:Event):void
 		{
 			var model:ArraySelectionModel = strand.getBeadByType(ISelectionModel) as ArraySelectionModel;
 			var items:Array;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalLinearAxisForArrayListBead.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalLinearAxisForArrayListBead.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalLinearAxisForArrayListBead.as
new file mode 100644
index 0000000..2d7b199
--- /dev/null
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/VerticalLinearAxisForArrayListBead.as
@@ -0,0 +1,119 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.charts.beads
+{
+	import org.apache.flex.collections.ArrayList;
+	import org.apache.flex.charts.core.IChart;
+	import org.apache.flex.charts.core.IVerticalAxisBead;
+	import org.apache.flex.core.IBead;
+	import org.apache.flex.core.ISelectionModel;
+	import org.apache.flex.core.IStrand;
+	import org.apache.flex.core.UIBase;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.IEventDispatcher;
+	import org.apache.flex.html.beads.models.ArrayListSelectionModel;
+	
+	/**
+	 *  The VerticalLinearAxisBead class provides a vertical axis that uses a numeric
+	 *  range. 
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
+	public class VerticalLinearAxisForArrayListBead extends VerticalLinearAxisBead
+	{
+		public function VerticalLinearAxisForArrayListBead()
+		{
+			super();
+		}
+		
+		/**
+		 * @private
+		 */
+		override protected function handleItemsCreated(event:Event):void
+		{
+			var model:ArrayListSelectionModel = strand.getBeadByType(ISelectionModel) as ArrayListSelectionModel;
+			var items:ArrayList;
+			if (model.dataProvider is ArrayList) items = model.dataProvider as ArrayList;
+			else return;
+			
+			clearGraphics();
+			
+			var series:Array = IChart(strand).series;
+			
+			var useHeight:Number = UIBase(axisGroup).height;
+			var useWidth:Number  = UIBase(axisGroup).width;
+			var xpos:Number = 0;
+			var ypos:Number = useHeight;
+			var minValue:Number = Number.MAX_VALUE;
+			var maxValue:Number = Number.MIN_VALUE;
+			
+			// determine minimum and maximum values, if needed
+			if (isNaN(minimum)) {
+				for(var i:int=0; i < items.length; i++) {
+					var item:Object = items.getItemAt(i);
+					var value:Number = Number(item[valueField]);
+					if (!isNaN(value)) minValue = Math.min(minValue,value);
+					else minValue = Math.min(minValue,0);
+				}
+			} else {
+				minValue = minimum;
+			}
+			if (isNaN(maximum)) {
+				for(i=0; i < items.length; i++) {
+					item = items.getItemAt(i);
+					value = Number(item[valueField]);
+					if (!isNaN(value)) maxValue = Math.max(maxValue,value);
+					else maxValue = Math.max(maxValue,0);
+				}
+			} else {
+				maxValue = maximum;
+			}
+			
+			var range:Number = maxValue - minValue;
+			var numTicks:Number = 10; // should determine this some other way, I think
+			var tickStep:Number = range/numTicks;
+			var tickSpacing:Number = useHeight/numTicks;
+			var tickValue:Number = minimum;
+			
+			// place the labels below the axis enough to account for the tick marks
+			var labelY:Number = UIBase(axisGroup).height + 8;
+			
+			for(i=0; i < numTicks+1; i++) 
+			{			
+				var label:Object = addTickLabel(formatLabel(tickValue), 0, ypos, 0, tickSpacing);
+				label.y = ypos - label.height/2;
+				
+				// add a tick mark, too.
+				addTickMark(useWidth-6, ypos, 5, 0);
+				
+				ypos -= tickSpacing;
+				tickValue += tickStep;
+			}
+			
+			// draw the axis and the tick marks
+			drawAxisPath(useWidth-1, 0, 0, useHeight);
+			drawTickPath(useWidth-6, 0);
+			
+		}
+		
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/BarChartLayoutForArrayList.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/BarChartLayoutForArrayList.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/BarChartLayoutForArrayList.as
new file mode 100644
index 0000000..bea8734
--- /dev/null
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/BarChartLayoutForArrayList.as
@@ -0,0 +1,129 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.charts.beads.layouts
+{
+	import org.apache.flex.charts.core.ICartesianChartLayout;
+	import org.apache.flex.charts.core.IChartItemRenderer;
+	import org.apache.flex.charts.core.IChartSeries;
+	import org.apache.flex.charts.supportClasses.BarSeries;
+	import org.apache.flex.core.IBeadLayout;
+	import org.apache.flex.core.ISelectionModel;
+	import org.apache.flex.core.UIBase;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.IEventDispatcher;
+	import org.apache.flex.collections.ArrayList;
+	
+	/**
+	 *  The BarChartLayoutForArrayList class calculates the size and position of all of the itemRenderers for
+	 *  all of the series in a BarChart. 
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
+	public class BarChartLayoutForArrayList extends BarChartLayout
+	{
+		/**
+		 *  constructor.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		public function BarChartLayoutForArrayList()
+		{
+			super();
+		}
+		
+		/**
+		 * @private
+		 */
+		override protected function performLayout():void
+		{			
+			var selectionModel:ISelectionModel = chart.getBeadByType(ISelectionModel) as ISelectionModel;
+			var dp:ArrayList = selectionModel.dataProvider as ArrayList;
+			if (!dp)
+				return;
+			
+			var n:int = dp.length;
+			var useWidth:Number = UIBase(chartDataGroup).width;
+			var useHeight:Number = UIBase(chartDataGroup).height;
+			var itemHeight:Number =  (useHeight - gap*(dp.length-1))/dp.length;
+			var seriesHeight:Number = itemHeight/chart.series.length;
+			var ypos:Number = useHeight;
+			
+			var maxXValue:Number = 0;
+			var minXValue:Number = 0;
+			var scaleFactor:Number = 1.0;
+			var determineScale:Boolean = true;
+			
+			if (horizontalAxisBead != null && !isNaN(horizontalAxisBead.maximum)) {
+				maxXValue = horizontalAxisBead.maximum;
+				determineScale = false;
+			}
+			if (horizontalAxisBead != null && !isNaN(horizontalAxisBead.minimum)) {
+				minXValue = horizontalAxisBead.minimum;
+			}
+			
+			for (var s:int = 0; s < chart.series.length; s++)
+			{
+				var bcs:BarSeries = chart.series[s] as BarSeries;
+				
+				for (var i:int = 0; i < n; i++)
+				{
+					var data:Object = dp.getItemAt(i);
+					var field:String = bcs.xField;
+					
+					var xValue:Number = Number(data[field]);
+					if (determineScale) maxXValue = Math.max(xValue, maxXValue);
+				}				
+			}
+			
+			var range:Number = maxXValue - minXValue;
+			scaleFactor = useWidth/range;
+			
+			for (i = 0; i < n; i++)
+			{
+				data = dp.getItemAt(i);
+				
+				for (s=0; s < chart.series.length; s++)
+				{
+					bcs = chart.series[s] as BarSeries;
+					
+					var child:IChartItemRenderer = chartDataGroup.getItemRendererForSeriesAtIndex(bcs,i);
+					xValue = Number(data[bcs.xField]) - minXValue;
+					if (xValue > maxXValue) xValue = maxXValue;
+					xValue = xValue * scaleFactor;
+					
+					child.x = 0;
+					child.y = ypos - seriesHeight;
+					child.width = xValue;
+					child.height = seriesHeight;
+					ypos -= seriesHeight;
+				}
+				
+				ypos -= gap;
+			}
+			
+			IEventDispatcher(chart).dispatchEvent(new Event("layoutComplete"));
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/ColumnChartLayoutForArrayList.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/ColumnChartLayoutForArrayList.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/ColumnChartLayoutForArrayList.as
new file mode 100644
index 0000000..f1c3396
--- /dev/null
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/ColumnChartLayoutForArrayList.as
@@ -0,0 +1,129 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.charts.beads.layouts
+{
+	import org.apache.flex.charts.core.ICartesianChartLayout;
+	import org.apache.flex.charts.core.IChartItemRenderer;
+	import org.apache.flex.charts.core.IVerticalAxisBead;
+	import org.apache.flex.charts.supportClasses.ColumnSeries;
+	import org.apache.flex.core.IBeadLayout;
+	import org.apache.flex.core.ISelectionModel;
+	import org.apache.flex.core.UIBase;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.IEventDispatcher;
+	import org.apache.flex.collections.ArrayList;
+	
+	/**
+	 *  The ColumnChartLayoutForArrayList class calculates the size and position of all of the itemRenderers for
+	 *  all of the series in a BarChart. 
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
+	public class ColumnChartLayoutForArrayList extends ColumnChartLayout
+	{
+		/**
+		 *  constructor.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		public function ColumnChartLayoutForArrayList()
+		{
+			super();
+		}
+		
+		/**
+		 * @private
+		 */
+		override protected function performLayout():void
+		{
+			var selectionModel:ISelectionModel = chart.getBeadByType(ISelectionModel) as ISelectionModel;
+			var dp:ArrayList = selectionModel.dataProvider as ArrayList;
+			if (!dp)
+				return;
+			
+			var n:int = dp.length;
+			var xpos:Number = 0;
+			var useWidth:Number = UIBase(chartDataGroup).width;
+			var useHeight:Number = UIBase(chartDataGroup).height;
+			var itemWidth:Number =  (useWidth - gap*(dp.length-1))/dp.length;
+			var seriesWidth:Number = itemWidth/chart.series.length;
+			
+			var maxYValue:Number = 0;
+			var minYValue:Number = 0;
+			var scaleFactor:Number = 1;
+			var determineScale:Boolean = true;
+			
+			if (verticalAxisBead != null && !isNaN(verticalAxisBead.maximum)) {
+				maxYValue = verticalAxisBead.maximum;
+				determineScale = false;
+			}
+			if (verticalAxisBead != null && !isNaN(verticalAxisBead.minimum)) {
+				minYValue = verticalAxisBead.minimum;
+			}
+			
+			for (var s:int = 0; s < chart.series.length; s++)
+			{
+				var bcs:ColumnSeries = chart.series[s] as ColumnSeries;				
+				
+				for (var i:int = 0; i < n; i++)
+				{
+					var data:Object = dp.getItemAt(i);
+					var field:String = bcs.yField;
+					
+					var yValue:Number = Number(data[field]);
+					if (determineScale) maxYValue = Math.max(yValue, maxYValue);
+				}
+			}
+			
+			var range:Number = maxYValue - minYValue;
+			scaleFactor = useHeight/range;
+			
+			for (i = 0; i < n; i++)
+			{
+				data = dp.getItemAt(i);
+				
+				for (s=0; s < chart.series.length; s++)
+				{
+					bcs = chart.series[s] as ColumnSeries;
+					
+					var child:IChartItemRenderer = chartDataGroup.getItemRendererForSeriesAtIndex(bcs,i);
+					yValue = Number(data[bcs.yField]) - minYValue;
+					if (yValue > maxYValue) yValue = maxYValue;
+					yValue = yValue * scaleFactor;
+					
+					child.y = useHeight - yValue;
+					child.x = xpos;
+					child.width = seriesWidth;
+					child.height = yValue;
+					xpos += seriesWidth;
+				}
+				
+				xpos += gap;
+			}
+			
+			IEventDispatcher(chart).dispatchEvent(new Event("layoutComplete"));
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/PieChartLayoutForArrayList.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/PieChartLayoutForArrayList.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/PieChartLayoutForArrayList.as
new file mode 100644
index 0000000..09418f3
--- /dev/null
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/PieChartLayoutForArrayList.as
@@ -0,0 +1,142 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.charts.beads.layouts
+{
+	import org.apache.flex.charts.core.IChartItemRenderer;
+	import org.apache.flex.charts.core.IChartSeries;
+	import org.apache.flex.charts.supportClasses.IWedgeItemRenderer;
+	import org.apache.flex.charts.supportClasses.PieSeries;
+	import org.apache.flex.core.IBeadLayout;
+	import org.apache.flex.core.ISelectionModel;
+	import org.apache.flex.core.ILayoutHost;
+	import org.apache.flex.core.IParentIUIBase;
+	import org.apache.flex.graphics.IFill;
+	import org.apache.flex.graphics.SolidColor;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.IEventDispatcher;
+	import org.apache.flex.collections.ArrayList;
+	
+	/**
+	 *  The PieChartLayoutForArrayList class calculates the size and position of all of the itemRenderers for
+	 *  a PieChart. 
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
+	public class PieChartLayoutForArrayList extends PieChartLayout
+	{
+		/**
+		 *  constructor.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		public function PieChartLayoutForArrayList()
+		{
+			super();
+		}
+		
+		/**
+		 * @private
+		 */
+		override protected function performLayout():void
+		{
+			var selectionModel:ISelectionModel = chart.getBeadByType(ISelectionModel) as ISelectionModel;
+			var dp:ArrayList = selectionModel.dataProvider as ArrayList;
+			if (!dp)
+				return;
+			
+			var layoutParent:ILayoutHost = strand.getBeadByType(ILayoutHost) as ILayoutHost;
+			var contentView:IParentIUIBase = layoutParent.contentView as IParentIUIBase;
+			
+			var n:int = dp.length;
+			
+			var xpos:Number = 0;
+			var useWidth:Number = contentView.width;
+			var useHeight:Number = contentView.height;
+			
+			var maxYValue:Number = 0;
+			var seriesMaxes:Array = [];
+			var colors:Array = [0xFF964D, 0x964DFF, 0xF80012, 0x96FF4D, 0x4D96FF, 0x8A8A01, 0x23009C, 0x4A4A4A, 0x23579D];
+			
+			for (var s:int = 0; s < chart.series.length; s++)
+			{
+				var pcs:PieSeries = chart.series[s] as PieSeries;
+				
+				for (var i:int = 0; i < n; i++)
+				{
+					var data:Object = dp.getItemAt(i);
+					var field:String = pcs.dataField;
+					
+					var yValue:Number = Number(data[field]);
+					maxYValue += yValue;
+					
+					seriesMaxes.push( {yValue:yValue, percent:0, arc:0} );
+				}
+				
+				for (i=0; i < n; i++)
+				{
+					var obj:Object = seriesMaxes[i];
+					obj.percent = obj.yValue / maxYValue;
+					obj.arc = 360.0*obj.percent;					
+				}
+				
+				var start:Number = 0;
+				var end:Number = 0;
+				var radius:Number = Math.min(useWidth,useHeight)/2;
+				var centerX:Number = useWidth/2;
+				var centerY:Number = useHeight/2;
+				
+				for (i=0; i < n; i++)
+				{
+					obj = seriesMaxes[i];
+					data = dp.getItemAt(i);
+					
+					var fill:SolidColor = new SolidColor();
+					fill.color = colors[i%colors.length];
+					fill.alpha = 1.0;
+					
+					var child:IWedgeItemRenderer = chartDataGroup.getItemRendererForSeriesAtIndex(chart.series[s],i) as IWedgeItemRenderer;
+					child.fill = fill;
+					
+					end = start + (360.0 * obj.percent);
+					var arc:Number = 360.0 * obj.percent;
+					
+					child.x = 0;
+					child.y = 0;
+					child.width = useWidth;
+					child.height = useHeight;
+					child.centerX = centerX;
+					child.centerY = centerY;
+					child.startAngle = start*Math.PI/180;
+					child.arc = arc*Math.PI/180;
+					child.radius = radius;
+					
+					start += arc;
+				}
+			}
+			
+			IEventDispatcher(chart).dispatchEvent(new Event("layoutComplete"));
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/StackedBarChartLayoutForArrayList.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/StackedBarChartLayoutForArrayList.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/StackedBarChartLayoutForArrayList.as
new file mode 100644
index 0000000..f0f87dc
--- /dev/null
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/StackedBarChartLayoutForArrayList.as
@@ -0,0 +1,145 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.charts.beads.layouts
+{
+	import org.apache.flex.charts.core.ICartesianChartLayout;
+	import org.apache.flex.charts.core.IChartItemRenderer;
+	import org.apache.flex.charts.core.IChartSeries;
+	import org.apache.flex.charts.supportClasses.BarSeries;
+	import org.apache.flex.core.IBeadLayout;
+	import org.apache.flex.core.ISelectionModel;
+	import org.apache.flex.core.ILayoutHost;
+	import org.apache.flex.core.IParentIUIBase;
+	import org.apache.flex.core.UIBase;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.IEventDispatcher;
+	import org.apache.flex.collections.ArrayList;
+	
+	/**
+	 *  The StackedBarChartLayoutForArrayList class calculates the size and position of all of the itemRenderers for
+	 *  all of the series in a BarChart. 
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
+	public class StackedBarChartLayoutForArrayList extends StackedBarChartLayout
+	{
+		/**
+		 *  constructor.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		public function StackedBarChartLayoutForArrayList()
+		{
+			super();
+		}
+		
+		/**
+		 * @private
+		 */
+		override protected function performLayout():void
+		{
+			var selectionModel:ISelectionModel = chart.getBeadByType(ISelectionModel) as ISelectionModel;
+			var dp:ArrayList = selectionModel.dataProvider as ArrayList;
+			if (!dp)
+				return;
+			
+			var layoutParent:ILayoutHost = strand.getBeadByType(ILayoutHost) as ILayoutHost;
+			var contentView:IParentIUIBase = layoutParent.contentView as IParentIUIBase;
+			
+			var n:int = dp.length;			
+			var maxXValue:Number = 0;
+			var minXValue:Number = 0;
+			var determineScale:Boolean = true;
+			var seriesMaxes:Array = [];
+			
+			var useWidth:Number = contentView.width;
+			var useHeight:Number = contentView.height;
+			var itemHeight:Number = (useHeight - gap*(dp.length-1))/n;
+			var seriesHeight:Number = itemHeight;
+			var xpos:Number = 0;
+			var ypos:Number = useHeight;
+			
+			var barValues:Array = [];
+			var scaleFactor:Number = 1;
+			
+			if (horizontalAxisBead != null && !isNaN(horizontalAxisBead.maximum)) {
+				maxXValue = horizontalAxisBead.maximum;
+				determineScale = false;
+			}
+			if (horizontalAxisBead != null && !isNaN(horizontalAxisBead.minimum)) {
+				minXValue = horizontalAxisBead.minimum;
+			}
+			
+			for (var i:int=0; i < n; i++)
+			{
+				barValues.push({totalValue:0, scaleFactor:0});
+				
+				var data:Object = dp.getItemAt(i);
+				
+				for (var s:int = 0; s < chart.series.length; s++)
+				{
+					var bcs:BarSeries = chart.series[s] as BarSeries;
+					var field:String = bcs.xField;
+					
+					var xValue:Number = Number(data[field]);
+					barValues[i].totalValue += xValue;
+				}
+				
+				if (determineScale) {
+					maxXValue = Math.max(maxXValue, barValues[i].totalValue);
+				}
+			}
+			
+			scaleFactor = useWidth/(maxXValue - minXValue);
+			
+			for (i=0; i < n; i++)
+			{
+				data = dp.getItemAt(i);
+				
+				xpos = 0;
+				
+				for (s=0; s < chart.series.length; s++)
+				{
+					bcs = chart.series[s] as BarSeries;
+					
+					var child:IChartItemRenderer = chartDataGroup.getItemRendererForSeriesAtIndex(bcs,i);
+					xValue = Number(data[bcs.xField]) - minXValue;
+					xValue = xValue * scaleFactor;
+					
+					child.x = xpos;
+					child.width = Math.floor(xValue);
+					child.y = Math.floor(ypos - seriesHeight);
+					child.height = seriesHeight;
+					
+					xpos += xValue;
+				}
+				
+				ypos -= (itemHeight + gap);
+			}
+			
+			IEventDispatcher(chart).dispatchEvent(new Event("layoutComplete"));
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/StackedColumnChartLayoutForArrayList.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/StackedColumnChartLayoutForArrayList.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/StackedColumnChartLayoutForArrayList.as
new file mode 100644
index 0000000..716aff5
--- /dev/null
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/layouts/StackedColumnChartLayoutForArrayList.as
@@ -0,0 +1,142 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.charts.beads.layouts
+{
+	import org.apache.flex.charts.core.ICartesianChartLayout;
+	import org.apache.flex.charts.core.IChartItemRenderer;
+	import org.apache.flex.charts.supportClasses.ColumnSeries;
+	import org.apache.flex.core.IBeadLayout;
+	import org.apache.flex.core.ISelectionModel;
+	import org.apache.flex.core.ILayoutHost;
+	import org.apache.flex.core.IParentIUIBase;
+	import org.apache.flex.core.UIBase;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.IEventDispatcher;
+	import org.apache.flex.collections.ArrayList;
+	
+	/**
+	 *  The StackedColumnChartLayoutForArrayList class calculates the size and position of all of the itemRenderers for
+	 *  all of the series in a BarChart. 
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
+	public class StackedColumnChartLayoutForArrayList extends StackedColumnChartLayout
+	{
+		/**
+		 *  constructor.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		public function StackedColumnChartLayoutForArrayList()
+		{
+			super();
+		}
+		
+		/**
+		 * @private
+		 */
+		override protected function performLayout():void
+		{
+			var selectionModel:ISelectionModel = chart.getBeadByType(ISelectionModel) as ISelectionModel;
+			var dp:ArrayList = selectionModel.dataProvider as ArrayList;
+			if (!dp)
+				return;
+			
+			var layoutParent:ILayoutHost = strand.getBeadByType(ILayoutHost) as ILayoutHost;
+			var contentView:IParentIUIBase = layoutParent.contentView as IParentIUIBase;
+			
+			var n:int = dp.length;
+			var useWidth:Number = contentView.width;
+			var useHeight:Number = contentView.height;
+			var itemWidth:Number = (useWidth - gap*(dp.length-1))/dp.length;
+			var seriesWidth:Number = itemWidth;
+			var xpos:Number = 0;
+			var ypos:Number = 0;
+			
+			var maxYValue:Number = 0;
+			var minYValue:Number = 0;
+			var determineScale:Boolean = true;
+			
+			var barValues:Array = [];
+			var scaleFactor:Number = 1;
+			
+			if (verticalAxisBead != null && !isNaN(verticalAxisBead.maximum)) {
+				maxYValue = verticalAxisBead.maximum;
+				determineScale = false;
+			}
+			if (verticalAxisBead != null && !isNaN(verticalAxisBead.minimum)) {
+				minYValue = verticalAxisBead.minimum;
+			}
+			
+			for (var i:int=0; i < n; i++)
+			{
+				barValues.push({totalValue:0});
+				var data:Object = dp.getItemAt(i);
+				
+				for (var s:int = 0; s < chart.series.length; s++)
+				{
+					var bcs:ColumnSeries = chart.series[s] as ColumnSeries;
+					var field:String = bcs.yField;
+					
+					var yValue:Number = Number(data[field]);
+					barValues[i].totalValue += yValue;
+				}
+				
+				if (determineScale) {
+					maxYValue = Math.max(maxYValue, barValues[i].totalValue);
+				}
+			}
+			
+			scaleFactor = useHeight / (maxYValue - minYValue);
+			
+			for (i=0; i < n; i++)
+			{
+				data = dp.getItemAt(i);
+				ypos = useHeight;
+				
+				for (s=0; s < chart.series.length; s++)
+				{
+					bcs = chart.series[s] as ColumnSeries;
+					
+					var child:IChartItemRenderer = chartDataGroup.getItemRendererForSeriesAtIndex(bcs,i);
+					
+					yValue = Number(data[field]) - minYValue;
+					yValue = yValue * scaleFactor;
+					
+					child.x = xpos;
+					child.width = itemWidth;
+					child.y = ypos - Math.ceil(yValue);
+					child.height = Math.floor(yValue);
+					
+					ypos = child.y;
+				}
+				
+				xpos += gap + itemWidth;
+			}
+			
+			IEventDispatcher(chart).dispatchEvent(new Event("layoutComplete"));
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/models/ChartArrayListSelectionModel.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/models/ChartArrayListSelectionModel.as b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/models/ChartArrayListSelectionModel.as
new file mode 100644
index 0000000..72a8fbc
--- /dev/null
+++ b/frameworks/projects/Charts/src/main/flex/org/apache/flex/charts/beads/models/ChartArrayListSelectionModel.as
@@ -0,0 +1,75 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.charts.beads.models
+{
+	import org.apache.flex.core.IStrand;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.EventDispatcher;
+	
+	import org.apache.flex.html.beads.models.ArrayListSelectionModel;
+	
+	import org.apache.flex.charts.core.IChartDataModel;
+	import org.apache.flex.charts.core.IChartSeries;
+	
+	/**
+	 *  The ArraySelectionModel class is a selection model for
+	 *  a dataProvider that is an array. It assumes that items
+	 *  can be fetched from the dataProvider
+	 *  dataProvider[index].  Other selection models
+	 *  would support other kinds of data providers.
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
+	public class ChartArrayListSelectionModel extends ArrayListSelectionModel implements IChartDataModel
+	{
+		public function ChartArrayListSelectionModel()
+		{
+			super();
+		}
+		
+		private var _series:IChartSeries;
+		public function get selectedSeries():IChartSeries
+		{
+			return _series;
+		}
+		public function set selectedSeries(value:IChartSeries):void
+		{
+			if (value != _series) {
+				_series = value;
+				dispatchEvent(new Event("selectedSeriesChanged"));
+			}
+		}
+		
+		private var _rollOverSeries:IChartSeries;
+		public function get rollOverSeries():IChartSeries
+		{
+			return _rollOverSeries;
+		}
+		public function set rollOverSeries(value:IChartSeries):void
+		{
+			if (value != _rollOverSeries) {
+				_rollOverSeries = value;
+				dispatchEvent(new Event("rollOverSeriesChanged"));
+			}
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f9c4a01d/frameworks/projects/Charts/src/main/resources/basic-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/src/main/resources/basic-manifest.xml b/frameworks/projects/Charts/src/main/resources/basic-manifest.xml
index d25b3fb..24c61ee 100644
--- a/frameworks/projects/Charts/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Charts/src/main/resources/basic-manifest.xml
@@ -32,9 +32,30 @@
     <component id="StackedBarChart" class="org.apache.flex.charts.StackedBarChart" />
     <component id="DataTipBead" class="org.apache.flex.charts.beads.DataTipBead" />
     <component id="HorizontalCategoryAxisBead" class="org.apache.flex.charts.beads.HorizontalCategoryAxisBead" />
+    <component id="HorizontalCategoryAxisForArrayListBead" class="org.apache.flex.charts.beads.HorizontalCategoryAxisForArrayListBead" />
     <component id="HorizontalLinearAxisBead" class="org.apache.flex.charts.beads.HorizontalLinearAxisBead" />
+    <component id="HorizontalLinearAxisForArrayListBead" class="org.apache.flex.charts.beads.HorizontalLinearAxisForArrayListBead" />
     <component id="VerticalCategoryAxisBead" class="org.apache.flex.charts.beads.VerticalCategoryAxisBead" />
+    <component id="VerticalCategoryAxisForArrayListBead" class="org.apache.flex.charts.beads.VerticalCategoryAxisForArrayListBead" />
     <component id="VerticalLinearAxisBead" class="org.apache.flex.charts.beads.VerticalLinearAxisBead" />
+    <component id="VerticalLinearAxisForArrayListBead" class="org.apache.flex.charts.beads.VerticalLinearAxisForArrayListBead" />
+    
+    <component id="ChartArraySelectionModel" class="org.apache.flex.charts.beads.models.ChartArraySelectionModel" />
+    <component id="ChartArrayListSelectionModel" class="org.apache.flex.charts.beads.models.ChartArrayListSelectionModel" />
+    
+    <component id="BarChartLayout" class="org.apache.flex.charts.beads.layouts.BarChartLayout" />
+    <component id="BarChartLayoutForArrayList" class="org.apache.flex.charts.beads.layouts.BarChartLayoutForArrayList" />
+    <component id="ColumnChartLayout" class="org.apache.flex.charts.beads.layouts.ColumnChartLayout" />
+    <component id="ColumnChartLayoutForArrayList" class="org.apache.flex.charts.beads.layouts.ColumnChartLayoutForArrayList" />
+    <component id="PieChartLayout" class="org.apache.flex.charts.beads.layouts.PieChartLayout" />
+    <component id="PieChartLayoutForArrayList" class="org.apache.flex.charts.beads.layouts.PieChartLayoutForArrayList" />
+    <component id="StackedBarChartLayout" class="org.apache.flex.charts.beads.layouts.StackedBarChartLayout" />
+    <component id="StackedBarChartLayoutForArrayList" class="org.apache.flex.charts.beads.layouts.StackedBarChartLayoutForArrayList" />
+    <component id="StackedColumnChartLayout" class="org.apache.flex.charts.beads.layouts.StackedColumnChartLayout" />
+    <component id="StackedColumnChartLayoutForArrayList" class="org.apache.flex.charts.beads.layouts.StackedColumnChartLayoutForArrayList" />
+    
+    <component id="DataItemRendererFactoryForSeriesData" class="org.apache.flex.charts.beads.DataItemRendererFactoryForSeriesData" />
+    <component id="DataItemRendererFactoryForSeriesArrayListData" class="org.apache.flex.charts.beads.DataItemRendererFactoryForSeriesArrayListData" />
     
     <component id="BoxItemRenderer" class="org.apache.flex.charts.supportClasses.BoxItemRenderer" />
     <component id="WedgeItemRenderer" class="org.apache.flex.charts.supportClasses.WedgeItemRenderer" />


[02/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Modified TodoListSample to take advantage of itemRendererCreated event from DataItemFactory* class.

Posted by ha...@apache.org.
Modified TodoListSample to take advantage of itemRendererCreated event from DataItemFactory* class.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/e8778701
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/e8778701
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/e8778701

Branch: refs/heads/refactor-sprite
Commit: e87787017f689ff0b85b231f28c17be9a703b95b
Parents: db261ad
Author: Peter Ent <pe...@apache.org>
Authored: Thu Sep 8 14:26:35 2016 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Thu Sep 8 14:26:35 2016 -0400

----------------------------------------------------------------------
 .../renderers/TodoListItemRendererFactory.as    | 68 --------------------
 .../src/sample/todo/views/TodoListView.mxml     | 53 ++++++++++-----
 2 files changed, 36 insertions(+), 85 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e8778701/examples/flexjs/TodoListSampleApp/src/sample/todo/renderers/TodoListItemRendererFactory.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/TodoListSampleApp/src/sample/todo/renderers/TodoListItemRendererFactory.as b/examples/flexjs/TodoListSampleApp/src/sample/todo/renderers/TodoListItemRendererFactory.as
deleted file mode 100644
index 54f11ff..0000000
--- a/examples/flexjs/TodoListSampleApp/src/sample/todo/renderers/TodoListItemRendererFactory.as
+++ /dev/null
@@ -1,68 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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 sample.todo.renderers {
-
-	import org.apache.flex.core.ISelectableItemRenderer;
-	import org.apache.flex.core.IStrand;
-	import org.apache.flex.events.Event;
-	import org.apache.flex.events.IEventDispatcher;
-	import org.apache.flex.html.beads.DataItemRendererFactoryAndEventDispatcherForArrayData;
-
-	import sample.todo.events.TodoListEvent;
-	import sample.todo.renderers.TodoItemRenderer;
-
-	[Event(name="itemChecked", type="sample.todo.events.TodoListEvent")]
-	[Event(name="itemRemoveRequest", type="sample.todo.events.TodoListEvent")]
-
-	public class TodoListItemRendererFactory extends DataItemRendererFactoryAndEventDispatcherForArrayData {
-
-
-		private var _strand:IStrand;
-
-		override public function set strand(value:IStrand):void
-		{
-			super.strand = value;
-			_strand = value;
-		}
-
-		override protected function itemRendererCreated(ir:ISelectableItemRenderer):void
-		{
-			IEventDispatcher(ir).addEventListener("checkChanged",itemChecked);
-			IEventDispatcher(ir).addEventListener("removeRequest",itemRemove);
-		}
-
-		private function itemChecked(event:Event):void
-		{
-			var renderer:TodoItemRenderer = event.target as TodoItemRenderer;
-
-			var newEvent:TodoListEvent = new TodoListEvent(TodoListEvent.ITEM_CHECKED);
-			newEvent.item = renderer.data;
-			dispatchEvent(newEvent);
-		}
-
-		private function itemRemove(event:Event):void
-		{
-			var renderer:TodoItemRenderer = event.target as TodoItemRenderer;
-
-			var newEvent:TodoListEvent = new TodoListEvent(TodoListEvent.ITEM_REMOVE_REQUEST);
-			newEvent.item = renderer.data;
-			dispatchEvent(newEvent);
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e8778701/examples/flexjs/TodoListSampleApp/src/sample/todo/views/TodoListView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/TodoListSampleApp/src/sample/todo/views/TodoListView.mxml b/examples/flexjs/TodoListSampleApp/src/sample/todo/views/TodoListView.mxml
index 310cfc0..9ddf675 100644
--- a/examples/flexjs/TodoListSampleApp/src/sample/todo/views/TodoListView.mxml
+++ b/examples/flexjs/TodoListSampleApp/src/sample/todo/views/TodoListView.mxml
@@ -26,6 +26,8 @@ limitations under the License.
     <fx:Script>
 		<![CDATA[
 			import org.apache.flex.events.Event;
+			import org.apache.flex.events.IEventDispatcher;
+			import org.apache.flex.events.ItemRendererEvent;
 			import org.apache.flex.html.beads.controllers.ItemRendererMouseController;
 			
 			import sample.todo.events.TodoListEvent;
@@ -52,13 +54,6 @@ limitations under the License.
 				todoInput.text = "";
 			}
 			
-			private function forwardEvent(event:TodoListEvent):void
-			{
-				var newEvent:TodoListEvent = new TodoListEvent(event.type);
-				newEvent.item = event.item;
-				dispatchEvent(newEvent);
-			}
-			
 			private function updateStatus(event:org.apache.flex.events.Event):void {
 				var numberLeft:Number = 0;
 				
@@ -92,6 +87,39 @@ limitations under the License.
 			private function showCompleted():void {
 				(applicationModel as TodoListModel).showCompletedTodos();
 			}
+			
+			/**
+			 * Handle creation of itemRenderers by listening for the events they dispatch.
+			 */
+			private function handleRendererCreated(event:ItemRendererEvent):void {
+				var renderer:IEventDispatcher = event.itemRenderer as IEventDispatcher;
+				renderer.addEventListener("checkChanged",itemChecked);
+				renderer.addEventListener("removeRequest",itemRemove);
+			}
+			
+			/**
+			 * When an item is checked, form new event and dispatch to controller.
+			 */
+			private function itemChecked(event:Event):void
+			{
+				var renderer:TodoItemRenderer = event.target as TodoItemRenderer;
+
+				var newEvent:TodoListEvent = new TodoListEvent(TodoListEvent.ITEM_CHECKED);
+				newEvent.item = renderer.data;
+				dispatchEvent(newEvent);
+			}
+
+			/**
+			 * When an item is removed, form a new event and dispatch to the controller.
+			 */
+			private function itemRemove(event:Event):void
+			{
+				var renderer:TodoItemRenderer = event.target as TodoItemRenderer;
+
+				var newEvent:TodoListEvent = new TodoListEvent(TodoListEvent.ITEM_REMOVE_REQUEST);
+				newEvent.item = renderer.data;
+				dispatchEvent(newEvent);
+			}
         ]]>
 	</fx:Script>
 	
@@ -115,8 +143,7 @@ limitations under the License.
 					dataProvider="{TodoListModel(applicationModel).todos}"
                     width="100%" height="400">
 			<js:beads>
-				<renderers:TodoListItemRendererFactory itemChecked="forwardEvent(event)" 
-													   itemRemoveRequest="forwardEvent(event)" />
+				<js:DataItemRendererFactoryForArrayData itemRendererCreated="handleRendererCreated(event)" />
 			</js:beads>
         </js:List>
 
@@ -135,14 +162,6 @@ limitations under the License.
         @namespace basic "library://ns.apache.org/flexjs/basic";
         @namespace renderers "sample.todo.renderers.*";
 
-        /* use className="todoList" on the List element in place of itemRenderer if you want to specify
-         * the itemRenderer in a style definition along with other settings.
-         */
-        .todoList {
-            IDataProviderItemRendererMapper: ClassReference("org.apache.flex.html.beads.DataItemRendererFactoryForArrayData");
-            IItemRenderer: ClassReference("sample.todo.renderers.TodoItemRenderer");
-        }
-
         renderers|TodoItemRenderer {
 			backgroundColor: #FFFFFF;
             height: 40px;


[21/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - use a subclass so we don't have to bring in DG classes in a class selector. Class selectors do not get pruned from the .css file, only Type selectors do

Posted by ha...@apache.org.
use a subclass so we don't have to bring in DG classes in a class selector.  Class selectors do not get pruned from the .css file, only Type selectors do


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/fd05c961
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/fd05c961
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/fd05c961

Branch: refs/heads/refactor-sprite
Commit: fd05c96129a1a553acf0c902f5bdf4aa0cb21483
Parents: c1682af
Author: Alex Harui <ah...@apache.org>
Authored: Thu Sep 22 21:14:01 2016 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Thu Sep 22 21:14:10 2016 -0700

----------------------------------------------------------------------
 .../org/apache/flex/html/beads/DataGridView.as  | 13 ++---
 .../html/supportClasses/DataGridColumnList.as   | 61 ++++++++++++++++++++
 .../HTML/src/main/resources/basic-manifest.xml  |  1 +
 .../HTML/src/main/resources/defaults.css        |  2 +-
 4 files changed, 69 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/fd05c961/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataGridView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataGridView.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataGridView.as
index 73e6af7..be81545 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataGridView.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataGridView.as
@@ -32,12 +32,12 @@ package org.apache.flex.html.beads
 	import org.apache.flex.events.IEventDispatcher;
 	import org.apache.flex.html.DataGridButtonBar;
 	import org.apache.flex.html.Container;
-	import org.apache.flex.html.List;
 	import org.apache.flex.html.beads.layouts.ButtonBarLayout;
 	import org.apache.flex.html.beads.layouts.VerticalLayout;
 	import org.apache.flex.html.beads.models.ArraySelectionModel;
 	import org.apache.flex.html.beads.models.DataGridPresentationModel;
 	import org.apache.flex.html.supportClasses.DataGridColumn;
+	import org.apache.flex.html.supportClasses.DataGridColumnList;
 	import org.apache.flex.html.supportClasses.ScrollingViewport;
 	import org.apache.flex.html.supportClasses.Viewport;
 
@@ -202,7 +202,7 @@ package org.apache.flex.html.beads
 				var xpos:Number = 0;
 				var listWidth:Number = host.width / _lists.length;
 				for (var i:int=0; i < _lists.length; i++) {
-					var list:List = _lists[i] as List;
+					var list:DataGridColumnList = _lists[i] as DataGridColumnList;
 					list.x = xpos;
 					list.y = 0;
 
@@ -229,7 +229,7 @@ package org.apache.flex.html.beads
 
 			for (var i:int=0; i < _lists.length; i++)
 			{
-				var list:List = _lists[i] as List;
+				var list:DataGridColumnList = _lists[i] as DataGridColumnList;
 				var listModel:ISelectionModel = list.getBeadByType(IBeadModel) as ISelectionModel;
 				listModel.dataProvider = sharedModel.dataProvider;
 			}
@@ -243,12 +243,12 @@ package org.apache.flex.html.beads
 		private function handleColumnListChange(event:Event):void
 		{
 			var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
-			var list:List = event.target as List;
+			var list:DataGridColumnList = event.target as DataGridColumnList;
 			sharedModel.selectedIndex = list.selectedIndex;
 
 			for(var i:int=0; i < _lists.length; i++) {
 				if (list != _lists[i]) {
-					var otherList:List = _lists[i] as List;
+					var otherList:DataGridColumnList = _lists[i] as DataGridColumnList;
 					otherList.selectedIndex = list.selectedIndex;
 				}
 			}
@@ -270,9 +270,8 @@ package org.apache.flex.html.beads
 			for (var i:int=0; i < sharedModel.columns.length; i++) {
 				var dataGridColumn:DataGridColumn = sharedModel.columns[i] as DataGridColumn;
 
-				var list:List = new List();
+				var list:DataGridColumnList = new DataGridColumnList();
 				list.id = "dataGridColumn"+String(i);
-				list.className = "DataGridColumn";
 				list.addBead(sharedModel);
 				list.itemRenderer = dataGridColumn.itemRenderer;
 				list.labelField = dataGridColumn.dataField;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/fd05c961/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as
new file mode 100644
index 0000000..bb0fa65
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as
@@ -0,0 +1,61 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.html.supportClasses
+{
+    import org.apache.flex.html.List;
+    
+    //--------------------------------------
+    //  Events
+    //--------------------------------------
+    
+    /**
+     *  @copy org.apache.flex.core.ISelectionModel#change
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+    [Event(name="change", type="org.apache.flex.events.Event")]
+    
+    /**
+     *  The DataGridColumnList class is the List class used internally
+     *  by DataGrid for each column.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+	public class DataGridColumnList extends List
+	{
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		public function DataGridColumnList()
+		{
+			super();
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/fd05c961/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/resources/basic-manifest.xml b/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
index ef80984..4fef715 100644
--- a/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
@@ -93,6 +93,7 @@
     <component id="DataGridButtonBarTextButton" class="org.apache.flex.html.DataGridButtonBarTextButton"/>
     <component id="DataGridColumn" class="org.apache.flex.html.supportClasses.DataGridColumn"/>
     <component id="DataGridLinesBead" class="org.apache.flex.html.beads.DataGridLinesBead"/>
+    <component id="DataGridColumnList" class="org.apache.flex.html.supportClasses.DataGridColumnList"/>
     
     <component id="DataItemRendererFactoryForArrayData" class="org.apache.flex.html.beads.DataItemRendererFactoryForArrayData" />
     <component id="DataItemRendererFactoryForArrayList" class="org.apache.flex.html.beads.DataItemRendererFactoryForArrayList" />

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/fd05c961/frameworks/projects/HTML/src/main/resources/defaults.css
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/resources/defaults.css b/frameworks/projects/HTML/src/main/resources/defaults.css
index 2610e53..dd9bf27 100644
--- a/frameworks/projects/HTML/src/main/resources/defaults.css
+++ b/frameworks/projects/HTML/src/main/resources/defaults.css
@@ -131,7 +131,7 @@ DataGridButtonBar
 	border-style: none;
 }
 
-.DataGridColumn {
+DataGridColumnList {
 	IBeadModel: ClassReference("org.apache.flex.html.beads.models.DataGridModel");
 	IBeadView:  ClassReference("org.apache.flex.html.beads.ListView");			
 	IBeadController: ClassReference("org.apache.flex.html.beads.controllers.ListSingleSelectionMouseController");


[05/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - also fix up nightly.properties

Posted by ha...@apache.org.
also fix up nightly.properties


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/755dd1e3
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/755dd1e3
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/755dd1e3

Branch: refs/heads/refactor-sprite
Commit: 755dd1e3b419c228c1778a3b90e81cbd5aa820ca
Parents: 909bd83
Author: Alex Harui <ah...@apache.org>
Authored: Fri Sep 9 13:03:38 2016 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Sep 9 13:03:38 2016 -0700

----------------------------------------------------------------------
 build.xml | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/755dd1e3/build.xml
----------------------------------------------------------------------
diff --git a/build.xml b/build.xml
index d484606..0195243 100644
--- a/build.xml
+++ b/build.xml
@@ -961,6 +961,9 @@
         <replace file="${FLEXJS_HOME}/build.properties"
             token="${old-version}"
             value="${new-version}" />
+        <replace file="${FLEXJS_HOME}/nightly.properties"
+            token="${old-version}"
+            value="${new-version}" />
         <replace file="${FLEXJS_HOME}/installer.xml"
             token="${old-version}"
             value="${new-version}" />


[20/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - New MobileStocks app. A work in progress so it is not connected to the examples build yet.

Posted by ha...@apache.org.
New MobileStocks app. A work in progress so it is not connected to the examples build yet.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/c1682af6
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/c1682af6
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/c1682af6

Branch: refs/heads/refactor-sprite
Commit: c1682af60f20a3a76dce40841fbb34d848baa1ff
Parents: 1dac615
Author: Peter Ent <pe...@apache.org>
Authored: Thu Sep 22 17:09:59 2016 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Thu Sep 22 17:09:59 2016 -0400

----------------------------------------------------------------------
 .../flexjs/MobileStocks/MobileStocks-app.xml    | 252 ++++++++++++++++
 examples/flexjs/MobileStocks/build-web.xml      |  61 ++++
 examples/flexjs/MobileStocks/build.xml          |  94 ++++++
 examples/flexjs/MobileStocks/pom.xml            |  94 ++++++
 .../flexjs/MobileStocks/src/MobileStocks.mxml   |  43 +++
 .../flexjs/MobileStocks/src/MyInitialView.mxml  | 264 +++++++++++++++++
 .../src/StockDataJSONItemConverter.as           |  40 +++
 .../MobileStocks/src/assets/arrow_left_24.png   | Bin 0 -> 47785 bytes
 .../MobileStocks/src/assets/background.png      | Bin 0 -> 49376 bytes
 .../flexjs/MobileStocks/src/assets/logo.png     | Bin 0 -> 55223 bytes
 .../src/controller/AlertsViewController.as      | 141 +++++++++
 .../src/controller/LaunchViewController.as      | 150 ++++++++++
 .../src/controller/WatchListController.as       | 139 +++++++++
 .../flexjs/MobileStocks/src/models/Alert.as     |  94 ++++++
 .../flexjs/MobileStocks/src/models/Asset.as     |  77 +++++
 .../MobileStocks/src/models/AssetsModel.as      |  57 ++++
 .../MobileStocks/src/models/ProductsModel.as    | 296 +++++++++++++++++++
 .../flexjs/MobileStocks/src/models/Stock.as     | 168 +++++++++++
 .../MobileStocks/src/renderers/AlertRenderer.as |  44 +++
 .../src/renderers/CompanyNameRenderer.as        |  37 +++
 .../src/renderers/SharesTotalRenderer.as        |  37 +++
 .../MobileStocks/src/renderers/StockRenderer.as |  47 +++
 .../MobileStocks/src/views/AlertsView.mxml      | 102 +++++++
 .../MobileStocks/src/views/AssetsView.mxml      | 125 ++++++++
 .../MobileStocks/src/views/LaunchView.mxml      | 161 ++++++++++
 .../MobileStocks/src/views/SearchView.mxml      |  37 +++
 .../MobileStocks/src/views/StockView.mxml       | 102 +++++++
 .../MobileStocks/src/views/WatchListView.mxml   | 154 ++++++++++
 28 files changed, 2816 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/MobileStocks-app.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/MobileStocks-app.xml b/examples/flexjs/MobileStocks/MobileStocks-app.xml
new file mode 100644
index 0000000..e673bc5
--- /dev/null
+++ b/examples/flexjs/MobileStocks/MobileStocks-app.xml
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!--
+
+  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.
+
+-->
+<application xmlns="http://ns.adobe.com/air/application/16.0">
+
+<!-- Adobe AIR Application Descriptor File Template.
+
+	Specifies parameters for identifying, installing, and launching AIR applications.
+
+	xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/3.8
+			The last segment of the namespace specifies the version
+			of the AIR runtime required for this application to run.
+
+	minimumPatchLevel - The minimum patch level of the AIR runtime required to run
+			the application. Optional.
+-->
+
+	<!-- A universally unique application identifier. Must be unique across all AIR applications.
+	Using a reverse DNS-style name as the id is recommended. (Eg. com.example.ExampleApplication.) Required. -->
+	<id>org.apache.flexjs.mobilestocks</id>
+
+	<!-- Used as the filename for the application. Required. -->
+	<filename>Apache FlexJS Mobile Stocks Example</filename>
+
+	<!-- The name that is displayed in the AIR application installer.
+	May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<name>Apache FlexJS Mobile Stocks Example</name>
+
+	<!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade.
+	Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
+	An updated version of application must have a versionNumber value higher than the previous version. Required for namespace >= 2.5 . -->
+	<versionNumber>0.8.0</versionNumber>
+
+	<!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. Optional. -->
+	<!-- <versionLabel></versionLabel> -->
+
+	<!-- Description, displayed in the AIR application installer.
+	May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<!-- <description></description> -->
+
+	<!-- Copyright information. Optional -->
+	<copyright>Copyright 2016 The Apache Software Foundation.</copyright>
+
+	<!-- Publisher ID. Used if you're updating an application created prior to 1.5.3 -->
+	<!-- <publisherID></publisherID> -->
+
+	<!-- Settings for the application's initial window. Required. -->
+	<initialWindow>
+		<!-- The main SWF or HTML file of the application. Required. -->
+		<!-- Note: In Flash Builder, the SWF reference is set automatically. -->
+		<content>MobileStocks.swf</content>
+
+		<!-- The title of the main window. Optional. -->
+		<!-- <title></title> -->
+
+		<!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
+		<!-- <systemChrome></systemChrome> -->
+
+		<!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
+		<!-- <transparent></transparent> -->
+
+		<!-- Whether the window is initially visible. Optional. Default false. -->
+		<!-- <visible></visible> -->
+
+		<!-- Whether the user can minimize the window. Optional. Default true. -->
+		<!-- <minimizable></minimizable> -->
+
+		<!-- Whether the user can maximize the window. Optional. Default true. -->
+		<!-- <maximizable></maximizable> -->
+
+		<!-- Whether the user can resize the window. Optional. Default true. -->
+		<!-- <resizable></resizable> -->
+
+		<!-- The window's initial width in pixels. Optional. -->
+		<width>640</width>
+
+		<!-- The window's initial height in pixels. Optional. -->
+		<height>720</height>
+
+		<!-- The window's initial x position. Optional. -->
+		<!-- <x></x> -->
+
+		<!-- The window's initial y position. Optional. -->
+		<!-- <y></y> -->
+
+		<!-- The window's minimum size, specified as a width/height pair in pixels, such as "400 200". Optional. -->
+		<!-- <minSize></minSize> -->
+
+		<!-- The window's initial maximum size, specified as a width/height pair in pixels, such as "1600 1200". Optional. -->
+		<!-- <maxSize></maxSize> -->
+
+        <!-- The initial aspect ratio of the app when launched (either "portrait" or "landscape"). Optional. Mobile only. Default is the natural orientation of the device -->
+
+        <!-- <aspectRatio></aspectRatio> -->
+
+        <!-- Whether the app will begin auto-orienting on launch. Optional. Mobile only. Default false -->
+
+        <!-- <autoOrients></autoOrients> -->
+
+        <!-- Whether the app launches in full screen. Optional. Mobile only. Default false -->
+
+        <!-- <fullScreen></fullScreen> -->
+
+        <!-- The render mode for the app (either auto, cpu, gpu, or direct). Optional. Default auto -->
+
+        <!-- <renderMode></renderMode> -->
+
+		<!-- Whether or not to pan when a soft keyboard is raised or lowered (either "pan" or "none").  Optional.  Defaults "pan." -->
+		<!-- <softKeyboardBehavior></softKeyboardBehavior> -->
+	<autoOrients>false</autoOrients>
+        <fullScreen>false</fullScreen>
+        <visible>true</visible>
+    </initialWindow>
+
+	<!-- We recommend omitting the supportedProfiles element, -->
+	<!-- which in turn permits your application to be deployed to all -->
+	<!-- devices supported by AIR. If you wish to restrict deployment -->
+	<!-- (i.e., to only mobile devices) then add this element and list -->
+	<!-- only the profiles which your application does support. -->
+	<!-- <supportedProfiles>desktop extendedDesktop mobileDevice extendedMobileDevice</supportedProfiles> -->
+	<supportedProfiles>extendedDesktop desktop</supportedProfiles>
+
+	<!-- The subpath of the standard default installation location to use. Optional. -->
+	<installFolder>Apache Flex</installFolder>
+
+	<!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
+	<programMenuFolder>Apache Flex</programMenuFolder>
+
+	<!-- The icon the system uses for the application. For at least one resolution,
+	specify the path to a PNG file included in the AIR package. Optional. -->
+	<icon>
+		<image16x16>assets/icons/16.png</image16x16>
+		<image29x29>assets/icons/29.png</image29x29>
+		<image32x32>assets/icons/32.png</image32x32>
+		<image36x36>assets/icons/36.png</image36x36>
+		<image48x48>assets/icons/48.png</image48x48>
+		<image57x57>assets/icons/57.png</image57x57>
+		<image72x72>assets/icons/72.png</image72x72>
+		<image114x114>assets/icons/114.png</image114x114>
+		<image128x128>assets/icons/128.png</image128x128>
+	</icon>
+
+	<!-- Whether the application handles the update when a user double-clicks an update version
+	of the AIR file (true), or the default AIR application installer handles the update (false).
+	Optional. Default false. -->
+	<!-- <customUpdateUI></customUpdateUI> -->
+
+	<!-- Whether the application can be launched when the user clicks a link in a web browser.
+	Optional. Default false. -->
+	<!-- <allowBrowserInvocation></allowBrowserInvocation> -->
+
+	<!-- Listing of file types for which the application can register. Optional. -->
+	<!-- <fileTypes> -->
+
+		<!-- Defines one file type. Optional. -->
+		<!-- <fileType> -->
+
+			<!-- The name that the system displays for the registered file type. Required. -->
+			<!-- <name></name> -->
+
+			<!-- The extension to register. Required. -->
+			<!-- <extension></extension> -->
+
+			<!-- The description of the file type. Optional. -->
+			<!-- <description></description> -->
+
+			<!-- The MIME content type. -->
+			<!-- <contentType></contentType> -->
+
+			<!-- The icon to display for the file type. Optional. -->
+			<!-- <icon>
+				<image16x16></image16x16>
+				<image32x32></image32x32>
+				<image48x48></image48x48>
+				<image128x128></image128x128>
+			</icon> -->
+
+		<!-- </fileType> -->
+	<!-- </fileTypes> -->
+
+    <!-- iOS specific capabilities -->
+	<!-- <iPhone> -->
+		<!-- A list of plist key/value pairs to be added to the application Info.plist -->
+		<!-- <InfoAdditions>
+            <![CDATA[
+                <key>UIDeviceFamily</key>
+                <array>
+                    <string>1</string>
+                    <string>2</string>
+                </array>
+                <key>UIStatusBarStyle</key>
+                <string>UIStatusBarStyleBlackOpaque</string>
+                <key>UIRequiresPersistentWiFi</key>
+                <string>YES</string>
+            ]]>
+        </InfoAdditions> -->
+        <!-- A list of plist key/value pairs to be added to the application Entitlements.plist -->
+		<!-- <Entitlements>
+            <![CDATA[
+                <key>keychain-access-groups</key>
+                <array>
+                    <string></string>
+                    <string></string>
+                </array>
+            ]]>
+        </Entitlements> -->
+	<!-- Display Resolution for the app (either "standard" or "high"). Optional. Default "standard" -->
+	<!-- <requestedDisplayResolution></requestedDisplayResolution> -->
+	<!-- </iPhone> -->
+
+	<!-- Specify Android specific tags that get passed to AndroidManifest.xml file. -->
+    <!--<android> -->
+    <!--	<manifestAdditions>
+		<![CDATA[
+			<manifest android:installLocation="auto">
+				<uses-permission android:name="android.permission.INTERNET"/>
+				<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+				<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+				<uses-feature android:required="true" android:name="android.hardware.touchscreen.multitouch"/>
+				<application android:enabled="true">
+					<activity android:excludeFromRecents="false">
+						<intent-filter>
+							<action android:name="android.intent.action.MAIN"/>
+							<category android:name="android.intent.category.LAUNCHER"/>
+						</intent-filter>
+					</activity>
+				</application>
+            </manifest>
+		]]>
+        </manifestAdditions> -->
+	    <!-- Color depth for the app (either "32bit" or "16bit"). Optional. Default 16bit before namespace 3.0, 32bit after -->
+        <!-- <colorDepth></colorDepth> -->
+    <!-- </android> -->
+	<!-- End of the schema for adding the android specific tags in AndroidManifest.xml file -->
+
+</application>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/build-web.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/build-web.xml b/examples/flexjs/MobileStocks/build-web.xml
new file mode 100644
index 0000000..6892dc0
--- /dev/null
+++ b/examples/flexjs/MobileStocks/build-web.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0"?>
+<!--
+
+  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.
+
+-->
+
+
+<project name="mobilestocks" default="main" basedir=".">
+    <property name="FLEXJS_HOME" location="../../.."/>
+    <property name="example" value="MobileStocks" />
+    
+    <property environment="env"/>
+    <property file="${FLEXJS_HOME}/build.properties"/>
+    <property name="FLEX_HOME" value="${FLEXJS_HOME}"/>
+    <property name="opt1_arg" value="-remove-circulars" />
+    
+    <include file="${basedir}/../../build_example.xml" />
+
+    <condition property="extlib_arg" value="-external-library-path=${FLEXJS_HOME}/js/libs/js.swc" >
+        <and>
+            <not>
+                <isset property="extlib_arg" />
+            </not>
+            <available file="${FLEXJS_HOME}/js/libs/js.swc" type="file" />
+        </and>
+    </condition>
+    <condition property="extlib_arg" value="-external-library-path=${FALCONJX_HOME}/../js/libs/js.swc" >
+        <and>
+            <not>
+                <isset property="extlib_arg" />
+            </not>
+            <available file="${FALCONJX_HOME}/../js/libs/js.swc" type="file" />
+        </and>
+    </condition>
+    <property name="extlib_arg" value="-external-library-path=${FALCONJX_HOME}/../externs/js/out/bin/js.swc"/>
+
+    <target name="main" depends="clean,build_example.compile,build_example.compilejs" description="Clean build of ${example}">
+    </target>
+    
+    <target name="clean">
+        <delete dir="${basedir}/bin" failonerror="false" />
+        <delete dir="${basedir}/bin-debug" failonerror="false" />
+        <delete dir="${basedir}/bin-release" failonerror="false" />
+        <delete dir="${basedir}/target" failonerror="false" />
+    </target>
+    
+</project>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/build.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/build.xml b/examples/flexjs/MobileStocks/build.xml
new file mode 100644
index 0000000..62d465e
--- /dev/null
+++ b/examples/flexjs/MobileStocks/build.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0"?>
+<!--
+
+  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.
+
+-->
+
+
+<project name="mobilestocks" default="main" basedir=".">
+    <property name="FLEXJS_HOME" location="../../.."/>
+    <property name="example" value="MobileStocks" />
+    
+    <!-- this project needs AIR 3.4 FP 11.4 -->
+    <property name="swf.version" value="17" />
+    <property name="playerglobal.version" value="11.4" />
+    
+    <property file="${FLEXJS_HOME}/env.properties"/>
+    <property environment="env"/>
+    <property file="${FLEXJS_HOME}/build.properties"/>
+    <property name="FLEX_HOME" value="${FLEXJS_HOME}"/>
+    <property name="AIR_HOME" value="${env.AIR_HOME}"/>
+    
+    <condition property="adl" value="adl.exe">
+        <os family="windows"/>
+    </condition>
+    
+    <condition property="adl" value="adl">
+        <os family="mac"/>
+    </condition>
+    
+    <condition property="runtime" value="win">
+        <os family="windows"/>
+    </condition>
+    
+    <condition property="runtime" value="mac">
+        <os family="mac"/>
+    </condition>
+
+    <include file="${basedir}/../../build_example.xml" />
+
+    <condition property="extlib_arg" value="-external-library-path=${FLEXJS_HOME}/js/libs/cordova.swc" >
+        <and>
+            <not>
+                <isset property="extlib_arg" />
+            </not>
+            <available file="${FLEXJS_HOME}/js/libs/cordova.swc" type="file" />
+        </and>
+    </condition>
+    <condition property="extlib_arg" value="-external-library-path=${FALCONJX_HOME}/../js/libs/cordova.swc" >
+        <and>
+            <not>
+                <isset property="extlib_arg" />
+            </not>
+            <available file="${FALCONJX_HOME}/../js/libs/cordova.swc" type="file" />
+        </and>
+    </condition>
+    <property name="extlib_arg" value="-external-library-path=${FALCONJX_HOME}/../externs/cordova/out/bin/cordova.swc"/>
+    <property name="opt1_arg" value="-remove-circulars" />
+
+<!-- build_example.compileair, -->
+    <target name="main" depends="clean,build_example.compileair,build_example.compilejsair" description="Clean build of ${example}">
+    </target>
+    
+    <target name="clean">
+        <echo>playerglobal.version = ${playerglobal.version}</echo>
+        <delete dir="${basedir}/bin" failonerror="false" />
+        <delete dir="${basedir}/bin-debug" failonerror="false" />
+        <delete dir="${basedir}/bin-release" failonerror="false" />
+        <delete dir="${basedir}/target" failonerror="false" />
+    </target>
+    
+    <target name="run">
+        <exec executable="${AIR_HOME}/bin/${adl}" dir="${basedir}/bin-debug" failonerror="true">
+            <arg value="-runtime" />
+            <arg value="${AIR_HOME}/runtimes/air/${runtime}" />
+            <arg value="-profile" />
+            <arg value="extendedDesktop" />
+            <arg value="${basedir}/bin-debug/${example}-app.xml" />
+        </exec>
+    </target>
+</project>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/pom.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/pom.xml b/examples/flexjs/MobileStocks/pom.xml
new file mode 100644
index 0000000..7868f63
--- /dev/null
+++ b/examples/flexjs/MobileStocks/pom.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <!--
+        TODO:
+          Flash Version:
+            Missing resources
+  -->
+
+  <parent>
+    <groupId>org.apache.flex.flexjs.examples</groupId>
+    <artifactId>examples-flexjs</artifactId>
+    <version>0.8.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>MobileStocks</artifactId>
+  <version>0.8.0-SNAPSHOT</version>
+  <packaging>swf</packaging>
+
+  <name>Apache Flex - FlexJS: Examples: FlexJS: MobileStocks</name>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.flex.flexjs.compiler</groupId>
+        <artifactId>flexjs-maven-plugin</artifactId>
+        <extensions>true</extensions>
+        <configuration>
+          <mainClass>MobileStocks.mxml</mainClass>
+          <removeCirculars>true</removeCirculars>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-war-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>com.adobe.flash.framework</groupId>
+      <artifactId>playerglobal</artifactId>
+      <version>${flash.version}</version>
+      <type>swc</type>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.flex.flexjs.framework</groupId>
+      <artifactId>Charts</artifactId>
+      <version>0.8.0-SNAPSHOT</version>
+      <type>swc</type>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.flex.flexjs.framework</groupId>
+      <artifactId>Mobile</artifactId>
+      <version>0.8.0-SNAPSHOT</version>
+      <type>swc</type>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.flex.flexjs.framework</groupId>
+      <artifactId>Network</artifactId>
+      <version>0.8.0-SNAPSHOT</version>
+      <type>swc</type>
+    </dependency>
+  </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/MobileStocks.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/MobileStocks.mxml b/examples/flexjs/MobileStocks/src/MobileStocks.mxml
new file mode 100755
index 0000000..5b208ba
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/MobileStocks.mxml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!---
+//
+//  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.
+//
+////////////////////////////////////////////////////////////////////////////////
+-->
+<js:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+				   xmlns:local="*"
+				   xmlns:models="models.*"
+				   xmlns:js="library://ns.apache.org/flexjs/basic"  
+				   >
+	
+	<js:valuesImpl>
+		<js:SimpleCSSValuesImpl />
+	</js:valuesImpl>
+	
+	<js:model>
+		<models:ProductsModel />
+	</js:model>
+	
+	<js:initialView>
+	   <local:MyInitialView width="100%" height="100%" />
+	</js:initialView>
+	
+	<js:beads>
+		<js:MixinManager />
+	</js:beads>
+	
+</js:Application>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/MyInitialView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/MyInitialView.mxml b/examples/flexjs/MobileStocks/src/MyInitialView.mxml
new file mode 100755
index 0000000..11873b1
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/MyInitialView.mxml
@@ -0,0 +1,264 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+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.
+
+-->
+<js:View xmlns:fx="http://ns.adobe.com/mxml/2009"
+				xmlns:local="*"
+				xmlns:js="library://ns.apache.org/flexjs/basic"
+				xmlns:views="views.*" 
+				xmlns:apache="org.apache.flex.html.beads.*"
+				xmlns:html="org.apache.flex.html.*"
+				xmlns:controller="controller.*"
+				initComplete="onInitComplete()" xmlns:models="models.*" >
+	
+	<fx:Style>
+		@namespace js  "library://ns.apache.org/flexjs/basic";
+		@namespace views  "views.*";
+		
+		js|Container {
+			background-color: #FFFFFF;
+		}
+		
+		js|StackedViewManager {
+			padding-top: 0px;
+			padding-bottom: 0px;
+			padding-left: 0px;
+			padding-right: 0px;
+		}
+		
+		js|TabbedViewManager {
+			position : absolute ;
+			height : 100% ;
+			width : 100% ;
+			left : 0px ;
+			top : 0px ;
+			border: solid 1px #444444;
+			background-color: #FFFFFF;
+		}
+		
+		.NavigationBar {
+			background-image: url("assets/background.png");
+			height: 55px;
+			IBeadLayout: ClassReference("org.apache.flex.html.beads.layouts.HorizontalLayout");
+		}
+		
+		.TabBar {
+			background-color: #DEDEDE;
+			height: 55px;
+			vertical-align: middle;
+			line-height: 55px;
+		}
+		
+		.BackButton:hover {
+			background-image: url('assets/arrow_left_24.png');
+		}
+		
+		.BackButton:active {
+			background-image: url('assets/arrow_left_24.png');
+		}
+		
+		.BackButton {
+			background-image: url('assets/arrow_left_24.png');
+		}
+		
+		.AssetsInner {
+			padding-top: 5px;
+			background-color: #FFFFFF;
+		}
+		
+		views|AssetsView {
+			width: 100%;
+			height: 100%;
+		}
+		
+		views|LaunchView {
+			width: 100%;
+			height: 100%;
+			IBeadController:ClassReference('controller.LaunchViewController');
+			background-color: #FFFFFF;
+		}
+		
+		views|WatchListView {
+			width: 100%;
+			height: 100%;
+			IBeadController:ClassReference('controller.WatchListController');
+			background-color: #FFFFFF;
+		}
+		
+		.WatchListInner {
+			height: 480px;
+			width:  100%;
+			background-color: #FFFFFF;
+		}
+		
+		.WatchListDataGrid {
+			height: 480px;
+			width:  100%;
+		}
+		
+		.WatchListInputArea {
+			background-color: #FFFFFF;
+			width: 480px;
+			height: 25px;
+			padding-top: 5px;
+			padding-bottom: 2px;
+		}
+		
+		views|StockView {
+			width: 100%;
+			height: 100%;
+		}
+		
+		views|AlertsView {
+			width: 100%;
+			height: 100%;
+			IBeadController:ClassReference('controller.AlertsViewController');
+		}
+		
+		.redCell {
+			color: #FF0000;
+		}
+		
+		.greenCell {
+			color: #00FF00;
+		}
+		
+		.ViewTitle {
+			font-size: 18pt;
+			font-weight: bold;
+			padding: 10pt;
+		}
+		
+		.StockName {
+			font-size: 14pt;
+			font-weight: normal;
+			padding: 10pt;
+		}
+		
+		.StockDetailArea {
+			padding: 10pt;
+		}
+		
+		.StockLabel {
+			font-size: 18pt;
+			font-weight: normal;
+			color: #2255DD;
+		}
+		
+		.StockRemoveButton {
+			background-color: #FF5522;
+			font-size: 16pt;
+			font-weight: bold;
+			color: #FFFFFF;
+			width: 200px;
+			height: 50px;
+		}
+		
+		.StockRemoveButton:hover {
+			background-color: #DD3300;
+		}
+		
+		.StockValue {
+			font-size: 18pt;
+			font-weight: normal;
+			color: #999999;
+		}
+		
+		@media -flex-flash
+		{
+			.NavigationBar {
+				IBackgroundBead: ClassReference("org.apache.flex.html.beads.BackgroundImageBead");
+			}
+		}
+		
+	</fx:Style>
+	
+	<fx:Script>
+		<![CDATA[
+			import org.apache.flex.core.IBeadController;
+			import org.apache.flex.core.IBeadModel;
+			import org.apache.flex.events.Event;
+			import org.apache.flex.mobile.IViewManagerView;
+			import org.apache.flex.mobile.IViewManager;
+			import org.apache.flex.mobile.chrome.NavigationBar;
+			
+			import models.ProductsModel;
+			
+			private function onInitComplete():void
+			{
+				(applicationModel as ProductsModel).loadDataFromStorage();
+			}
+			
+			private function onAssetsNext():void
+			{
+				
+			}
+			
+			private function tabbedViewChanged(event:org.apache.flex.events.Event):void
+			{
+				var manager:IViewManager = event.currentTarget as IViewManager;
+				trace("TabbedViewChanged for "+manager);
+			}
+			
+			private function watchListStackChanged(event:org.apache.flex.events.Event):void
+			{
+				trace("watchlist stack changed");
+				var manager:StackedViewManager = event.currentTarget as StackedViewManager;
+				
+				var currentView:IViewManagerView = manager.selectedView;
+				backButton.visible = manager.views.length > 1;
+			}
+			
+			private function goBack(event:org.apache.flex.events.MouseEvent):void
+			{
+				if (navController.selectedIndex == 1) {
+					watchListStack.pop();
+				}
+			}
+		]]>
+	</fx:Script>
+	
+	<js:beads>
+		<js:ViewDataBinding />
+	</js:beads>
+	
+	<js:TabbedViewManager id="navController" width="100%" height="100%" x="0" y="0" viewChanged="tabbedViewChanged(event)">
+		<js:navigationBarItems>
+			<js:TextButton id="backButton" width="45" height="45" className="BackButton" visible="false" click="goBack(event)">
+				<js:beads>
+					<apache:ImageButtonView />
+				</js:beads>
+			</js:TextButton>
+			<js:Image source="assets/logo.png" width="218" height="55" />
+		</js:navigationBarItems>
+		<js:views>
+			<js:StackedViewManager title="Assets">
+				<js:views>
+					<views:LaunchView id="assetsView" title="Assets" next="onAssetsNext()" dataModel="{applicationModel}" />
+				</js:views>
+			</js:StackedViewManager>
+			
+			<js:StackedViewManager id="watchListStack" title="Watch List" viewChanged="watchListStackChanged(event)">
+				<js:views>
+					<views:WatchListView id="watchListView" dataModel="{applicationModel}"/>
+				</js:views>
+			</js:StackedViewManager>
+		</js:views>
+	</js:TabbedViewManager>
+	
+</js:View>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/StockDataJSONItemConverter.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/StockDataJSONItemConverter.as b/examples/flexjs/MobileStocks/src/StockDataJSONItemConverter.as
new file mode 100755
index 0000000..5c21c26
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/StockDataJSONItemConverter.as
@@ -0,0 +1,40 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+{    
+    import org.apache.flex.collections.converters.JSONItemConverter;
+    
+    public class StockDataJSONItemConverter extends JSONItemConverter
+    {
+        public function StockDataJSONItemConverter()
+        {
+            super();
+        }
+        
+        override public function convertItem(data:String):Object
+        {
+            var obj:Object = super.convertItem(data);
+			if (obj["query"]["count"] == 0)
+				return "No Data";
+			
+			obj = obj["query"]["results"]["quote"];
+			return obj;
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/assets/arrow_left_24.png
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/assets/arrow_left_24.png b/examples/flexjs/MobileStocks/src/assets/arrow_left_24.png
new file mode 100755
index 0000000..a3019ba
Binary files /dev/null and b/examples/flexjs/MobileStocks/src/assets/arrow_left_24.png differ

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/assets/background.png
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/assets/background.png b/examples/flexjs/MobileStocks/src/assets/background.png
new file mode 100755
index 0000000..87bbd59
Binary files /dev/null and b/examples/flexjs/MobileStocks/src/assets/background.png differ

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/assets/logo.png
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/assets/logo.png b/examples/flexjs/MobileStocks/src/assets/logo.png
new file mode 100755
index 0000000..0fb0f21
Binary files /dev/null and b/examples/flexjs/MobileStocks/src/assets/logo.png differ

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/controller/AlertsViewController.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/controller/AlertsViewController.as b/examples/flexjs/MobileStocks/src/controller/AlertsViewController.as
new file mode 100644
index 0000000..76f230a
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/controller/AlertsViewController.as
@@ -0,0 +1,141 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 controller
+{
+	import models.Alert;
+	import models.ProductsModel;
+	import models.Stock;
+	
+	import org.apache.flex.core.IBeadController;
+	import org.apache.flex.core.IBeadModel;
+	import org.apache.flex.core.IStrand;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.EventDispatcher;
+	import org.apache.flex.utils.Timer;
+	import org.apache.flex.collections.ArrayList;
+	
+	import views.AlertsView;
+	
+	public class AlertsViewController extends EventDispatcher implements IBeadController
+	{
+		public function AlertsViewController()
+		{
+			super();
+			
+			timer = new Timer(updateInterval, 0);
+			timer.addEventListener("timer", timerHandler);
+		}
+		
+		public var updateInterval:Number = 5000;
+		
+		protected var timer:Timer;
+			
+		private var _strand:IStrand;
+		
+		public function set strand(value:IStrand):void
+		{
+			_strand = value;
+			
+			var view:AlertsView = value as AlertsView;
+			view.addEventListener("alertSet", handleAlertSet);
+		}
+		
+		private var _model:IBeadModel;
+		public function set model(value:IBeadModel):void
+		{
+			_model = value;
+		}
+		public function get model():IBeadModel
+		{
+			return _model;
+		}
+		
+		private function handleAlertSet(event:Event):void
+		{
+			var view:AlertsView = _strand as AlertsView;
+			
+			var sym:String = view.symbolField.text.toUpperCase();
+			var value:Number = Number(view.valueField.text);
+			
+			var alert:Alert = new Alert();
+			alert.symbol = sym;
+			alert.value = value;
+			alert.greaterThan = view.higherCheck.selected;
+			
+			// add this stock to the watch list in case it isn't there already
+			alert.stock = (model as ProductsModel).addStockToWatchList(sym);
+			
+			// set up the alert for the stock
+			(model as ProductsModel).addAlert(alert);
+			
+			view.symbolField.text = "";
+			view.valueField.text = "";
+			
+			subscribe();
+		}
+		
+		public function subscribe():void
+		{
+			if (!timer.running) 
+			{
+				timer.start();
+			}
+		}
+		
+		public function unsubscribe():void
+		{
+			if (timer.running) 
+			{
+				timer.stop();
+			}
+		}
+		
+		/**
+		 * When the timer goes off, verify all of the alerts against each stocks' last
+		 * price.
+		 */
+		protected function timerHandler(event:*):void
+		{
+			var alerts:ArrayList = (model as ProductsModel).alerts;
+			
+			if (alerts.length == 0) return;
+			
+			for (var i:int=0; i < alerts.length; i++)
+			{
+				var alert:Alert = alerts.getItemAt(i) as Alert;
+				alert.message = "";
+				
+				if (alert.greaterThan) {
+					if (alert.stock.last >= alert.value) {
+						alert.message = "Now @"+alert.stock.last;
+					}
+				}
+				else {
+					if (alert.stock.last <= alert.value) {
+						alert.message = "Now @"+alert.stock.last;
+					}
+				}
+				alerts.itemUpdatedAt(i);
+			}
+			
+			var newEvent:Event = new Event("alertsUpdate");
+			model.dispatchEvent(newEvent);
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/controller/LaunchViewController.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/controller/LaunchViewController.as b/examples/flexjs/MobileStocks/src/controller/LaunchViewController.as
new file mode 100644
index 0000000..2b88d26
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/controller/LaunchViewController.as
@@ -0,0 +1,150 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 controller
+{
+	import models.ProductsModel;
+	import models.Stock;
+
+	import org.apache.flex.core.IBeadController;
+	import org.apache.flex.core.IBeadModel;
+	import org.apache.flex.core.IStrand;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.EventDispatcher;
+	import org.apache.flex.utils.Timer;
+	import org.apache.flex.collections.ArrayList;
+
+	import views.LaunchView;
+
+	public class LaunchViewController extends EventDispatcher implements IBeadController
+	{
+		public function LaunchViewController()
+		{
+			super();
+
+			timer = new Timer(updateInterval, 0);
+			timer.addEventListener("timer", timerHandler);
+		}
+
+		public var updateInterval:Number = 5000;
+
+		protected var timer:Timer;
+
+		private var index:Number = 0;
+		private var selectedStock:Stock;
+		private var _strand:IStrand;
+
+		public function set strand(value:IStrand):void
+		{
+			_strand = value;
+
+			var view:LaunchView = value as LaunchView;
+			view.addEventListener("addSymbol", handleAddSymbol);
+			view.addEventListener("removeSymbol", handleRemoveSymbol);
+			view.addEventListener("symbolSelected", handleGridSelection);
+		}
+
+		private var _model:IBeadModel;
+		public function set model(value:IBeadModel):void
+		{
+			_model = value;
+		}
+		public function get model():IBeadModel
+		{
+			return _model;
+		}
+
+		private function handleAddSymbol(event:Event):void
+		{
+			var view:LaunchView = _strand as LaunchView;
+			var symbol:String = view.symbolInput.text.toUpperCase();
+			var shares:Number = Number(view.sharesInput.text);
+			if (isNaN(shares) || shares < 0) shares = 0;
+
+			(model as ProductsModel).addStockToAssetList(symbol, shares);
+			(model as ProductsModel).saveDataToStorage();
+
+			subscribe();
+
+			view.symbolInput.text = "";
+			view.sharesInput.text = "";
+			view.addButton.text = "Add";
+		}
+
+		private function handleGridSelection(event:Event):void
+		{
+			var view:LaunchView = _strand as LaunchView;
+			var index:int = view.assetGrid.selectedIndex;
+			var data:Object = (model as ProductsModel).assetList.getItemAt(index);
+			view.symbolInput.text = data.symbol;
+			view.sharesInput.text = String(data.shares);
+
+			view.addButton.text = "Change";
+		}
+
+		public function handleRemoveSymbol(event:Event):void
+		{
+			var view:LaunchView = _strand as LaunchView;
+			var index:int = view.assetGrid.selectedIndex;
+			if (index < 0) return;
+
+			(model as ProductsModel).removeStockFromAssetListAtIndex(index);
+
+			view.symbolInput.text = "";
+			view.sharesInput.text = "";
+
+			view.addButton.text = "Add";
+		}
+
+		public function subscribe():void
+		{
+			if (!timer.running)
+			{
+				timer.start();
+			}
+		}
+
+		public function unsubscribe():void
+		{
+			if (timer.running)
+			{
+				timer.stop();
+			}
+		}
+
+		/**
+		 * Each time the handler goes off a different stock in the list
+		 * is updated. This keeps the app from sending too many requests
+		 * all at once.
+		 */
+		protected function timerHandler(event:*):void
+		{
+			var stockList:ArrayList = (model as ProductsModel).assetList;
+
+			if (stockList.length == 0) return;
+
+			if (index >= stockList.length) index = 0;
+
+			(model as ProductsModel).updateStockData(stockList.getItemAt(index) as Stock);
+			index++;
+
+			var newEvent:Event = new Event("update");
+			model.dispatchEvent(newEvent);
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/controller/WatchListController.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/controller/WatchListController.as b/examples/flexjs/MobileStocks/src/controller/WatchListController.as
new file mode 100644
index 0000000..0d94e5f
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/controller/WatchListController.as
@@ -0,0 +1,139 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 controller
+{
+	import models.ProductsModel;
+	import models.Stock;
+
+	import org.apache.flex.core.IBeadController;
+	import org.apache.flex.core.IBeadModel;
+	import org.apache.flex.core.IStrand;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.EventDispatcher;
+	import org.apache.flex.utils.Timer;
+	import org.apache.flex.collections.ArrayList;
+
+	import views.StockView;
+	import views.WatchListView;
+
+	public class WatchListController extends EventDispatcher implements IBeadController
+	{
+		public function WatchListController()
+		{
+			super();
+
+			timer = new Timer(updateInterval, 0);
+			timer.addEventListener("timer", timerHandler);
+		}
+
+		public var updateInterval:Number = 5000;
+
+		protected var timer:Timer;
+
+		private var index:Number = 0;
+		private var selectedStock:Stock;
+		private var _strand:IStrand;
+
+		public function set strand(value:IStrand):void
+		{
+			_strand = value;
+
+			var view:WatchListView = value as WatchListView;
+			view.addEventListener("addSymbol", handleAddSymbol);
+			view.addEventListener("stockSelected", handleGridSelection);
+		}
+
+		private var _model:IBeadModel;
+		public function set model(value:IBeadModel):void
+		{
+			_model = value;
+		}
+		public function get model():IBeadModel
+		{
+			return _model;
+		}
+
+		private function handleAddSymbol(event:Event):void
+		{
+			var view:WatchListView = _strand as WatchListView;
+			var symbol:String = view.symbolName.text.toUpperCase();
+
+			view.symbolName.text = "";
+
+			(model as ProductsModel).addStockToWatchList(symbol);
+			(model as ProductsModel).saveDataToStorage();
+
+			subscribe();
+		}
+
+		private function handleGridSelection(event:Event):void
+		{
+			var view:WatchListView = _strand as WatchListView;
+			selectedStock = (model as ProductsModel).watchList.getItemAt(view.selectedStockIndex) as Stock;
+			trace("Selected stock "+selectedStock.symbol);
+
+			var stockView:StockView = view.showStockDetails(selectedStock);
+			stockView.addEventListener("removeFromList", handleRemoveFromList);
+		}
+
+		public function handleRemoveFromList(event:Event):void
+		{
+			(model as ProductsModel).removeStockFromWatchList(selectedStock);
+
+			var view:WatchListView = _strand as WatchListView;
+			view.popView();
+		}
+
+		public function subscribe():void
+		{
+			if (!timer.running)
+			{
+				timer.start();
+			}
+		}
+
+		public function unsubscribe():void
+		{
+			if (timer.running)
+			{
+				timer.stop();
+			}
+		}
+
+		/**
+		 * Each time the handler goes off a different stock in the list
+		 * is updated. This keeps the app from sending too many requests
+		 * all at once.
+		 */
+		protected function timerHandler(event:*):void
+		{
+			var stockList:ArrayList = (model as ProductsModel).watchList;
+
+			if (stockList.length == 0) return;
+
+			if (index >= stockList.length) index = 0;
+
+			(model as ProductsModel).updateStockData(stockList.getItemAt(index) as Stock);
+			index++;
+
+			var newEvent:Event = new Event("update");
+			model.dispatchEvent(newEvent);
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/models/Alert.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/models/Alert.as b/examples/flexjs/MobileStocks/src/models/Alert.as
new file mode 100644
index 0000000..7b9dc8b
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/models/Alert.as
@@ -0,0 +1,94 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 models
+{
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.EventDispatcher;
+
+	public class Alert extends EventDispatcher
+	{
+		public function Alert()
+		{
+			super();
+			message = "";
+		}
+		
+		private var _symbol:String;
+		private var _value:Number;
+		private var _greaterThan:Boolean;
+		private var _message:String;
+		private var _stock:Stock;
+		
+		[Binding("symbolChanged")]
+		public function get symbol():String
+		{
+			return _symbol;
+		}
+		public function set symbol(value:String):void
+		{
+			_symbol = value;
+			dispatchEvent(new Event("symbolChanged"));
+		}
+		
+		[Binding("messageChanged")]
+		public function get message():String
+		{
+			return _message;
+		}
+		public function set message(value:String):void
+		{
+			_message = value;
+			dispatchEvent(new Event("messageChanged"));
+		}
+		
+		[Binding("valueChanged")]
+		public function get value():Number
+		{
+			return _value;
+		}
+		public function set value(newValue:Number):void
+		{
+			_value = newValue;
+			dispatchEvent(new Event("valueChanged"));
+		}
+		
+		[Binding("greaterThanChanged")]
+		public function get greaterThan():Boolean
+		{
+			return _greaterThan;
+		}
+		public function set greaterThan(value:Boolean):void
+		{
+			_greaterThan = value;
+			dispatchEvent(new Event("greaterThanChanged"));
+		}
+		
+		[Binding("stockChanged")]
+		public function get stock():Stock
+		{
+			return _stock;
+		}
+		public function set stock(value:Stock):void
+		{
+			_stock = value;
+			dispatchEvent(new Event("stockChanged"));
+		}
+		
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/models/Asset.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/models/Asset.as b/examples/flexjs/MobileStocks/src/models/Asset.as
new file mode 100644
index 0000000..869ba72
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/models/Asset.as
@@ -0,0 +1,77 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 models
+{
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.EventDispatcher;
+
+	public class Asset extends EventDispatcher
+	{
+		private var _label:String;
+		private var _value:Number;
+		private var _netChange:Number;
+
+		public function Asset(newLabel:String, newValue:Number, newNetChange:Number)
+		{
+			_label = newLabel;
+			_value = newValue;
+			_netChange = newNetChange;
+		}
+
+		[Bindable("labelChanged")]
+		public function get label():String
+		{
+			return _label;
+		}
+		public function set label(value:String):void
+		{
+			if (value != _label) {
+				_label = value;
+			dispatchEvent(new Event("labelChanged"));
+			}
+		}
+
+		[Bindable("valueChanged")]
+		public function get value():Number
+		{
+			return _value;
+		}
+		public function set value(newValue:Number):void
+		{
+			if (_value != newValue) {
+				_value = newValue;
+			dispatchEvent(new Event("valueChanged"));
+			}
+		}
+
+		[Bindable("netChangeChanged")]
+		public function get netChange():Number
+		{
+			return _netChange;
+		}
+		public function set netChange(value:Number):void
+		{
+			if (_netChange != value) {
+				_netChange = value;
+			dispatchEvent(new Event("netChangeChanged"));
+			}
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/models/AssetsModel.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/models/AssetsModel.as b/examples/flexjs/MobileStocks/src/models/AssetsModel.as
new file mode 100755
index 0000000..3d72137
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/models/AssetsModel.as
@@ -0,0 +1,57 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 models
+{
+	import org.apache.flex.core.IBeadModel;
+	import org.apache.flex.core.IStrand;
+	import org.apache.flex.events.EventDispatcher;
+	import org.apache.flex.collections.ArrayList;
+
+	public class AssetsModel extends EventDispatcher implements IBeadModel
+	{
+		public function AssetsModel()
+		{
+			super();
+			_assetsData = new ArrayList();
+			_assetsData.source = source;
+		}
+		private var source:Array = [
+			new Asset("NetWorth:", 161984, 2.36),
+			new Asset("Last Month:", 165915, 10.98),
+			new Asset("6 Months Ago:", 145962, 16.56),
+			new Asset("Last Year:", 138972, 8.36)
+		];
+		private var _assetsData:ArrayList;
+
+		public function get assetsData():ArrayList
+		{
+			return _assetsData;
+		}
+
+		public function get assetsDataAsArray():Array
+		{
+		    return source;
+		}
+
+		public function set strand(value:IStrand):void
+		{
+			// not used
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/models/ProductsModel.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/models/ProductsModel.as b/examples/flexjs/MobileStocks/src/models/ProductsModel.as
new file mode 100755
index 0000000..91bc792
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/models/ProductsModel.as
@@ -0,0 +1,296 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 models
+{
+	import org.apache.flex.core.IBeadModel;
+	import org.apache.flex.core.IStrand;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.EventDispatcher;
+	import org.apache.flex.net.HTTPService;
+	import org.apache.flex.collections.parsers.JSONInputParser;
+	import org.apache.flex.collections.LazyCollection;
+	import org.apache.flex.collections.ArrayList;
+
+	import org.apache.flex.storage.PermanentStorage;
+	import org.apache.flex.storage.events.FileEvent;
+	import org.apache.flex.storage.events.FileErrorEvent;
+
+	public class ProductsModel extends EventDispatcher implements IBeadModel
+	{
+		public function ProductsModel()
+		{
+			super();
+
+			service = new HTTPService();
+			collection = new LazyCollection;
+			collection.inputParser = new JSONInputParser();
+			collection.itemConverter = new StockDataJSONItemConverter();
+
+			_watchList = new ArrayList();
+			_assetList = new ArrayList();
+		}
+
+		public function loadDataFromStorage():void
+		{
+			var storage:PermanentStorage = new PermanentStorage();
+			var useFile:String = "com.apache.flex.MobileStocks2";
+
+			storage.addEventListener("READ", handleRead);
+			storage.addEventListener("ERROR", handleReadError);
+			storage.readTextFromDataFile(useFile);
+		}
+
+		private function handleRead(event:FileEvent):void
+		{
+		    trace(event.data);
+		    var result:XML = new XML(event.data);
+		    trace("XML parsing:");
+		    trace(result);
+
+		    var assetItems:XMLList = result..asset;
+		    trace("Got "+assetItems.length()+" assets");
+		    for each (var asset:XML in assetItems) {
+		        trace("symbol = " + asset.@symbol + ", shares = " + asset.@shares);
+		        addStockToAssetList(asset.@symbol, Number(asset.@shares));
+		    }
+
+		    var watchItems:XMLList = result..watch;
+		    trace("Got "+watchItems.length()+" watches");
+		    for each (var watch:XML in watchItems) {
+		        trace("symbol = "+watch.@symbol);
+		        addStockToWatchList(watch.@symbol);
+		    }
+		}
+
+		private function handleReadError(event:FileErrorEvent):void
+		{
+			trace("Read error: "+event.errorMessage);
+		}
+
+		public function saveDataToStorage():void
+		{
+			var storage:PermanentStorage = new PermanentStorage();
+			var useFile:String = "com.apache.flex.MobileStocks2";
+			var assets:String = "";
+
+			for (var i:int=0; i < _assetList.length; i++) {
+				var stock:Stock = _assetList.getItemAt(i) as Stock;
+				assets = assets + '<asset symbol="'+stock.symbol+'" shares="'+stock.shares+'" />';
+			}
+
+			var watches:String = "";
+			for (i=0; i < _watchList.length; i++) {
+			    stock = _watchList.getItemAt(i) as Stock;
+			    watches = watches + '<watch symbol="'+stock.symbol+'" />';
+			}
+
+			var output:String = "<data><assets>"+assets+"</assets><watches>"+watches+"</watches></data>";
+
+			trace("Writing: "+output);
+
+			storage.addEventListener("WRITE", handleSave);
+			storage.addEventListener("ERROR", handleSaveError);
+			storage.writeTextToDataFile(useFile, output);
+		}
+
+		private function handleSave(event:FileEvent):void
+		{
+			trace("Save completed");
+		}
+
+		private function handleSaveError(event:FileErrorEvent):void
+		{
+			trace("Write error: "+event.errorMessage);
+		}
+
+		private var service:HTTPService;
+		private var collection:LazyCollection;
+		private var queryBegin:String = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22";
+		private var queryEnd:String = "%22)%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env&format=json";
+
+		private var _strand:IStrand;
+		public function set strand(value:IStrand):void
+		{
+			_strand = value;
+
+			service.addBead(collection);
+			_strand.addBead(service);
+		}
+
+		private var _tabList:Array = ["Assets", "Watch", "Alerts"];
+		public function get tabList():Array
+		{
+			return _tabList;
+		}
+
+		private var _labelFields:Array = [ "id", "title", "detail" ];
+		public function get labelFields():Array
+		{
+			return _labelFields;
+		}
+
+		private var _watchList:ArrayList;
+
+		public function get watchList():ArrayList
+		{
+			return _watchList;
+		}
+
+		private var _assetList:ArrayList;
+
+		public function get assetList():ArrayList
+		{
+			return _assetList;
+		}
+
+		public function addStockToAssetList(symbol:String, shares:Number):Stock
+		{
+			for (var i:int=0; i < _assetList.length; i++)
+			{
+				var stock:Stock = _assetList.getItemAt(i) as Stock;
+				if (stock.symbol == symbol) {
+					stock.shares = shares;
+					_assetList.itemUpdatedAt(i);
+					return stock;
+				}
+			}
+
+			stock = new Stock(symbol);
+			stock.shares = shares;
+
+			_assetList.addItem(stock);
+			updateStockData(stock);
+
+			return stock;
+		}
+
+		public function addStockToWatchList(symbol:String):Stock
+		{
+			for (var i:int=0; i < _watchList.length; i++)
+			{
+				var stock:Stock = _watchList.getItemAt(i) as Stock;
+				if (stock.symbol == symbol) {
+					_watchList.itemUpdatedAt(i);
+					return stock;
+				}
+			}
+
+			stock = new Stock(symbol);
+			_watchList.addItem(stock);
+			updateStockData(stock);
+			return stock;
+		}
+
+		public function removeStockFromWatchList(stock:Stock):void
+		{
+			for (var i:int=0; i < _watchList.length; i++)
+			{
+				var s:Stock = _watchList.getItemAt(i) as Stock;
+				if (stock.symbol == s.symbol) {
+					_watchList.removeItemAt(i);
+					break;
+				}
+			}
+
+			dispatchEvent(new Event("update"));
+		}
+
+		public function removeStockFromAssetListAtIndex(index:int):void
+		{
+			if (index >= 0 && index < _assetList.length) {
+				_assetList.removeItemAt(index);
+				dispatchEvent(new Event("update"));
+			}
+		}
+
+		// UPDATE STOCK INFORMATION FROM REMOTE SYSTEM
+
+		public function updateStockData(value:Stock):void
+		{
+			var sym:String = value.symbol;
+			service.url = queryBegin + sym + queryEnd;
+			service.send();
+			service.addEventListener("complete", completeHandler);
+		}
+
+		private function completeHandler(event:Event):void
+		{
+			var responseData:Object = collection.getItemAt(0);
+			var sym:String = responseData["Symbol"];
+
+			var queueNext:Stock = null;
+
+			for (var i:int=0; i < _watchList.length; i++)
+			{
+				var stock:Stock = _watchList.getItemAt(i) as Stock;
+				if (stock.symbol == sym) {
+					stock.updateFromData(responseData);
+					_watchList.itemUpdatedAt(i);
+				}
+				else if (stock.last == 0) {
+				    queueNext = stock;
+				}
+			}
+
+			for (i=0; i < _assetList.length; i++)
+			{
+				stock = _assetList.getItemAt(i) as Stock;
+				if (stock.symbol == sym) {
+					stock.updateFromData(responseData);
+					_assetList.itemUpdatedAt(i);
+				}
+				else if (stock.last == 0) {
+					queueNext = stock;
+				}
+			}
+
+			if (queueNext != null) {
+				trace("--- queue: "+queueNext.symbol);
+				updateStockData(queueNext);
+			}
+
+		}
+
+
+
+
+		// discard alerts
+		private var _alerts:ArrayList;
+
+		public function get alerts():ArrayList
+		{
+			return _alerts;
+		}
+
+		public function addAlert(value:Alert):void
+		{
+			for (var i:int =0; i < _alerts.length; i++)
+			{
+				var alert:Alert = _alerts.getItemAt(i) as Alert;
+				if (alert.symbol == value.symbol) {
+					_alerts.setItemAt(value, i);
+					return;
+				}
+			}
+
+			_alerts.addItem(value);
+			dispatchEvent(new Event("alertsUpdate"));
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/models/Stock.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/models/Stock.as b/examples/flexjs/MobileStocks/src/models/Stock.as
new file mode 100755
index 0000000..55f74cc
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/models/Stock.as
@@ -0,0 +1,168 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 models
+{
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.EventDispatcher;
+	
+	public class Stock extends EventDispatcher
+	{	    		
+		public var history:Array;
+		
+		public function Stock(symbol:String=null, last:Number=0)
+		{
+			this.symbol = symbol;
+			this.last = last;
+			this.low = last;
+			this.high = last;
+			this.open = last;
+			this.change = 0;
+			this.name = "";
+			this.shares = 0;
+		}
+		
+		public function updateFromData(obj:Object):void
+		{
+			name = obj["Name"];
+			low = obj["DaysLow"];
+			high = obj["DaysHigh"];
+			open = obj["Open"];
+			change = obj["Change"];
+			symbol = obj["Symbol"];
+			last = obj["LastTradePriceOnly"];
+			// shares do not change this way
+		}
+		
+		private var _symbol:String;
+		private var _name:String;
+		private var _low:Number;
+		private var _high:Number;
+		private var _open:Number;
+		private var _last:Number;
+		private var _change:Number;
+		private var _date:Date;
+		
+		private var _shares:Number;
+		
+		[Bindable("symbolChanged")]
+		public function get symbol():String
+		{
+			return _symbol;
+		}
+		public function set symbol(value:String):void
+		{
+			_symbol = value;
+			dispatchEvent(new Event("symbolChanged"));
+		}
+		
+		[Bindable("nameChanged")]
+		public function get name():String
+		{
+			return _name;
+		}
+		public function set name(value:String):void
+		{
+			_name = value;
+			dispatchEvent(new Event("nameChanged"));
+		}
+		
+		[Bindable("lowChanged")]
+		public function get low():Number
+		{
+			return _low;
+		}
+		public function set low(value:Number):void
+		{
+			_low = value;
+			dispatchEvent(new Event("lowChanged"));
+		}
+		
+		[Bindable("highChanged")]
+		public function get high():Number
+		{
+			return _high;
+		}
+		public function set high(value:Number):void
+		{
+			_high = value;
+			dispatchEvent(new Event("highChanged"));
+		}
+		
+		[Bindable("openChanged")]
+		public function get open():Number
+		{
+			return _open;
+		}
+		public function set open(value:Number):void
+		{
+			_open = value;
+			dispatchEvent(new Event("openChanged"));
+		}
+		
+		[Bindable("lastChanged")]
+		public function get last():Number
+		{
+			return _last;
+		}
+		public function set last(value:Number):void
+		{
+			_last = value;
+			dispatchEvent(new Event("lastChanged"));
+		}
+		
+		[Bindable("changeChanged")]
+		public function get change():Number
+		{
+			return _change;
+		}
+		public function set change(value:Number):void
+		{
+			_change = value;
+			dispatchEvent(new Event("changeChanged"));
+		}
+		
+		[Bindable("dateChanged")]
+		public function get date():Date
+		{
+			return _date;
+		}
+		public function set date(value:Date):void
+		{
+			_date = value;
+			dispatchEvent(new Event("dateChanged"));
+		}
+		
+		[Bindable("sharedChanged")]
+		public function get shares():Number
+		{
+			return _shares;
+		}
+		public function set shares(value:Number):void
+		{
+			_shares = value;
+			dispatchEvent(new Event("sharesChanged"));
+		}
+		
+		public function get total():Number
+		{
+			return _shares * _last;
+		}
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/renderers/AlertRenderer.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/renderers/AlertRenderer.as b/examples/flexjs/MobileStocks/src/renderers/AlertRenderer.as
new file mode 100644
index 0000000..e683020
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/renderers/AlertRenderer.as
@@ -0,0 +1,44 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 renderers
+{
+	import org.apache.flex.html.supportClasses.StringItemRenderer;
+	
+	public class AlertRenderer extends StringItemRenderer
+	{
+		public function AlertRenderer()
+		{
+			super();
+		}
+		
+		override public function set data(value:Object):void
+		{
+			super.data = value;
+			
+			if (labelField == "greaterThan") {
+				if (Boolean(value[labelField])) {
+					text = "when over "+value["value"];
+				}
+				else {
+					text = "when under "+value["value"];
+				}
+			}
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/renderers/CompanyNameRenderer.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/renderers/CompanyNameRenderer.as b/examples/flexjs/MobileStocks/src/renderers/CompanyNameRenderer.as
new file mode 100644
index 0000000..e899b57
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/renderers/CompanyNameRenderer.as
@@ -0,0 +1,37 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 renderers
+{
+	import org.apache.flex.html.supportClasses.StringItemRenderer;
+	
+	public class CompanyNameRenderer extends StringItemRenderer
+	{
+		public function CompanyNameRenderer()
+		{
+			super();
+		}
+		
+		override public function set data(value:Object):void
+		{
+			super.data = value;
+			
+			text = data.name + " (" + data.symbol + ")";
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/renderers/SharesTotalRenderer.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/renderers/SharesTotalRenderer.as b/examples/flexjs/MobileStocks/src/renderers/SharesTotalRenderer.as
new file mode 100644
index 0000000..f6ac94b
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/renderers/SharesTotalRenderer.as
@@ -0,0 +1,37 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 renderers
+{
+	import org.apache.flex.html.supportClasses.StringItemRenderer;
+	
+	public class SharesTotalRenderer extends StringItemRenderer
+	{
+		public function SharesTotalRenderer()
+		{
+			super();
+		}
+		
+		override public function set data(value:Object):void
+		{
+			super.data = value;
+			
+			text = "$"+String( int(data.total*100)/100.0 );
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/renderers/StockRenderer.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/renderers/StockRenderer.as b/examples/flexjs/MobileStocks/src/renderers/StockRenderer.as
new file mode 100755
index 0000000..afba26f
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/renderers/StockRenderer.as
@@ -0,0 +1,47 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 renderers
+{
+	import org.apache.flex.html.supportClasses.StringItemRenderer;
+	
+	public class StockRenderer extends StringItemRenderer
+	{
+		public function StockRenderer()
+		{
+			super();
+		}
+		
+		override public function set data(value:Object):void
+		{
+			super.data = value;
+			
+			var n1:Number = Number(value[labelField]);
+			if (!isNaN(n1)) {
+				n1 = Math.round(n1*100)/100.0;
+				
+				// something to keep in mind when using FlexJS for cross-platform
+				// use: make sure that public properties are used versus protected
+				// functions or properties. in most cases, internal vars and functions
+				// will be platform-specific whereas public properties and function
+				// should be cross-platform. 
+				text = String(n1);
+			}
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/views/AlertsView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/views/AlertsView.mxml b/examples/flexjs/MobileStocks/src/views/AlertsView.mxml
new file mode 100755
index 0000000..3cc2b79
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/views/AlertsView.mxml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+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.
+
+-->
+<js:TitleView xmlns:fx="http://ns.adobe.com/mxml/2009"
+			 title="Alerts"
+				       xmlns:js="library://ns.apache.org/flexjs/basic"
+				       xmlns:local="*"
+				       className="AlertsView" xmlns:renderers="renderers.*">
+	
+	<fx:Metadata>
+		[Event("next")]
+	</fx:Metadata>
+	
+	<fx:Script>
+		<![CDATA[			
+			import org.apache.flex.core.IBeadModel;
+			import org.apache.flex.core.IBeadController;
+			import org.apache.flex.events.Event;
+			import controller.AlertsViewController;
+			
+			public function set dataModel(value:IBeadModel):void
+			{
+				var cm:IBeadController = controller;
+				(cm as AlertsViewController).model = value;
+			}
+			public function get dataModel():IBeadModel
+			{
+				var cm:IBeadController = controller;
+				return (cm as AlertsViewController).model;
+			}
+
+			private function onAlertSet():void
+			{
+				dispatchEvent(new org.apache.flex.events.Event("alertSet"));
+			}
+		]]>
+	</fx:Script>
+		
+	<js:Container x="4" y="10" >
+		<js:beads>
+			<js:HorizontalLayout />
+		</js:beads>
+		<js:Label text="Symbol:" />
+		<js:TextInput id="symbolField" width="50" />
+		<js:Label text="Value:" />
+		<js:TextInput id="valueField" width="50" />
+		<js:CheckBox text="Higher?" id="higherCheck" />
+		<js:TextButton text="Set" click="onAlertSet()" />
+	</js:Container>
+	
+	<js:DataGrid id="dataGrid" x="0" y="40" width="100%" height="200">
+		<js:beads>
+			<js:DataProviderChangeNotifier sourceID="dataModel" propertyName="alerts"
+										   destinationPropertyName="dataProvider" changeEventName="dataProviderChanged" />
+			<js:SimpleBinding
+				eventName="alertsUpdate"
+				sourceID="dataModel"
+				sourcePropertyName="alerts"
+				destinationPropertyName="dataProvider" />
+		</js:beads>
+		<js:columns>
+			<js:DataGridColumn label="Symbol" dataField="symbol">
+				<js:itemRenderer>
+					<fx:Component>
+						<js:StringItemRenderer />
+					</fx:Component>
+				</js:itemRenderer>
+			</js:DataGridColumn>
+			<js:DataGridColumn label="Alert" dataField="greaterThan">
+				<js:itemRenderer>
+					<fx:Component>
+						<renderers:AlertRenderer />
+					</fx:Component>
+				</js:itemRenderer>
+			</js:DataGridColumn>
+			<js:DataGridColumn label="Message" dataField="message">
+				<js:itemRenderer>
+					<fx:Component>
+						<js:StringItemRenderer />
+					</fx:Component>
+				</js:itemRenderer>
+			</js:DataGridColumn>
+		</js:columns>
+	</js:DataGrid>
+	
+</js:TitleView>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c1682af6/examples/flexjs/MobileStocks/src/views/AssetsView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileStocks/src/views/AssetsView.mxml b/examples/flexjs/MobileStocks/src/views/AssetsView.mxml
new file mode 100755
index 0000000..944e759
--- /dev/null
+++ b/examples/flexjs/MobileStocks/src/views/AssetsView.mxml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+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.
+
+-->
+<js:TitleView xmlns:fx="http://ns.adobe.com/mxml/2009"
+			title="Assets"
+			xmlns:js="library://ns.apache.org/flexjs/basic"
+			xmlns:models="models.*"
+			xmlns:local="*"
+			className="AssetsView" xmlns:views="views.*">
+	<fx:Script>
+		<![CDATA[
+			import models.ProductsModel;
+			import models.Stock;
+			
+			import org.apache.flex.binding.SimpleBinding;
+			import org.apache.flex.core.IBeadController;
+			import org.apache.flex.core.IBeadModel;
+			import org.apache.flex.events.Event;
+			import org.apache.flex.events.ValueChangeEvent;
+			import org.apache.flex.mobile.IViewManager;
+			import org.apache.flex.mobile.StackedViewManager;
+			import org.apache.flex.html.beads.DataProviderChangeNotifier;
+			
+			private var localModel:ProductsModel;
+			
+			public function set dataModel(value:IBeadModel):void
+			{
+				localModel = value as ProductsModel;
+				
+				var newEvent:ValueChangeEvent = new ValueChangeEvent("valueChange", false, false, null, localModel);
+				newEvent.propertyName = "dataModel";
+				dispatchEvent(newEvent);
+			}
+			public function get dataModel():IBeadModel
+			{
+				return localModel;
+			}
+		]]>
+	</fx:Script>
+	
+	<fx:Metadata>
+		[Event("next")]
+	</fx:Metadata>
+	
+	<js:beads>
+		<js:VerticalLayout />
+	</js:beads>
+	
+	<js:model>
+		<models:AssetsModel />
+	</js:model>
+
+	<js:Label text="Summary" height="10%" />
+	
+	<js:DataGrid id="assetGrid" height="150" width="100%">
+		<js:style>
+			<js:SimpleCSSStyles top="0" left="0" right="0" />
+		</js:style>
+		<js:beads>
+			<js:SimpleBinding
+				eventName="update"
+				sourceID="dataModel"
+				sourcePropertyName="watchList"
+				destinationPropertyName="dataProvider" />
+			<js:DataProviderChangeNotifier sourceID="dataModel" propertyName="watchList" 
+										   destinationPropertyName="dataProvider" changeEventName="dataProviderChanged" />
+		</js:beads>
+		<js:columns>
+			<js:DataGridColumn label="Symbol" dataField="symbol" />
+			<js:DataGridColumn label="Change" dataField="change" />
+			<js:DataGridColumn label="Last Value" dataField="last" />
+		</js:columns>
+	</js:DataGrid>
+		
+	<js:Label text="Performance History" height="10%" />
+		
+	<js:ColumnChart id="barChart" width="100%" height="40%">
+		<js:model>
+			<js:ChartArrayListSelectionModel />
+		</js:model>
+		<js:beads>
+			<js:DataItemRendererFactoryForSeriesArrayListData />
+			<js:ColumnChartLayoutForArrayList />
+			<js:SimpleBinding
+				eventName="update"
+				sourceID="dataModel"
+				sourcePropertyName="watchList"
+				destinationPropertyName="dataProvider" />
+			<js:DataProviderChangeNotifier sourceID="dataModel" propertyName="watchList" 
+										   destinationPropertyName="dataProvider" changeEventName="dataProviderChanged" />
+			<js:VerticalLinearAxisForArrayListBead valueField="last" />
+			<js:HorizontalCategoryAxisForArrayListBead categoryField="symbol" />
+		</js:beads>
+		<js:series>
+			<js:ColumnSeries yField="last"> 
+				<js:itemRenderer>
+					<fx:Component>
+						<js:BoxItemRenderer>
+							<js:fill>
+								<js:SolidColor color="#FF964D" alpha="1.0" />
+							</js:fill>
+						</js:BoxItemRenderer>                      
+					</fx:Component>
+				</js:itemRenderer>
+			</js:ColumnSeries>
+		</js:series>
+	</js:ColumnChart>
+
+</js:TitleView>
\ No newline at end of file


[17/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Fix for StackedViewManager in Mobile project.

Posted by ha...@apache.org.
Fix for StackedViewManager in Mobile project.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/b0f8b6d1
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/b0f8b6d1
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/b0f8b6d1

Branch: refs/heads/refactor-sprite
Commit: b0f8b6d17356fa305a8b7ac8146e4e2c842cb3c9
Parents: e0ac88c
Author: Peter Ent <pe...@apache.org>
Authored: Wed Sep 21 16:50:13 2016 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Wed Sep 21 16:50:13 2016 -0400

----------------------------------------------------------------------
 .../org/apache/flex/mobile/StackedViewManager.as     | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/b0f8b6d1/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/StackedViewManager.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/StackedViewManager.as b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/StackedViewManager.as
index ffa26c5..6720d1a 100644
--- a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/StackedViewManager.as
+++ b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/StackedViewManager.as
@@ -20,8 +20,8 @@ package org.apache.flex.mobile
 {	
 	import org.apache.flex.events.Event;
 	import org.apache.flex.html.Container;
-	import org.apache.flex.mobile.IViewManagerView;
 	import org.apache.flex.mobile.IViewManager;
+	import org.apache.flex.mobile.IViewManagerView;
 	import org.apache.flex.mobile.chrome.NavigationBar;
 	import org.apache.flex.mobile.chrome.ToolBar;
 	import org.apache.flex.mobile.models.ViewManagerModel;
@@ -102,6 +102,15 @@ package org.apache.flex.mobile
 
 		
 		private var _topView:IViewManagerView;
+		
+		override public function set views(value:Array):void
+		{
+			super.views = value;
+			
+			if (value != null && value.length > 0) {
+				_topView = value[0] as IViewManagerView;
+			}
+		}
 
 		/**
 		 * The top-most (current) view.
@@ -130,7 +139,9 @@ package org.apache.flex.mobile
 			nextView.viewManager = this;
 			ViewManagerModel(model).pushView(nextView);
 			
-			removeElement(_topView);
+			if (_topView != null) {
+				removeElement(_topView);
+			}
 			_topView = nextView;
 			addElement(_topView);
 			


[09/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Removed the explicit creation of model and view for Image now that the CSS defines it universally.

Posted by ha...@apache.org.
Removed the explicit creation of model and view for Image now that the CSS defines it universally.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/38747818
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/38747818
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/38747818

Branch: refs/heads/refactor-sprite
Commit: 38747818217a3d3a06667b09bac30fc7c90c7415
Parents: 72dfce0
Author: Peter Ent <pe...@apache.org>
Authored: Mon Sep 12 13:35:33 2016 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Mon Sep 12 13:35:33 2016 -0400

----------------------------------------------------------------------
 .../HTML/src/main/flex/org/apache/flex/html/Image.as         | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/38747818/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as
index ae81c18..0a42d2a 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Image.as
@@ -85,13 +85,7 @@ package org.apache.flex.html
             positioner = element;
             positioner.style.position = 'relative';
             element.flexjs_wrapper = this;
-            
-            model = new
-                ImageModel();
-            
-            addBead(new
-                ImageView());
-            
+         
             return element;
         }        
 


[14/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - [FIX] Added Bindable metas to text and html getters on TextInput. Fixes mxml bindings for these properties. Issue reported by PKumar in users mailing list.

Posted by ha...@apache.org.
[FIX] Added Bindable metas to text and html getters on TextInput. Fixes mxml bindings for these properties.
Issue reported by PKumar in users mailing list.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/5d52dc68
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/5d52dc68
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/5d52dc68

Branch: refs/heads/refactor-sprite
Commit: 5d52dc685c74ca6b2efe055ac8f96363c8873973
Parents: 241d202
Author: greg-dove <gr...@gmail.com>
Authored: Mon Sep 19 08:33:52 2016 +1200
Committer: greg-dove <gr...@gmail.com>
Committed: Mon Sep 19 08:33:52 2016 +1200

----------------------------------------------------------------------
 .../projects/HTML/src/main/flex/org/apache/flex/html/TextInput.as  | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5d52dc68/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TextInput.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TextInput.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TextInput.as
index 70ad9a2..c8df45d 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TextInput.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TextInput.as
@@ -74,6 +74,7 @@ package org.apache.flex.html
          *  @productversion FlexJS 0.0
          *  @flexjsignorecoercion HTMLInputElement
          */
+		[Bindable(event="change")]
 		public function get text():String
 		{
             COMPILE::SWF
@@ -114,6 +115,7 @@ package org.apache.flex.html
          *  @productversion FlexJS 0.0
          *  @flexjsignorecoercion HTMLInputElement
          */
+		[Bindable(event="change")] 
 		public function get html():String
 		{
             COMPILE::SWF


[25/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Setup for side-by-side Unit test view of swf and js, with flexuint shim, added Reflection tests

Posted by ha...@apache.org.
Setup for side-by-side Unit test view of swf and js, with flexuint shim, added Reflection tests


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/438cb014
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/438cb014
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/438cb014

Branch: refs/heads/refactor-sprite
Commit: 438cb01497695389f9f0fa661fa1f2f6c909b6c2
Parents: 92c0a8b
Author: greg-dove <gr...@gmail.com>
Authored: Tue Sep 27 19:15:26 2016 +1300
Committer: greg-dove <gr...@gmail.com>
Committed: Tue Sep 27 19:53:06 2016 +1300

----------------------------------------------------------------------
 manualtests/GenericTests/build.xml              |  74 +++
 manualtests/GenericTests/src/GenericTests.mxml  |  39 ++
 manualtests/GenericTests/src/MyInitialView.mxml | 193 +++++++
 manualtests/GenericTests/src/README.txt         |  61 ++
 manualtests/GenericTests/src/TestClasses.as     |  37 ++
 .../src/flexUnitTests/CoreTester.as             |  30 +
 .../src/flexUnitTests/JiraIssuesTester.as       |  29 +
 .../src/flexUnitTests/ObservedBugsTester.as     |  29 +
 .../src/flexUnitTests/ReflectionTester.as       |  29 +
 .../flexUnitTests/core/BinaryDataTesterTest.as  | 567 +++++++++++++++++++
 .../src/flexUnitTests/core/StrandTesterTest.as  |  55 ++
 .../src/flexUnitTests/jira/JiraTesterTest.as    |  73 +++
 .../observedbugs/ObservedBugTests.as            |  86 +++
 .../reflection/ReflectionTesterTest.as          | 368 ++++++++++++
 .../reflection/support/ITestInterface.as        |  27 +
 .../reflection/support/ITestInterface2.as       |  29 +
 .../reflection/support/ITestInterface3.as       |  27 +
 .../reflection/support/ITestInterface4.as       |  29 +
 .../reflection/support/TestClass1.as            |  91 +++
 .../reflection/support/TestClass2.as            | 103 ++++
 .../reflection/support/TestClass3.as            |  39 ++
 .../reflection/support/TestClass4.as            |  95 ++++
 .../src/flexunit/framework/Assert.as            | 305 ++++++++++
 .../flexunit/framework/AssertionFailedError.as  |  39 ++
 .../src/testshim/FlexJSUnitTestRunner.as        | 186 ++++++
 .../GenericTests/src/testshim/TestResult.as     |  56 ++
 .../GenericTests/testsview/image/Flex.png       | Bin 0 -> 3526 bytes
 manualtests/GenericTests/testsview/index.html   | 112 ++++
 .../testsview/src/GenericTestsContainer.mxml    |  32 ++
 .../testsview/src/MyInitialView.mxml            |  96 ++++
 .../testsview/src/controllers/MyController.as   |  52 ++
 .../testsview/src/models/MyModel.as             | 125 ++++
 .../testsview/src/models/TestResultsModel.as    |  40 ++
 33 files changed, 3153 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/build.xml
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/build.xml b/manualtests/GenericTests/build.xml
new file mode 100644
index 0000000..092bd36
--- /dev/null
+++ b/manualtests/GenericTests/build.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0"?>
+<!--
+
+  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.
+
+-->
+
+
+<project name="GenericTests" default="main" basedir=".">
+    <property name="FLEXJS_HOME" location="../.."/>
+    <property name="example" value="GenericTests" />
+    
+
+    <!-- adding flexuint style meta collection, and additional testing meta tags (Event,Bindable,TestMeta)-->
+    <property name="theme_arg" value="-keep-as3-metadata+=Test,BeforeClass,AfterClass,Before,After,TestVariance,Event,Bindable,TestMeta" />
+    <property file="${FLEXJS_HOME}/env.properties"/>
+    <property environment="env"/>
+    <property file="${FLEXJS_HOME}/build.properties"/>
+    <property name="FLEX_HOME" value="${FLEXJS_HOME}"/>
+    <available file="${env.FALCON_HOME}/lib/falcon-mxmlc.jar"
+    type="file"
+    property="FALCON_HOME"
+    value="${env.FALCON_HOME}"/>
+    
+    <available file="${FLEXJS_HOME}/../flex-falcon/compiler/generated/dist/sdk/lib/falcon-mxmlc.jar"
+    type="file"
+    property="FALCON_HOME"
+    value="${FLEXJS_HOME}/../flex-falcon/compiler/generated/dist/sdk"/>
+    
+    <available file="${env.FALCONJX_HOME}/lib/jsc.jar"
+    type="file"
+    property="FALCONJX_HOME"
+    value="${env.FALCONJX_HOME}"/>
+    
+    <available file="${FLEXJS_HOME}/../flex-falcon/compiler-jx/lib/jsc.jar"
+    type="file"
+    property="FALCONJX_HOME"
+    value="${FLEXJS_HOME}/../flex-falcon/compiler-jx"/>
+    
+    <available file="${env.GOOG_HOME}/closure/goog/base.js"
+    type="file"
+    property="GOOG_HOME"
+    value="${env.GOOG_HOME}"/>
+    
+    <available file="${FLEXJS_HOME}/js/lib/google/closure-library/closure/goog/base.js"
+    type="file"
+    property="GOOG_HOME"
+    value="${FLEXJS_HOME}/js/lib/google/closure-library"/>
+    
+    <include file="${basedir}/../build_example.xml" />
+
+    <target name="main" depends="clean,build_example.compile,build_example.compilejs" description="Clean build of GenericTests">
+    </target>
+    
+    <target name="clean">
+        <delete dir="${basedir}/bin" failonerror="false" />
+        <delete dir="${basedir}/bin-debug" failonerror="false" />
+        <delete dir="${basedir}/bin-release" failonerror="false" />
+    </target>
+
+</project>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/GenericTests.mxml
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/GenericTests.mxml b/manualtests/GenericTests/src/GenericTests.mxml
new file mode 100644
index 0000000..0db0af9
--- /dev/null
+++ b/manualtests/GenericTests/src/GenericTests.mxml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!---
+//
+//  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.
+//
+////////////////////////////////////////////////////////////////////////////////
+-->
+<js:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+				   xmlns:local="*"
+				   xmlns:models="models.*"
+                   xmlns:controllers="controllers.*"
+				   xmlns:js="library://ns.apache.org/flexjs/basic" 		   
+				   >
+	<fx:Style>
+		@namespace js "library://ns.apache.org/flexjs/basic";
+		js|Application {
+			background-color:#ffffff ;
+		}
+	</fx:Style>
+	<js:valuesImpl>
+		<js:SimpleCSSValuesImpl />
+	</js:valuesImpl>
+	<js:initialView>
+		<local:MyInitialView />
+	</js:initialView>
+</js:Application>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/MyInitialView.mxml
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/MyInitialView.mxml b/manualtests/GenericTests/src/MyInitialView.mxml
new file mode 100644
index 0000000..2c8c966
--- /dev/null
+++ b/manualtests/GenericTests/src/MyInitialView.mxml
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+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.
+
+-->
+<js:View xmlns:fx="http://ns.adobe.com/mxml/2009"
+		 xmlns:js="library://ns.apache.org/flexjs/basic"
+		 xmlns:local="*"
+		 xmlns:acc="org.apache.flex.html.accessories.*"
+		 initComplete="runTests()"
+>
+
+	<fx:Style>
+		.title {
+			font-size: 14pt;
+			font-weight: bold;
+		}
+		.body {
+			left:10px;
+			right:10px;
+		}
+	</fx:Style>
+
+	<fx:Script>
+		<![CDATA[
+		import org.apache.flex.html.Label;
+		import org.apache.flex.reflection.VariableDefinition;
+		import org.apache.flex.reflection.getDefinitionByName;
+		import org.apache.flex.reflection.describeType;
+		import org.apache.flex.reflection.TypeDefinition;
+
+		import testshim.FlexJSUnitTestRunner;
+		import testshim.TestResult;
+
+
+
+		private var _tests:Array;
+
+		public function runTests():void {
+			var label:Label;
+			var groups:Array = TestClasses.testClasses;
+			var spaces:String = PLATFORM == "JS" ? "&nbsp;&nbsp;&nbsp;" : "   ";
+			while (groups.length) {
+				var testGroupClass:Class = groups.shift() as Class;
+				var td:TypeDefinition = describeType(testGroupClass);
+				label = new Label();
+				label.text = "Running " + td.name + " Tests";
+				output.addElement(label);
+				var testClasses:Array = td.variables;
+				testClasses.sortOn("name");
+				var i:uint = 0, l:uint = testClasses.length;
+				if (l == 0) {
+					label = new Label();
+					label.text = spaces+ "[Zero tests detected]";
+					output.addElement(label);
+					continue;
+				}
+				for (; i < l; i++) {
+					var varDef:VariableDefinition = testClasses[i];
+
+					var testClass:Class = getDefinitionByName(varDef.type.qualifiedName) as Class;
+					fails = [];
+					passes = [];
+					variances = [];
+					warnings = [];
+					var runner:FlexJSUnitTestRunner = new FlexJSUnitTestRunner(testClass, onTestResult);
+					runner.runTests();
+					label = new Label();
+
+					label.text = "TEST: " + runner.testingName + spaces + "Passed:" + runner.successCount + ", Failed:" + runner.failCount + ", assertions made:" + runner.successfulAssertions;
+					label.style = {color: runner.failCount == 0 ? "green" : "red"};
+					output.addElement(label);
+					if (runner.failCount > 0 || fails.length) {
+						//show any failing test details
+						appendTestResults(fails);
+					}
+					if (variances.length) {
+						appendTestResults(variances);
+					}
+					if (warnings.length) {
+						appendTestResults(warnings);
+					}
+				}
+			}
+
+		}
+
+
+		private var fails:Array;
+		private var passes:Array;
+		private var variances:Array;
+		private var warnings:Array;
+		public function onTestResult(result:TestResult):void {
+			if (result.pass) passes.push(result);
+			else fails.push(result);
+
+			if (result.hasVariance && result.pass) {
+				if (result.varianceTarget.indexOf(PLATFORM) != -1) {
+					//variance applies to this target
+					variances.push(result);
+				}
+			}
+
+			if (result.warning!=null && result.pass && !result.hasVariance) {
+				// a test result that would otherwise indicate a pass, but has a warning
+				warnings.push(result);
+			}
+		}
+
+		public function appendTestResults(array:Array):void {
+			array = array.slice();
+			var spaces:String = "   ";
+			var newline:String = "\n" ;
+			while (array.length) {
+				var result:TestResult = array.shift();
+				var label:Label = new Label();
+				//label.x=10; <- fails in js, using 'spaces' below instead
+				var message:String = spaces + result.toString(newline +spaces);
+
+				if (result.hasVariance)
+					message = spaces + "VARIANCE:" + result.varianceDescription + newline + message ;
+				if (result.warning != null) {
+					message =  spaces + result.warning +newline +message;
+				}
+				if (PLATFORM == "JS") {
+					message = escapeForHtml(message);
+					var jsSpaces:String = spaces.split(" ").join("&nbsp;");
+					message = message.split(spaces).join(jsSpaces);
+				}
+
+				label.text = message;
+
+				if (result.pass) {
+					var showOrange:Boolean = false;
+					if (result.hasVariance || result.warning!=null) showOrange = true;
+					label.style = {color: showOrange ? 0xFFA500 : "green"};
+				} else label.style = {color: "red"};
+				output.addElement(label);
+			}
+		}
+
+		private static function escapeForHtml( string : String ) : String {
+			return  string.split("<").join("&lt;").split(">").join("&gt;").split("\n").join("<br/>");
+		}
+
+
+		private static function getPlatform():String {
+			try {
+				var check:* = getDefinitionByName("flash.system.Capabilities");
+			} catch (e:Error) {
+				return "JS";
+			}
+			//if this next reference to 'check' is not included, then the above try/catch code
+			// appears to be optimized away in js-release mode
+			//[this issue was added to ObservedBugs Tests]
+			if (check == null) {
+				return "JS";
+			}
+			return "SWF";
+		}
+
+		public static const PLATFORM:String = getPlatform();
+		]]>
+	</fx:Script>
+	<js:beads>
+		<js:ViewDataBinding/>
+	</js:beads>
+	<js:Container id="cont" height="50" className="body">
+		<js:beads>
+			<js:VerticalLayout />
+		</js:beads>
+		<js:Label text="{PLATFORM} Cross-compiled Unit Tests" className="title" />
+	</js:Container>
+	<js:Container id="output" height="700" y="50" className="body">
+		<js:beads>
+			<js:VerticalLayout />
+		</js:beads>
+	</js:Container>
+</js:View>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/README.txt
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/README.txt b/manualtests/GenericTests/src/README.txt
new file mode 100644
index 0000000..4ef6e3f
--- /dev/null
+++ b/manualtests/GenericTests/src/README.txt
@@ -0,0 +1,61 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+DESCRIPTION
+
+The GenericTests application is a very basic form of unit testing primarily
+intended for FlexJS framework developers. It is a 'lite' version of a small portion of 
+Flexunit code to support basic assertion tests.
+
+This Flex application may be run as a Flash SWF or cross-compiled (using Falcon JX)
+into JavaScript and HTML and run without Flash.
+
+There is a convenience html page for hosting the tests side-by-side that permits developers
+to refresh the test builds simultaneously and compare results in the browser, including the 
+ability to toggle between JS-Debug and JS-Release builds.
+While this is primarily intended for framework developers, it may be useful as a starting point
+for cross-compiled unit testing (during development only) in regular FlexJS projects.
+
+FRAMEWORK DEVELOPER NOTES
+To add new tests, follow the examples inside the flexUnitTests package, and add any new Test
+group or category level class (the classes directly inside flexUnitTests package) into the top 
+level TestClasses.as file. This should be all that is necessary to add new tests.
+
+MetaData
+[BeforeClass] -same as flexunit (typical: 'setupBeforClass')- runs a static method before the test class is instantiated
+[AfterClass] -same as flexunit (typical: 'tearDownAfterClass')- runs a static method after the test class has been processed
+[Before] -same as flexunit (typical: 'setup') - runs an instance method before the test class' test methods are processed
+[After] -same as flexunit (typical: 'tearDown') - runs an instance method after the test class' test methods are processed
+[Test] -same as flexunit (typical: 'testXXXX') - denotes a test method. No assumption about order of test methods being called should be made
+
+[TestVariance(variance="JS",description="Reason for variation in JS expected results")]
+The above is specific to this test app, and permits annotation of test methods where the expected results are different between compiler targets.
+The variance key in the meta data should be either "SWF" or "JS". This is the compiler target with the result that is considered to be different
+to what it ideally 'should be', but correct as per the current implementation of the framework. Usually this will be "JS". It indicates a known
+but currently acceptable difference between compiler targets.
+
+
+GENERAL NOTES
+
+In its first working version this app only supports synchronous simple assertions and 
+is intended to use test classes that are compatible with the flexunit tests that are 
+used in the full framework build. Future versions may include more advanced features.
+
+The cross-compilation to JavaScript often results in non-fatal warnings. Some of these warnings
+should be addressed in future releases of the Falcon JX compiler.

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/TestClasses.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/TestClasses.as b/manualtests/GenericTests/src/TestClasses.as
new file mode 100644
index 0000000..f7273c0
--- /dev/null
+++ b/manualtests/GenericTests/src/TestClasses.as
@@ -0,0 +1,37 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+{
+	//test groups
+	import flexUnitTests.*;
+
+
+	public class TestClasses 
+	{
+		
+		public static function get testClasses():Array {
+			return [
+						CoreTester,
+						ReflectionTester,
+						ObservedBugsTester,
+						JiraIssuesTester
+					];
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/CoreTester.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/CoreTester.as b/manualtests/GenericTests/src/flexUnitTests/CoreTester.as
new file mode 100644
index 0000000..56531d0
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/CoreTester.as
@@ -0,0 +1,30 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests
+{
+	import flexUnitTests.core.*
+
+    [Suite]
+    [RunWith("org.flexunit.runners.Suite")]
+    public class CoreTester
+    {
+        public var strandTesterTest:StrandTesterTest;
+		public var binaryDataTesterTest:BinaryDataTesterTest;
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/JiraIssuesTester.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/JiraIssuesTester.as b/manualtests/GenericTests/src/flexUnitTests/JiraIssuesTester.as
new file mode 100644
index 0000000..fc37533
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/JiraIssuesTester.as
@@ -0,0 +1,29 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests
+{
+	import flexUnitTests.jira.*
+	
+    [Suite]
+    [RunWith("org.flexunit.runners.Suite")]
+    public class JiraIssuesTester
+    {
+        
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/ObservedBugsTester.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/ObservedBugsTester.as b/manualtests/GenericTests/src/flexUnitTests/ObservedBugsTester.as
new file mode 100644
index 0000000..e01b7c2
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/ObservedBugsTester.as
@@ -0,0 +1,29 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests
+{
+	import flexUnitTests.observedbugs.*
+	
+    [Suite]
+    [RunWith("org.flexunit.runners.Suite")]
+    public class ObservedBugsTester
+    {
+        public var observedBugsTest1:ObservedBugTests;
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/ReflectionTester.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/ReflectionTester.as b/manualtests/GenericTests/src/flexUnitTests/ReflectionTester.as
new file mode 100644
index 0000000..2feaa14
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/ReflectionTester.as
@@ -0,0 +1,29 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests
+{
+	import flexUnitTests.reflection.*;
+	
+    [Suite]
+    [RunWith("org.flexunit.runners.Suite")]
+    public class ReflectionTester
+    {
+        public var reflectionTesterTest:ReflectionTesterTest;
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/core/BinaryDataTesterTest.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/core/BinaryDataTesterTest.as b/manualtests/GenericTests/src/flexUnitTests/core/BinaryDataTesterTest.as
new file mode 100644
index 0000000..b10d18c
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/core/BinaryDataTesterTest.as
@@ -0,0 +1,567 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests.core
+{
+
+
+    import org.apache.flex.utils.Endian;
+    import flexunit.framework.Assert;
+    import org.apache.flex.utils.BinaryData
+
+
+    public class BinaryDataTesterTest 
+	{
+
+		[Before]
+		public function setUp():void {
+		}
+
+		[After]
+		public function tearDown():void {
+		}
+
+		[BeforeClass]
+		public static function setUpBeforeClass():void {
+		}
+
+		[AfterClass]
+		public static function tearDownAfterClass():void {
+		}
+
+
+		//util check functions
+		private static function bytesMatchExpectedData(bd:BinaryData,expected:Array,offset:int=0):Boolean{
+			var len:uint = expected.length;
+			var end:uint=offset+len;
+			for (var i:int=offset;i<end;i++) {
+				var check:uint = bd.readByteAt(i);
+				if (expected[i-offset]!=check) {
+					// trace('failed at ',i,expected[i-offset],check);
+					return false;
+				}
+			}
+			return true;
+		}
+
+		private static function reversedBytesMatch(bd1:BinaryData,bd2:BinaryData,len:uint,offset:int=0):Boolean{
+			var end:uint=offset+len;
+			for (var i:int=offset;i<end;i++) {
+				if (bd1.readByteAt(i) != bd2.readByteAt(end-1-i)) return false;
+			}
+			return true;
+
+		}
+
+
+		[Test]
+		public function testBasicPositionAndLength():void
+		{
+			var ba:BinaryData = new BinaryData();
+
+			Assert.assertEquals("new Instance, position", 0, ba.position);
+			Assert.assertEquals("new Instance, length", 0, ba.length);
+
+			ba.position=100;
+			Assert.assertEquals("position change, position", 100, ba.position);
+			Assert.assertEquals("position change, length", 0, ba.length);
+			Assert.assertEquals("position change, length", 0, ba.bytesAvailable);
+
+			ba.length=100;
+			Assert.assertEquals("length change, position", 100, ba.position);
+			Assert.assertEquals("length change, length", 100, ba.length);
+
+			ba.length=50;
+			Assert.assertEquals("length change, position", 50, ba.position);
+			Assert.assertEquals("length change, length", 50, ba.length);
+
+
+		}
+
+		[Test]
+		public function testAdvancedPositionAndLength():void
+		{
+			var ba:BinaryData = new BinaryData();
+
+			ba.position=100;
+			ba.length=100;
+
+			ba.writeByteAt(49,255);
+			Assert.assertEquals("writeByteAt does not affect position",100, ba.position);
+			Assert.assertEquals("writeByteAt (internal) does not affect length",100, ba.length);
+
+			ba.readByteAt(48);
+			Assert.assertEquals("readByteAt does not affect position",100, ba.position);
+			Assert.assertEquals("readByteAt does not affect length",100, ba.length);
+
+			ba.writeByteAt(199,255);
+			Assert.assertEquals("writeByteAt (beyond length) does affect length",200, ba.length);
+			Assert.assertEquals("writeByteAt (beyond length) does not affect position",100, ba.position);
+
+			Assert.assertStrictlyEquals("out of range byte read request",0 ,ba.readByteAt(205));
+
+		}
+
+
+		[Test]
+		public function testUTFWritePosition():void
+		{
+			var ba:BinaryData = new BinaryData();
+			ba.writeUTF('This is a test');
+			//writeUTF
+			Assert.assertEquals("basic post-writeUTF position", 16, ba.position);
+			ba=new BinaryData();
+			ba.writeUTFBytes('This is a test');
+			//writeUTFBytes
+			Assert.assertEquals("basic post-writeUTFBytes position", 14, ba.position);
+
+			//overlapping
+			ba.position=5;
+			ba.writeUTFBytes('This is a test');
+			Assert.assertEquals("Advanced post-writeUTFBytes position (overlap)", 19, ba.position);
+
+		}
+
+		[Test]
+		public function testBooleanRoundTripping():void
+		{
+			var ba:BinaryData = new BinaryData();
+			ba.writeBoolean(true);
+			ba.writeBoolean(false);
+			ba.position = 0;
+			Assert.assertTrue(ba.readBoolean());
+			Assert.assertFalse(ba.readBoolean());
+		}
+
+		[Test]
+		public function testByteRoundTripping():void
+		{
+			var ba:BinaryData = new BinaryData();
+			ba.writeByte(255);
+			ba.writeByte(256);
+			ba.writeByte(-256);
+			ba.writeByte(-257);
+			ba.writeByte(-128);
+			ba.writeByte(128);
+			ba.writeByte(127);
+			ba.writeByte(-50);
+			ba.writeByte(50);
+			ba.position = 0;
+
+
+			Assert.assertEquals("Error testing post writeByte/readByte round-tripping", -1, ba.readByte());
+			Assert.assertEquals("Error testing post writeByte/readByte round-tripping", 0, ba.readByte());
+			Assert.assertEquals("Error testing post writeByte/readByte round-tripping", 0, ba.readByte());
+			Assert.assertEquals("Error testing post writeByte/readByte round-tripping", -1, ba.readByte());
+			Assert.assertEquals("Error testing post writeByte/readByte round-tripping", -128, ba.readByte());
+			Assert.assertEquals("Error testing post writeByte/readByte round-tripping", -128, ba.readByte());
+			Assert.assertEquals("Error testing post writeByte/readByte round-tripping", 127, ba.readByte());
+			Assert.assertEquals("Error testing post writeByte/readByte round-tripping", -50, ba.readByte());
+			Assert.assertEquals("Error testing post writeByte/readByte round-tripping", 50, ba.readByte());
+		}
+
+
+		[Test]
+		public function testUnsignedByteRoundTripping():void
+		{
+			var ba:BinaryData = new BinaryData();
+			ba.writeByte(255);
+			ba.writeByte(256);
+			ba.writeByte(-256);
+			ba.writeByte(-257);
+			ba.writeByte(-128);
+			ba.writeByte(128);
+			ba.writeByte(127);
+			ba.writeByte(-50);
+			ba.writeByte(50);
+			ba.position = 0;
+			//check read values
+
+			Assert.assertEquals("Error testing post writeByte/readUnsignedByte round-tripping", 255, ba.readUnsignedByte());
+			Assert.assertEquals("Error testing post writeByte/readUnsignedByte round-tripping", 0, ba.readUnsignedByte());
+			Assert.assertEquals("Error testing post writeByte/readUnsignedByte round-tripping", 0, ba.readUnsignedByte());
+			Assert.assertEquals("Error testing post writeByte/readUnsignedByte round-tripping", 255, ba.readUnsignedByte());
+			Assert.assertEquals("Error testing post writeByte/readUnsignedByte round-tripping", 128, ba.readUnsignedByte());
+			Assert.assertEquals("Error testing post writeByte/readUnsignedByte round-tripping", 128, ba.readUnsignedByte());
+			Assert.assertEquals("Error testing post writeByte/readUnsignedByte round-tripping", 127, ba.readUnsignedByte());
+			Assert.assertEquals("Error testing post writeByte/readUnsignedByte round-tripping", 206, ba.readUnsignedByte());
+			Assert.assertEquals("Error testing post writeByte/readUnsignedByte round-tripping", 50, ba.readUnsignedByte());
+		}
+
+
+		[Test]
+		public function testBasicEndian():void
+		{
+
+			var systemEndian:String = Endian.systemEndian;
+			//check we have a decisive systemEndian detection
+			Assert.assertNotNull(systemEndian );
+
+
+			var ba:BinaryData = new BinaryData();
+			var defaultEndian:String = ba.endian;
+
+			var alternateEndian:String = (defaultEndian == Endian.BIG_ENDIAN) ? Endian.LITTLE_ENDIAN : Endian.BIG_ENDIAN;
+			var expected:Object ={};
+			expected[Endian.BIG_ENDIAN] = 218038271;
+			expected[Endian.LITTLE_ENDIAN] = 4294966796;
+			var bytes:Array = [12, 254, 255, 255];
+			for each(var byte:uint in bytes) ba.writeByte(byte);
+			ba.position = 0;
+
+			Assert.assertEquals("testing endian:"+defaultEndian, expected[defaultEndian] , ba.readUnsignedInt());
+
+			ba.position = 0;
+			ba.endian = alternateEndian;
+			var result:uint =  ba.readUnsignedInt();
+
+			Assert.assertEquals("testing endian:"+alternateEndian, expected[alternateEndian], result);
+
+			ba.position = 0;
+			ba.endian = defaultEndian;
+			Assert.assertEquals("testing endian:"+defaultEndian, int(expected[defaultEndian]), ba.readInt());
+
+			ba.position = 0;
+			ba.endian = alternateEndian;
+			Assert.assertEquals("testing endian:"+alternateEndian, int(expected[alternateEndian]), ba.readInt());
+
+			var leBA:BinaryData = new BinaryData();
+			leBA.endian = Endian.LITTLE_ENDIAN;
+			var beBA:BinaryData = new BinaryData();
+			beBA.endian = Endian.BIG_ENDIAN;
+			//int writing
+			beBA.writeInt(-500);
+			leBA.writeInt(-500);
+			//check they represent reversed byte sequence
+			Assert.assertTrue(reversedBytesMatch(beBA,leBA,4));
+			beBA.position=0;
+			leBA.position=0;
+			//check they each read back to the same uint value
+			Assert.assertEquals('big endian',4294966796,beBA.readUnsignedInt());
+			Assert.assertEquals('little endian',4294966796,leBA.readUnsignedInt());
+
+			beBA.position=0;
+			leBA.position=0;
+			//uint writing
+			beBA.writeUnsignedInt(4294966796);
+			leBA.writeUnsignedInt(4294966796);
+			//check they represent reversed byte sequence
+			Assert.assertTrue(reversedBytesMatch(beBA,leBA,4));
+			beBA.position=0;
+			leBA.position=0;
+			//check they each read back to the same uint value
+			Assert.assertEquals('big endian',4294966796,beBA.readUnsignedInt());
+			Assert.assertEquals('little endian',4294966796,leBA.readUnsignedInt());
+
+
+			beBA.position=0;
+			leBA.position=0;
+
+			//check they each read back to the same int value
+			Assert.assertEquals('big endian',-500,beBA.readInt());
+			Assert.assertEquals('little endian',-500,leBA.readInt());
+
+
+			beBA.position=0;
+			leBA.position=0;
+
+			//short writing
+			beBA.writeShort(-500);
+			leBA.writeShort(-500);
+			//check they represent reversed byte sequence
+			Assert.assertTrue(reversedBytesMatch(beBA,leBA,2));
+			beBA.position=0;
+			leBA.position=0;
+			//check they each read back to the same uint value
+			Assert.assertEquals('big endian',65036,beBA.readUnsignedShort());
+			Assert.assertEquals('little endian',65036,leBA.readUnsignedShort());
+
+
+			beBA.position=0;
+			leBA.position=0;
+
+			//check they each read back to the same int value
+			Assert.assertEquals('big endian',-500,beBA.readShort());
+			Assert.assertEquals('little endian',-500,leBA.readShort());
+
+		}
+
+
+		[Test]
+		public function testUTFRoundtripping():void
+		{
+
+			//test big-endian round-tripping
+			var ba:BinaryData = new BinaryData();
+			ba.endian = Endian.BIG_ENDIAN;
+			ba.writeUTF('This is a test');
+			//writeUTF
+			Assert.assertEquals("basic post-writeUTF position", 16, ba.position);
+			ba.position = 0;
+			Assert.assertEquals("utf big endian round-tripping", 'This is a test', ba.readUTF());
+
+			ba = new BinaryData();
+			//test little-endian round-tripping
+			ba.endian = Endian.LITTLE_ENDIAN;
+			ba.writeUTF('This is a test');
+			//writeUTF
+			Assert.assertEquals("basic post-writeUTF position", 16, ba.position);
+			ba.position = 0;
+			Assert.assertEquals("utf big endian round-tripping", 'This is a test', ba.readUTF());
+
+		}
+
+
+		[Test]
+		public function testShortRoundTripping():void
+		{
+			var ba:BinaryData = new BinaryData();
+			//test LITTLE_ENDIAN round-tripping
+			ba.endian = Endian.LITTLE_ENDIAN;
+			ba.writeShort(255);
+			ba.writeShort(-50);
+			ba.writeShort(50);
+			ba.position = 0;
+
+			Assert.assertEquals("Error testing post writeShort/readShort round-tripping", 6, ba.length);
+			Assert.assertEquals("Error testing post writeShort/readShort round-tripping", 255, ba.readShort());
+			Assert.assertEquals("Error testing post writeShort/readShort round-tripping", -50, ba.readShort());
+			Assert.assertEquals("Error testing post writeShort/readShort round-tripping", 50, ba.readShort());
+
+			//test BIG_ENDIAN round-tripping
+
+			ba.position = 0;
+			ba.endian = Endian.BIG_ENDIAN ;
+			ba.writeShort(255);
+			ba.writeShort(-50);
+			ba.writeShort(50);
+			ba.position = 0;
+
+			Assert.assertEquals("Error testing post writeShort/readShort round-tripping", 6, ba.length);
+			Assert.assertEquals("Error testing post writeShort/readShort round-tripping", 255, ba.readShort());
+			Assert.assertEquals("Error testing post writeShort/readShort round-tripping", -50, ba.readShort());
+			Assert.assertEquals("Error testing post writeShort/readShort round-tripping", 50, ba.readShort());
+		}
+
+
+		[Test]
+		public function testUnsignedShortRoundTripping():void
+		{
+			var ba:BinaryData = new BinaryData();
+			//test LITTLE_ENDIAN round-tripping
+			ba.endian = Endian.LITTLE_ENDIAN;
+			ba.writeShort(255);
+			ba.writeShort(-50);
+			ba.writeShort(50);
+			ba.position = 0;
+
+			Assert.assertEquals("Error testing post unsigned writeShort/readShort round-tripping", 6, ba.length);
+			Assert.assertEquals("Error testing post unsigned writeShort/readShort round-tripping", 255, ba.readUnsignedShort());
+			Assert.assertEquals("Error testing post unsigned writeShort/readShort round-tripping", 65486, ba.readUnsignedShort());
+			Assert.assertEquals("Error testing post unsigned writeShort/readShort round-tripping", 50, ba.readUnsignedShort());
+
+			//test BIG_ENDIAN round-tripping
+
+			ba.position = 0;
+			ba.endian = Endian.BIG_ENDIAN ;
+			ba.writeShort(255);
+			ba.writeShort(-50);
+			ba.writeShort(50);
+			ba.position = 0;
+
+			Assert.assertEquals("Error testing post unsigned writeShort/readShort round-tripping", 6, ba.length);
+			Assert.assertEquals("Error testing post unsigned writeShort/readShort round-tripping", 255, ba.readUnsignedShort());
+			Assert.assertEquals("Error testing post unsigned writeShort/readShort round-tripping", 65486, ba.readUnsignedShort());
+			Assert.assertEquals("Error testing post unsigned writeShort/readShort round-tripping", 50, ba.readUnsignedShort());
+		}
+
+		[Test]
+		public function testIntRoundTripping():void
+		{
+			var ba:BinaryData = new BinaryData();
+			//test LITTLE_ENDIAN round-tripping
+			ba.endian = Endian.LITTLE_ENDIAN;
+			ba.writeInt(65536);
+			ba.writeInt(-50);
+			ba.writeInt(50);
+			ba.position = 0;
+
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping", 12, ba.length);
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping", 65536, ba.readInt());
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping", -50, ba.readInt());
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping", 50, ba.readInt());
+
+			//test BIG_ENDIAN round-tripping
+
+			ba.position = 0;
+			ba.endian = Endian.BIG_ENDIAN ;
+			ba.writeInt(65536);
+			ba.writeInt(-50);
+			ba.writeInt(50);
+			ba.position = 0;
+
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping", 12, ba.length);
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping", 65536, ba.readInt());
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping", -50, ba.readInt());
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping", 50, ba.readInt());
+		}
+
+
+		[Test]
+		public function testUnsignedIntRoundTripping():void
+		{
+			var ba:BinaryData = new BinaryData();
+			//test LITTLE_ENDIAN round-tripping
+			ba.endian = Endian.LITTLE_ENDIAN;
+			ba.writeUnsignedInt(65536);
+			ba.writeUnsignedInt(-50);
+			ba.writeUnsignedInt(50);
+			ba.position = 0;
+
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping", 12, ba.length);
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping",65536, ba.readUnsignedInt());
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping", 4294967246, ba.readUnsignedInt());
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping", 50, ba.readUnsignedInt());
+
+			//test BIG_ENDIAN round-tripping
+
+			ba.position = 0;
+			ba.endian = Endian.BIG_ENDIAN ;
+			ba.writeUnsignedInt(65536);
+			ba.writeUnsignedInt(-50);
+			ba.writeUnsignedInt(50);
+			ba.position = 0;
+
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping", 12, ba.length);
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping",65536, ba.readUnsignedInt());
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping", 4294967246, ba.readUnsignedInt());
+			Assert.assertEquals("Error testing post writeInt/readInt round-tripping", 50, ba.readUnsignedInt());
+		}
+
+		[Test]
+		public function testFloatRoundTripping():void
+		{
+			var ble:BinaryData = new BinaryData();
+			//test LITTLE_ENDIAN round-tripping
+			ble.endian = Endian.LITTLE_ENDIAN;
+			ble.writeFloat(86.54);
+
+
+			Assert.assertEquals("Error testing post writeFloat/readFloat round-tripping", 4, ble.length);
+			Assert.assertEquals("Error testing post writeFloat/readFloat round-tripping", 4, ble.position);
+			//check bytes to account for precision loss between double and float comparisons
+			Assert.assertTrue("Error testing post writeFloat/readFloat round-tripping", bytesMatchExpectedData(ble,[123,20,173,66]));
+
+			var bbe:BinaryData = new BinaryData();
+			//test BIG_ENDIAN round-tripping
+			bbe.endian = Endian.BIG_ENDIAN;
+			bbe.writeFloat(86.54);
+
+
+			Assert.assertEquals("Error testing post writeFloat/readFloat round-tripping", 4, bbe.length);
+			Assert.assertEquals("Error testing post writeFloat/readFloat round-tripping", 4, bbe.position);
+			//check bytes to account for precision loss between double and float comparisons
+			Assert.assertTrue("Error testing post writeFloat/readFloat round-tripping", bytesMatchExpectedData(bbe,[66,173,20,123]));
+
+
+		}
+
+
+		[Test]
+		public function testDoubleRoundTripping():void
+		{
+
+			var ble:BinaryData = new BinaryData();
+			//test LITTLE_ENDIAN round-tripping
+			ble.endian = Endian.LITTLE_ENDIAN;
+			ble.writeDouble(86.54);
+
+
+			Assert.assertEquals("Error testing post writeDouble/readDouble round-tripping", 8, ble.length);
+			Assert.assertEquals("Error testing post writeDouble/readDouble round-tripping", 8, ble.position);
+
+			//check bytes
+			Assert.assertTrue("Error testing post writeDouble/readDouble round-tripping", bytesMatchExpectedData(ble,[195,245,40,92,143,162,85,64]));
+
+			var bbe:BinaryData = new BinaryData();
+			//test BIG_ENDIAN round-tripping
+			bbe.endian = Endian.BIG_ENDIAN;
+			bbe.writeDouble(86.54);
+
+
+			Assert.assertEquals("Error testing post writeDouble/readDouble round-tripping", 8, bbe.length);
+			Assert.assertEquals("Error testing post writeDouble/readDouble round-tripping", 8, bbe.position);
+			//check bytes
+
+			Assert.assertTrue("Error testing post writeDouble/readDouble round-tripping", bytesMatchExpectedData(bbe,[64,85,162,143,92,40,245,195]));
+
+
+			ble.position = 0;
+			bbe.position = 0;
+			Assert.assertEquals("Error testing post writeDouble/readDouble round-tripping", 86.54, bbe.readDouble());
+			Assert.assertEquals("Error testing post writeDouble/readDouble round-tripping", 86.54, ble.readDouble());
+
+			Assert.assertEquals("Error testing post writeDouble/readDouble round-tripping", 8, bbe.position);
+			Assert.assertEquals("Error testing post writeDouble/readDouble round-tripping", 8, ble.position);
+
+		}
+
+
+
+		[Test]
+		public function testWriteBytes():void
+		{
+			var ba:BinaryData = new BinaryData();
+			for (var i:int=0;i<50;i++) ba.writeByte(i);
+
+
+			var newBa:BinaryData = new BinaryData();
+			newBa.writeBytes(ba);
+
+			Assert.assertEquals("BinaryData writeBytes: length", 50, newBa.length);
+			Assert.assertEquals("BinaryData writeBytes: position", 50, newBa.position);
+
+			for (i=0;i<50;i++) {
+				Assert.assertEquals("BinaryData writeBytes: content check", i, newBa.array[i]);
+			}
+
+
+
+		}
+
+		[Test]
+		public function testReadBytes():void
+		{
+			var ba:BinaryData = new BinaryData();
+			for (var i:int=0;i<50;i++) ba.writeByte(i);
+			ba.position=0;
+			var newBa:BinaryData = new BinaryData();
+
+			ba.readBytes(newBa,5,10);
+			Assert.assertEquals("BinaryData readBytes: position", 10, ba.position);
+			Assert.assertEquals("BinaryData readBytes: length", 15, newBa.length);
+			Assert.assertEquals("BinaryData readBytes: position", 0, newBa.position);
+			var expected:Array = [0,0,0,0,0,0,1,2,3,4,5,6,7,8,9];
+			for (i=5;i<15;i++) {
+				Assert.assertEquals("BinaryData readBytes: content check", expected[i], newBa.array[i]);
+			}
+		}
+
+
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/core/StrandTesterTest.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/core/StrandTesterTest.as b/manualtests/GenericTests/src/flexUnitTests/core/StrandTesterTest.as
new file mode 100644
index 0000000..f6715bb
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/core/StrandTesterTest.as
@@ -0,0 +1,55 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests.core
+{
+    import flexunit.framework.Assert;
+    
+    import org.apache.flex.core.Strand;
+    
+    public class StrandTesterTest
+    {		
+        [Before]
+        public function setUp():void
+        {
+        }
+        
+        [After]
+        public function tearDown():void
+        {
+        }
+        
+        [BeforeClass]
+        public static function setUpBeforeClass():void
+        {
+        }
+        
+        [AfterClass]
+        public static function tearDownAfterClass():void
+        {
+        }
+        
+        [Test]
+        public function testIdProperty():void
+        {
+            var strand:Strand = new Strand();
+            strand.id = "foo";
+            Assert.assertEquals("Error testing Srand.id", "foo",strand.id);
+        }        
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/jira/JiraTesterTest.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/jira/JiraTesterTest.as b/manualtests/GenericTests/src/flexUnitTests/jira/JiraTesterTest.as
new file mode 100644
index 0000000..c361f39
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/jira/JiraTesterTest.as
@@ -0,0 +1,73 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests.jira
+{
+    import flexunit.framework.Assert;
+
+    
+    public class JiraTesterTest
+    {		
+		public static var isJS:Boolean;
+        [BeforeClass]
+        public static function setUpBeforeClass():void
+        {
+            var js:Boolean = false;
+            try {
+                var check:* = getDefinitionByName("flash.system.Capabilities");
+            } catch (e:Error) {
+                js = true;
+            }
+            //if this next reference to 'check' is not included, then the above try/catch code
+            // appears to be optimized away in js-release mode
+            //todo: this is inconsistent with swf, need to create simple test case for jx compiler/gcc
+            if (check == null) {
+                js = true;
+            }
+            isJS = js;
+        }
+		
+		[AfterClass]
+        public static function tearDownAfterClass():void
+        {
+        }
+	
+	
+        [Before]
+        public function setUp():void
+        {
+        }
+        
+        [After]
+        public function tearDown():void
+        {
+        }
+        
+       
+        /*
+		// TEST METHODS 
+		*/
+        
+		//example, postfix the test method with JIRA issue reference:
+        /*[Test]
+        public function testJIRA_FLEX_9999():void
+        {
+
+        }*/    
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/observedbugs/ObservedBugTests.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/observedbugs/ObservedBugTests.as b/manualtests/GenericTests/src/flexUnitTests/observedbugs/ObservedBugTests.as
new file mode 100644
index 0000000..0a805cc
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/observedbugs/ObservedBugTests.as
@@ -0,0 +1,86 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests.observedbugs
+{
+    import flexunit.framework.Assert;
+    import org.apache.flex.reflection.*;
+    
+    public class ObservedBugTests
+    {		
+       
+        public static var isJS:Boolean;
+        [BeforeClass]
+        public static function setUpBeforeClass():void
+        {
+            var js:Boolean = false;
+            try {
+                var check:* = getDefinitionByName("flash.system.Capabilities");
+            } catch (e:Error) {
+                js = true;
+            }
+            //if this next reference to 'check' is not included, then the above try/catch code
+            // appears to be optimized away in js-release mode
+            //todo: this is inconsistent with swf, need to create simple test case for jx compiler/gcc
+            if (check == null) {
+                js = true;
+            }
+            isJS = js;
+        }
+        
+        [AfterClass]
+        public static function tearDownAfterClass():void
+        {
+        }
+		
+		 [Before]
+        public function setUp():void
+        {
+        }
+        
+        [After]
+        public function tearDown():void
+        {
+        }
+
+
+        [TestVariance(variance="JS",description="Variance in test, this test fails in JS-Release mode only")]
+        [Test]
+        public function testTryCatchJSReleaseModeFail():void
+        {
+            var js:Boolean = false;
+            try {
+                var check:* = getDefinitionByName("flash.system.Capabilities");
+            } catch (e:Error) {
+                js = true;
+            }
+			
+			//if this next reference to 'check' variable is not included, then the above try/catch code
+            // appears to be optimized away in js-release mode
+            //todo: this is inconsistent with swf
+            /* if (check == null) {
+                js = true;
+            }*/
+            Assert.assertTrue("Unexpected value following try/catch",(js==isJS));
+
+
+        }
+		
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/reflection/ReflectionTesterTest.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/reflection/ReflectionTesterTest.as b/manualtests/GenericTests/src/flexUnitTests/reflection/ReflectionTesterTest.as
new file mode 100644
index 0000000..0ea5126
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/reflection/ReflectionTesterTest.as
@@ -0,0 +1,368 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests.reflection
+{
+    import flexunit.framework.Assert;
+	import flexUnitTests.reflection.support.*;
+    import org.apache.flex.reflection.*;
+    
+    public class ReflectionTesterTest
+    {		
+       
+        public static var isJS:Boolean;
+        [BeforeClass]
+        public static function setUpBeforeClass():void
+        {
+            var js:Boolean = false;
+            try {
+                var check:* = getDefinitionByName("flash.system.Capabilities");
+            } catch (e:Error) {
+                js = true;
+            }
+            //if this next reference to 'check' is not included, then the above try/catch code
+            //appears to be optimized away in js-release mode
+            //a separate test has been created for this
+            if (check == null) {
+                js = true;
+            }
+            isJS = js;
+        }
+        
+        [AfterClass]
+        public static function tearDownAfterClass():void
+        {
+        }
+		
+		 [Before]
+        public function setUp():void
+        {
+        }
+        
+        [After]
+        public function tearDown():void
+        {
+        }
+
+        private static function retrieveItemWithName(collection:Array, name:String):DefinitionBase {
+            var ret:DefinitionBase;
+            var i:uint=0,l:uint=collection.length;
+            for (;i<l;i++) {
+                if (collection[i].name==name) {
+                    ret = collection[i];
+                    break;
+                }
+            }
+
+            return ret;
+        }
+
+
+        [Test]
+        public function testBasicDescribeTypeClass():void
+        {
+            var def:TypeDefinition = describeType(TestClass2);
+
+            Assert.assertEquals("Unexpected package name",def.packageName,"flexUnitTests.reflection.support");
+            Assert.assertEquals("Unexpected type name",def.name,"TestClass2");
+
+            var variables:Array = def.variables;
+            Assert.assertEquals("unexpected variables length",1,variables.length);
+
+
+            var methods:Array = def.methods;
+            Assert.assertEquals("unexpected methods length",2,methods.length);
+
+            var accessors:Array = def.accessors;
+            Assert.assertEquals("unexpected accessors length",3,accessors.length);
+
+            var constructor:MethodDefinition = def.constructorMethod;
+            Assert.assertEquals("unexpected constructor declaredBy",
+                    "flexUnitTests.reflection.support.TestClass2",
+                    constructor.declaredBy.qualifiedName);
+
+            Assert.assertEquals("unexpected constructor params",
+                    1,
+                    constructor.parameters.length);
+
+            var meta:Array = def.retrieveMetaDataByName("TestMeta");
+            Assert.assertEquals("unexpected class specific meta length",
+                    1,
+                    meta.length);
+
+
+            def = describeType(TestClass4);
+            Assert.assertEquals("Unexpected package name",def.packageName,"flexUnitTests.reflection.support");
+            Assert.assertEquals("Unexpected type name",def.name,"TestClass4");
+
+            variables = def.variables;
+            Assert.assertEquals("unexpected variables length",2,variables.length);
+
+
+            methods = def.methods;
+            Assert.assertEquals("unexpected methods length",4,methods.length);
+
+            accessors = def.accessors;
+            Assert.assertEquals("unexpected accessors length",6,accessors.length);
+
+            constructor = def.constructorMethod;
+            Assert.assertEquals("unexpected constructor declaredBy",
+                    "flexUnitTests.reflection.support.TestClass4",
+                    constructor.declaredBy.qualifiedName);
+
+            Assert.assertEquals("unexpected constructor params",
+                    0,
+                    constructor.parameters.length);
+
+
+
+        }
+
+
+
+
+        [TestVariance(variance="JS",description="Variance in test due to current inability for js target to reflect into non-FlexJS base classes or typedefs")]
+		[Test]
+        public function testDescribeTypeClass():void
+        {
+            var def:TypeDefinition = describeType(TestClass1);
+            var expected:*;
+            Assert.assertEquals("Unexpected package name","flexUnitTests.reflection.support",def.packageName);
+            Assert.assertEquals("Unexpected type name",def.name,"TestClass1");
+
+            var variables:Array = def.variables;
+            Assert.assertEquals("unexpected instance variables length",3,variables.length);
+
+            //there is a difference based on the EventDispatcher inheritance chain differences between js and swf:
+            expected = isJS ? 3 : 7;
+            var methods:Array = def.methods;
+            Assert.assertEquals("unexpected instance methods length",expected,methods.length);
+
+            var accessors:Array = def.accessors;
+            Assert.assertEquals("unexpected instance accessors length",4,accessors.length);
+
+            var staticVariables:Array =def.staticVariables;
+            Assert.assertEquals("unexpected static variables length",2,staticVariables.length);
+
+            var staticMethods:Array = def.staticMethods;
+            Assert.assertEquals("unexpected static methods length",1,staticMethods.length);
+            //there is a difference based on the native inheritance of readonly 'prototype' not collected from 'Class' (or Object for js):
+            expected = isJS ? 3 : 4;
+            var staticAccessors:Array = def.staticAccessors;
+            Assert.assertEquals("unexpected static accessors length",expected,staticAccessors.length);
+
+			
+        }
+
+        [TestVariance(variance="JS",description="Variance in test due to current inability for js target to reflect into non-FlexJS base classes or typedefs")]
+        [Test]
+        public function testDescribeTypeInstance():void
+        {
+            var def:TypeDefinition = describeType(new TestClass1());
+            var expected:*;
+            Assert.assertEquals("Unexpected package name","flexUnitTests.reflection.support",def.packageName);
+            Assert.assertEquals("Unexpected type name",def.name,"TestClass1");
+
+            var variables:Array = def.variables;
+            Assert.assertEquals("unexpected instance variables length",3,variables.length);
+
+            //there is a difference based on the EventDispatcher inheritance chain differences between js and swf:
+            expected = isJS ? 3 : 7;
+            var methods:Array = def.methods;
+            Assert.assertEquals("unexpected instance methods length",expected,methods.length);
+
+            var accessors:Array = def.accessors;
+            Assert.assertEquals("unexpected instance accessors length",4,accessors.length);
+
+            var staticVariables:Array =def.staticVariables;
+            Assert.assertEquals("unexpected static variables length",2,staticVariables.length);
+
+            var staticMethods:Array = def.staticMethods;
+            Assert.assertEquals("unexpected static methods length",1,staticMethods.length);
+            //there is a difference based on the native inheritance of readonly 'prototype' not collected from 'Class' (or Object for js):
+            expected = isJS ? 3 : 4;
+            var staticAccessors:Array = def.staticAccessors;
+            Assert.assertEquals("unexpected static accessors length",expected,staticAccessors.length);
+
+
+        }
+
+        [TestVariance(variance="JS",description="Variance in baseClasses due to current inability for js target to reflect into non-FlexJS base classes or typedefs")]
+        [Test]
+        public function testBaseClasses():void{
+            var def:TypeDefinition = describeType(TestClass1);
+
+            var baseClasses:Array = def.baseClasses;
+            var expected:uint = isJS ? 1 : 3;
+            Assert.assertEquals("unexpected baseclasses length",expected,baseClasses.length);
+        }
+
+
+        [Test]
+        public function testMemberAccess():void{
+            //all of these should succeed without error
+            var inst:TestClass2 = new TestClass2("");
+            var def:TypeDefinition = describeType(inst);
+
+            /** instance variables **/
+
+            var variables:Array = def.variables;
+            var variable:VariableDefinition = variables[0];
+            Assert.assertEquals("unexpected variable name","testVar",variable.name);
+            var meta:MetaDataDefinition = variable.retrieveMetaDataByName("TestMeta")[0];
+            Assert.assertEquals("unexpected meta name","TestMeta",meta.name);
+
+            var metaArg:MetaDataArgDefinition = meta.getArgsByKey("foo")[0];
+            Assert.assertEquals("unexpected meta arg name","foo",metaArg.name);
+            Assert.assertEquals("unexpected meta arg value","instanceVariable",metaArg.value);
+
+            Assert.assertEquals("unexpected reflection initial variable value","testVar_val",inst[variable.name]);
+
+            var accessors:Array = def.accessors;
+            var testReadOnly:AccessorDefinition = retrieveItemWithName(accessors,"testReadOnly") as AccessorDefinition;
+            meta = testReadOnly.retrieveMetaDataByName("TestMeta")[0];
+            Assert.assertEquals("unexpected meta name","TestMeta",meta.name);
+
+            metaArg = meta.getArgsByKey("foo")[0];
+            Assert.assertEquals("unexpected meta arg name","foo",metaArg.name);
+            Assert.assertEquals("unexpected meta arg value","instanceAccessor",metaArg.value);
+
+            /** instance accessors **/
+            var testWriteOnly:AccessorDefinition = retrieveItemWithName(accessors,"testWriteOnly") as AccessorDefinition;
+            var testReadWrite:AccessorDefinition = retrieveItemWithName(accessors,"testReadWrite") as AccessorDefinition;
+            Assert.assertNotNull(testReadOnly);
+            Assert.assertNotNull(testWriteOnly);
+            Assert.assertNotNull(testReadWrite);
+
+            Assert.assertEquals("unexpected accessor initial value","instanceAccessor_initial_value",inst[testReadOnly.name]);
+            Assert.assertEquals("unexpected accessor initial value","instanceAccessor_initial_value",inst[testReadWrite.name]);
+
+            inst[testWriteOnly.name] = "test";
+            Assert.assertEquals("unexpected accessor initial value","test",inst[testReadOnly.name]);
+            Assert.assertEquals("unexpected accessor initial value","test",inst[testReadWrite.name]);
+
+            inst[testReadWrite.name] = "test2";
+            Assert.assertEquals("unexpected accessor initial value","test2",inst[testReadOnly.name]);
+            Assert.assertEquals("unexpected accessor initial value","test2",inst[testReadWrite.name]);
+
+            /** instance methods **/
+            var methods:Array = def.methods;
+            var testMethod:MethodDefinition = retrieveItemWithName(methods,"testMethod") as MethodDefinition;
+            meta = testMethod.retrieveMetaDataByName("TestMeta")[0];
+            Assert.assertEquals("unexpected meta name","TestMeta",meta.name);
+
+            metaArg = meta.getArgsByKey("foo")[0];
+            Assert.assertEquals("unexpected meta arg name","foo",metaArg.name);
+            Assert.assertEquals("unexpected meta arg value","instanceMethod",metaArg.value);
+            Assert.assertEquals("unexpected parameter count",0,testMethod.parameters.length);
+            inst[testMethod.name]();
+            Assert.assertEquals("unexpected method invocation result","testMethod was called",inst[testReadWrite.name]);
+
+            var testMethodWithArgs:MethodDefinition = retrieveItemWithName(methods,"testMethodWithArgs") as MethodDefinition;
+            Assert.assertEquals("unexpected parameter count",2,testMethodWithArgs.parameters.length);
+            Assert.assertTrue("unexpected method invocation result",inst[testMethodWithArgs.name]("test"));
+            Assert.assertFalse("unexpected method invocation result",inst[testMethodWithArgs.name]("test", false));
+            Assert.assertEquals("unexpected method invocation result","testMethodWithArgs was called",inst[testReadWrite.name]);
+
+
+
+            /** static vars **/
+            variables = def.staticVariables;
+
+            variable = variables[0];
+            Assert.assertEquals("unexpected variable name","testStaticVar",variable.name);
+            meta = variable.retrieveMetaDataByName("TestMeta")[0];
+            Assert.assertEquals("unexpected meta name","TestMeta",meta.name);
+
+            metaArg = meta.getArgsByKey("foo")[0];
+            Assert.assertEquals("unexpected meta arg name","foo",metaArg.name);
+            Assert.assertEquals("unexpected meta arg value","staticVariable",metaArg.value);
+
+            Assert.assertEquals("unexpected reflection initial variable value","testStaticVar_val",TestClass2[variable.name]);
+
+            /** static accessors **/
+
+            accessors = def.staticAccessors;
+            testReadOnly = retrieveItemWithName(accessors,"testStaticReadOnly") as AccessorDefinition;
+            meta = testReadOnly.retrieveMetaDataByName("TestMeta")[0];
+            Assert.assertEquals("unexpected meta name","TestMeta",meta.name);
+
+            metaArg = meta.getArgsByKey("foo")[0];
+            Assert.assertEquals("unexpected meta arg name","foo",metaArg.name);
+            Assert.assertEquals("unexpected meta arg value","staticAccessor",metaArg.value);
+
+
+            testWriteOnly = retrieveItemWithName(accessors,"testStaticWriteOnly") as AccessorDefinition;
+            testReadWrite = retrieveItemWithName(accessors,"testStaticReadWrite") as AccessorDefinition;
+            Assert.assertNotNull(testReadOnly);
+            Assert.assertNotNull(testWriteOnly);
+            Assert.assertNotNull(testReadWrite);
+
+            Assert.assertEquals("unexpected accessor initial value","staticAccessor_initial_value",TestClass2[testReadOnly.name]);
+            Assert.assertEquals("unexpected accessor initial value","staticAccessor_initial_value",TestClass2[testReadWrite.name]);
+
+            TestClass2[testWriteOnly.name] = "test";
+            Assert.assertEquals("unexpected accessor initial value","test",TestClass2[testReadOnly.name]);
+            Assert.assertEquals("unexpected accessor initial value","test",TestClass2[testReadWrite.name]);
+
+            TestClass2[testReadWrite.name] = "test2";
+            Assert.assertEquals("unexpected accessor initial value","test2",TestClass2[testReadOnly.name]);
+            Assert.assertEquals("unexpected accessor initial value","test2",TestClass2[testReadWrite.name]);
+
+
+            /** static methods **/
+            methods = def.staticMethods;
+            testMethod = retrieveItemWithName(methods,"testStaticMethod") as MethodDefinition;
+            meta = testMethod.retrieveMetaDataByName("TestMeta")[0];
+            Assert.assertEquals("unexpected meta name","TestMeta",meta.name);
+
+            metaArg = meta.getArgsByKey("foo")[0];
+            Assert.assertEquals("unexpected meta arg name","foo",metaArg.name);
+            Assert.assertEquals("unexpected meta arg value","staticMethod",metaArg.value);
+            Assert.assertEquals("unexpected parameter count",0,testMethod.parameters.length);
+            TestClass2[testMethod.name]();
+            Assert.assertEquals("unexpected method invocation result","testStaticMethod was called",TestClass2[testReadWrite.name]);
+
+            testMethodWithArgs = retrieveItemWithName(methods,"testStaticMethodWithArgs") as MethodDefinition;
+            Assert.assertEquals("unexpected parameter count",2,testMethodWithArgs.parameters.length);
+            Assert.assertTrue("unexpected method invocation result",TestClass2[testMethodWithArgs.name]("test"));
+            Assert.assertFalse("unexpected method invocation result",TestClass2[testMethodWithArgs.name]("test", false));
+            Assert.assertEquals("unexpected method invocation result","testStaticMethodWithArgs was called",TestClass2[testReadWrite.name]);
+
+        }
+
+
+		[Test]
+        public function testIntefaceReflection():void{
+            var def:TypeDefinition = describeType(ITestInterface4);
+            Assert.assertEquals("unexpected kind value","interface",def.kind);
+            Assert.assertEquals("unexpected interfaces length",3,def.interfaces.length);
+            Assert.assertEquals("unexpected accessors length",1,def.accessors.length);
+            Assert.assertEquals("unexpected methods length",1,def.methods.length);
+
+            Assert.assertEquals("unexpected variables length",0,def.variables.length);
+            Assert.assertEquals("unexpected staticVariables length",0,def.staticVariables.length);
+            Assert.assertEquals("unexpected variables length",0,def.staticMethods.length);
+            Assert.assertEquals("unexpected staticVariables length",0,def.staticAccessors.length);
+            Assert.assertNull("unexpected constructor Method definition",def.constructorMethod);
+        }
+
+
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface.as b/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface.as
new file mode 100644
index 0000000..b5a2249
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface.as
@@ -0,0 +1,27 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests.reflection.support
+{
+
+	public interface ITestInterface
+	{
+		function someMethod(compulsoryArg:int, optArg:String=null):TestClass1;
+
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface2.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface2.as b/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface2.as
new file mode 100644
index 0000000..f69f9b7
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface2.as
@@ -0,0 +1,29 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests.reflection.support
+{
+
+	public interface ITestInterface2 extends ITestInterface
+	{
+		function someMethod2(compulsoryArg:int, optArg:String=null):TestClass1;
+		
+		function get someValue2():Boolean;
+
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface3.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface3.as b/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface3.as
new file mode 100644
index 0000000..83d05ee
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface3.as
@@ -0,0 +1,27 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests.reflection.support
+{
+
+	public interface ITestInterface3
+	{
+			//empty
+
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface4.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface4.as b/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface4.as
new file mode 100644
index 0000000..7a032f5
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/reflection/support/ITestInterface4.as
@@ -0,0 +1,29 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests.reflection.support
+{
+
+	public interface ITestInterface4 extends ITestInterface2, ITestInterface3
+	{
+		function someMethod3(compulsoryArg:int, optArg:String=null):TestClass1;
+		
+		function get someValue3():Boolean;
+
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/438cb014/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass1.as
----------------------------------------------------------------------
diff --git a/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass1.as b/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass1.as
new file mode 100644
index 0000000..76ac834
--- /dev/null
+++ b/manualtests/GenericTests/src/flexUnitTests/reflection/support/TestClass1.as
@@ -0,0 +1,91 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests.reflection.support
+{
+
+	import org.apache.flex.reflection.TypeDefinition;
+
+	[RemoteClass(alias="TestClass1_alias")]
+	public class TestClass1 implements ITestInterface
+	{
+		public function TestClass1()
+		{
+			var something:ITestInterface2;
+		}
+		
+		[Bindable]
+		[Event(name="foo", type="org.apache.flex.events.Event")]
+		public var bindableVar:String;
+		[Event(name="foo", type="org.apache.flex.events.Event")]
+		public var temp:Boolean;
+		
+		public static var tempStatic:Boolean;
+		
+		public var typeDef:TypeDefinition;
+		
+		public var testVar:String="testVar_val";
+		
+		public static var staticTestVar:String="statictestVar_val";
+		
+		private var _atestval:String="accessorTest_val";
+		public function get accessorTest():String{
+			return _atestval;
+		}
+		
+		public function set accessorTest(val:String):void{
+			_atestval = val;
+		}
+		
+		private static var _staticAtestval:String="staticAccessorTest_val";
+		public static function get staticAccessorTest():String{
+			return _staticAtestval;
+		}
+		
+		public static function set staticAccessorTest(val:String):void{
+			_staticAtestval = val;
+		}
+		
+		[Bindable]
+		public static var bindableStaticVar:String;
+		
+		[Bindable]
+		public var bindableInstanceVar:String;
+		
+		
+		public function someMethod(compulsoryArg:int, optArg:String=null):TestClass1{
+			return null;
+		}
+		
+		public static function someStaticMethod(compulsoryArg:int, optArg:String=null):TestClass1{
+			return null;
+		}
+		
+		public function get testAccessorType():TypeDefinition {
+			return null;
+		}
+		
+		public const instanceConstant:String="instanceConstant_val";
+		
+		
+		public static const staticConstant:String="staticConstant_val";
+		
+
+
+	}
+}
\ No newline at end of file


[07/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - try selenium 2.53.1

Posted by ha...@apache.org.
try selenium 2.53.1


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/2a981052
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/2a981052
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/2a981052

Branch: refs/heads/refactor-sprite
Commit: 2a9810521edc8dd299913435fb2e354a986b1a2c
Parents: 3513542
Author: Alex Harui <ah...@apache.org>
Authored: Sun Sep 11 07:27:05 2016 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Sun Sep 11 07:27:05 2016 -0700

----------------------------------------------------------------------
 build.xml                     | 4 ++--
 marmotinni/java/downloads.xml | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/2a981052/build.xml
----------------------------------------------------------------------
diff --git a/build.xml b/build.xml
index 0195243..997fb8d 100644
--- a/build.xml
+++ b/build.xml
@@ -1180,7 +1180,7 @@
 		    <arg value="script=${basedir}/mustella/tests/basicTests/halo/scripts/CheckBoxTestScript.mxml" />
 		    <!--<arg value="showSteps=true" />-->
             <classpath>
-                <pathelement location="${basedir}/marmotinni/java/lib/selenium/selenium-java-2.53.0.jar"/>
+                <pathelement location="${basedir}/marmotinni/java/lib/selenium/selenium-java-2.53.1.jar"/>
                 <pathelement location="${basedir}/marmotinni/java/lib/selenium/libs/apache-mime4j-0.6.jar"/>
                 <pathelement location="${basedir}/marmotinni/java/lib/selenium/libs/bsh-2.0b4.jar"/>
                 <pathelement location="${basedir}/marmotinni/java/lib/selenium/libs/cglib-nodep-2.1_3.jar"/>
@@ -1281,7 +1281,7 @@
         <mkdir dir="${basedir}/mustella/java/bin"/>
         <javac srcdir="${basedir}/mustella/java/src/marmotinni" destdir="${basedir}/mustella/java/bin" debug="off" optimize="on">
             <classpath>
-                <pathelement location="${basedir}/marmotinni/java/lib/selenium/selenium-java-2.53.0.jar"/>
+                <pathelement location="${basedir}/marmotinni/java/lib/selenium/selenium-java-2.53.1.jar"/>
                 <pathelement location="${basedir}/marmotinni/java/lib/selenium/libs/apache-mime4j-0.6.jar"/>
                 <pathelement location="${basedir}/marmotinni/java/lib/selenium/libs/bsh-2.0b4.jar"/>
                 <pathelement location="${basedir}/marmotinni/java/lib/selenium/libs/cglib-nodep-2.1_3.jar"/>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/2a981052/marmotinni/java/downloads.xml
----------------------------------------------------------------------
diff --git a/marmotinni/java/downloads.xml b/marmotinni/java/downloads.xml
index c644c75..0f2cf6b 100644
--- a/marmotinni/java/downloads.xml
+++ b/marmotinni/java/downloads.xml
@@ -33,8 +33,8 @@
 	-->
 	
     <property name="selenium2.jar.dir.name" value="2.53"/>
-    <property name="selenium2.jar.name" value="selenium-java-2.53.0"/>
-    <property name="selenium2.dir.name" value="selenium-2.53.0"/>
+    <property name="selenium2.jar.name" value="selenium-java-2.53.1"/>
+    <property name="selenium2.dir.name" value="selenium-2.53.1"/>
 	
     <!-- 
         Because the downloads requires a network connection and the JARs don't change very often, 


[08/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Modified the CSS definition for Image so its model and view are included for both SWF and JS production.

Posted by ha...@apache.org.
Modified the CSS definition for Image so its model and view are included for both SWF and JS production.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/72dfce04
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/72dfce04
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/72dfce04

Branch: refs/heads/refactor-sprite
Commit: 72dfce042363e12db8c642c74dbb9d1664cb4b98
Parents: 2a98105
Author: Peter Ent <pe...@apache.org>
Authored: Mon Sep 12 13:33:58 2016 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Mon Sep 12 13:33:58 2016 -0400

----------------------------------------------------------------------
 frameworks/projects/HTML/src/main/resources/defaults.css | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/72dfce04/frameworks/projects/HTML/src/main/resources/defaults.css
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/resources/defaults.css b/frameworks/projects/HTML/src/main/resources/defaults.css
index 51152e8..2610e53 100644
--- a/frameworks/projects/HTML/src/main/resources/defaults.css
+++ b/frameworks/projects/HTML/src/main/resources/defaults.css
@@ -182,6 +182,8 @@ HContainer
 Image
 {
 	vertical-align: top;
+	IBeadModel: ClassReference("org.apache.flex.html.beads.models.ImageModel");
+	IBeadView:  ClassReference("org.apache.flex.html.beads.ImageView");
 }
 
 ImageAndTextButton
@@ -488,12 +490,6 @@ HRule
     IBeadView:  ClassReference("org.apache.flex.html.beads.HRuleView");
 }
 
-Image
-{
-    IBeadModel: ClassReference("org.apache.flex.html.beads.models.ImageModel");
-    IBeadView:  ClassReference("org.apache.flex.html.beads.ImageView");
-}
-
 ImageButton
 {
     IBeadView: ClassReference("org.apache.flex.html.beads.ImageButtonView");


[16/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Updated DataProviderChangeNotifier to listen for replacement of the dataProvider itself.

Posted by ha...@apache.org.
Updated DataProviderChangeNotifier to listen for replacement of the dataProvider itself.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/e0ac88c5
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/e0ac88c5
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/e0ac88c5

Branch: refs/heads/refactor-sprite
Commit: e0ac88c5a8efed5c26b4d3a08d772714617b9988
Parents: f9c4a01
Author: Peter Ent <pe...@apache.org>
Authored: Mon Sep 19 15:38:24 2016 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Mon Sep 19 15:38:24 2016 -0400

----------------------------------------------------------------------
 .../html/beads/DataProviderChangeNotifier.as    | 42 +++++++++++++++++++-
 1 file changed, 41 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e0ac88c5/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataProviderChangeNotifier.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataProviderChangeNotifier.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataProviderChangeNotifier.as
index c639b90..a24810b 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataProviderChangeNotifier.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataProviderChangeNotifier.as
@@ -19,9 +19,12 @@
 package org.apache.flex.html.beads
 {
 	import org.apache.flex.core.IBead;
+	import org.apache.flex.core.IBeadModel;
 	import org.apache.flex.core.IDocument;
 	import org.apache.flex.core.ISelectionModel;
 	import org.apache.flex.core.IStrand;
+	import org.apache.flex.core.UIBase;
+	import org.apache.flex.events.IEventDispatcher;
 	import org.apache.flex.events.Event;
 	import org.apache.flex.collections.ArrayList;
 	
@@ -64,15 +67,30 @@ package org.apache.flex.html.beads
 		{
 			_strand = value;
 			
+			if (_strand[destinationPropertyName] == null) {
+				var model:IBeadModel = UIBase(_strand).model as IBeadModel;
+				IEventDispatcher(model).addEventListener(changeEventName, destinationChangedHandler);
+			}
+			else {
+				destinationChangedHandler(null);
+			}
+		}
+		
+		private function destinationChangedHandler(event:Event):void
+		{
 			if (_dataProvider == null) {
 				var object:Object = document[sourceID];
 				_dataProvider = object[propertyName] as ArrayList;
 			}
+			else {
+				_dataProvider.removeEventListener("itemAdded", handleItemAdded);
+				_dataProvider.removeEventListener("itemRemoved", handleItemRemoved);
+				_dataProvider.removeEventListener("itemUpdated", handleItemUpdated);
+			}
 			
 			_dataProvider.addEventListener("itemAdded", handleItemAdded);
 			_dataProvider.addEventListener("itemRemoved", handleItemRemoved);
 			_dataProvider.addEventListener("itemUpdated", handleItemUpdated);
-
 		}
 		
 		protected var document:Object;
@@ -85,6 +103,28 @@ package org.apache.flex.html.beads
 			this.document = document;
 		}
 		
+		private var _destinationPropertyName:String;
+		
+		public function get destinationPropertyName():String
+		{
+			return _destinationPropertyName;
+		}
+		public function set destinationPropertyName(value:String):void
+		{
+			_destinationPropertyName = value;
+		}
+		
+		private var _changeEventName:String;
+		
+		public function get changeEventName():String
+		{
+			return _changeEventName;
+		}
+		public function set changeEventName(value:String):void
+		{
+			_changeEventName = value;
+		}
+		
 		private var _sourceID:String;
 		
 		/**


[23/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Initial sweep through wide set of Reflection functionality. Currently only verified as compatible between platforms within the FlexJS classes. This update requires corresponding Falcon/Falcon

Posted by ha...@apache.org.
Initial sweep through wide set of Reflection functionality. Currently only verified as compatible between platforms within the FlexJS classes. This update requires corresponding Falcon/FalconJX updates


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/92c0a8b4
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/92c0a8b4
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/92c0a8b4

Branch: refs/heads/refactor-sprite
Commit: 92c0a8b46b931764376f198d417cf31ae557c35f
Parents: fd05c96
Author: greg-dove <gr...@gmail.com>
Authored: Mon Sep 26 15:16:27 2016 +1300
Committer: greg-dove <gr...@gmail.com>
Committed: Tue Sep 27 19:52:42 2016 +1300

----------------------------------------------------------------------
 .../flex/reflection/AccessorDefinition.as       |  86 ++
 .../apache/flex/reflection/DefinitionBase.as    |   4 +-
 .../flex/reflection/DefinitionWithMetaData.as   |  46 +-
 .../flex/reflection/MetaDataArgDefinition.as    |  24 +-
 .../flex/reflection/MetaDataDefinition.as       |  66 +-
 .../apache/flex/reflection/MethodDefinition.as  | 105 ++-
 .../flex/reflection/ParameterDefinition.as      |  84 ++
 .../apache/flex/reflection/TypeDefinition.as    | 823 ++++++++++++++++---
 .../flex/reflection/VariableDefinition.as       |  36 +-
 .../org/apache/flex/reflection/describeType.as  |  12 +-
 .../apache/flex/reflection/getAliasByClass.as   |  47 ++
 .../apache/flex/reflection/getClassByAlias.as   |  43 +
 .../flex/reflection/registerClassAlias.as       |  44 +
 13 files changed, 1259 insertions(+), 161 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/92c0a8b4/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/AccessorDefinition.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/AccessorDefinition.as b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/AccessorDefinition.as
new file mode 100644
index 0000000..e6cf2b4
--- /dev/null
+++ b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/AccessorDefinition.as
@@ -0,0 +1,86 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.reflection {
+    /**
+     *  The description of a Class or Interface accessor (get and/or set)
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+    public class AccessorDefinition extends VariableDefinition
+    {
+        public function AccessorDefinition(name:String, rawData:Object) {
+            super(name, rawData);
+        }
+        /**
+         * The type that defined this accessor
+         * This could be an ancestor class of the method's containing TypeDefinition
+         */
+        public function get declaredBy():TypeDefinition
+        {
+            COMPILE::SWF{
+                var declareBy:String = _rawData.@declaredBy;
+            }
+            COMPILE::JS{
+                var declareBy:String = _rawData.declaredBy;
+            }
+            return TypeDefinition.getDefinition(declareBy);
+        }
+
+
+        private var _access:String;
+        /**
+         * The type of access that this accessor has.
+         * One of: 'readonly', 'writeonly', or 'readwrite'
+         * Note, these values are all lower case (not camelCase).
+         */
+        public function get access():String
+        {
+            if (_access) return _access;
+
+            COMPILE::SWF {
+                _access=rawData.@access;
+            }
+            COMPILE::JS {
+                _access = rawData.access;
+            }
+
+            return _access;
+        }
+
+        /**
+         * A string representation of this accessor definition
+         */
+        override public function toString():String{
+            var s:String = "accessor: '"+name+"' access:"+access+", type:"+type.qualifiedName+", declaredBy:"+declaredBy.qualifiedName;
+            var meta:Array = metadata;
+            var i:uint;
+            var l:uint = meta.length;
+            if (l) {
+                s += "\n\tmetadata:";
+                for (i=0;i<l;i++) {
+                    s += "\n\t\t" + meta[i].toString().split("\n").join("\n\t\t");
+                }
+            }
+            return s;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/92c0a8b4/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/DefinitionBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/DefinitionBase.as b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/DefinitionBase.as
index f8bdd82..5868eaf 100755
--- a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/DefinitionBase.as
+++ b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/DefinitionBase.as
@@ -20,7 +20,7 @@ package org.apache.flex.reflection
 {
     
     /**
-     *  The description of a Class or Interface
+     *  The base class for all definition types
      * 
      *  @langversion 3.0
      *  @playerversion Flash 10.2
@@ -35,7 +35,7 @@ package org.apache.flex.reflection
             _rawData = rawData;
         }
         
-        private var _name:String;
+        protected var _name:String;
         public function get name():String
         {
             return _name;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/92c0a8b4/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/DefinitionWithMetaData.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/DefinitionWithMetaData.as b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/DefinitionWithMetaData.as
index b9179fe..e32d597 100755
--- a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/DefinitionWithMetaData.as
+++ b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/DefinitionWithMetaData.as
@@ -20,7 +20,8 @@ package org.apache.flex.reflection
 {
     
     /**
-     *  The description of a Class or Interface
+     *  The base class for definition types that can be decorated with metadata in actionscript
+     *  source code
      * 
      *  @langversion 3.0
      *  @playerversion Flash 10.2
@@ -33,21 +34,29 @@ package org.apache.flex.reflection
         {
             super(name, rawData);
         }
-        
+
+        COMPILE::SWF
+        protected var useFactory:Boolean;
+
+
+        private var _metaData:Array;
+        /**
+         * gets a copy of the metadata collection array
+         */
         public function get metadata():Array
         {
+            if (_metaData) return _metaData.slice();
             var results:Array = [];
-            
             COMPILE::SWF
             {
-                var xml:XML = rawData as XML;
+                var xml:XML = useFactory ? rawData.factory[0] as XML : rawData as XML;
                 var data:XMLList = xml.metadata;
                 var n:int = data.length();
                 for (var i:int = 0; i < n; i++)
                 {
                     var item:XML = data[i] as XML;
-                    var qname:String = item.@name;
-                    results.push(new MetaDataDefinition(qname, item));
+                    var metaName:String = item.@name;
+                    results[i] = new MetaDataDefinition(metaName, item);
                 }
             }
             COMPILE::JS
@@ -67,13 +76,32 @@ package org.apache.flex.reflection
                     var metadatas:Array = rdata.metadata();
                     if (metadatas)
                     {
-                        var n:int = metadatas.length;
-                        for each (var mdDef:Object in metadatas)
-                        results.push(new MetaDataDefinition(mdDef.name, mdDef));
+                        var i:uint = 0;
+                        var l:int = metadatas.length;
+                        for (;i<l;i++) {
+                            var mdDef:Object = metadatas[i];
+                            results[i] = new MetaDataDefinition(mdDef.name, mdDef);
+                        }
                     }
                 }
             }
+            _metaData = results.slice();
             return results;                        
         }
+
+        /**
+         * A convenience method for retrieving metadatas
+         * @param name the name of the metadata item to retrieve.
+         *        It can occur more than once, so an array is returned
+         * @return an array of all MetaDataDefinition items with matching 'name'
+         *
+         */
+        public function retrieveMetaDataByName(name:String):Array {
+            var source:Array = _metaData || metadata;
+            var results:Array = [];
+            var i:uint=0, l:uint = source.length;
+            for(;i<l;i++) if (source[i].name == name) results.push(source[i]);
+            return results;
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/92c0a8b4/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MetaDataArgDefinition.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MetaDataArgDefinition.as b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MetaDataArgDefinition.as
index 1f1366f..2224f52 100755
--- a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MetaDataArgDefinition.as
+++ b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MetaDataArgDefinition.as
@@ -36,10 +36,30 @@ package org.apache.flex.reflection
         }
         
         private var _value:String;
-        
+        /**
+         * the 'key' value of a metadata argument
+         * in [Event(name="boom")]
+         * the value for the 1st (only) argument
+         * is 'boom'
+         */
         public function get value():String
         {
             return _value;
-        }        
+        }
+
+        /**
+         * the 'key' value of a metadata argument
+         * in [Event(name="boom")]
+         * the key for the 1st (only) argument
+         * is 'name'
+         */
+        public function get key():String{
+            return _name;
+        }
+
+        public function toString():String
+        {
+            return "arg: key:'"+_name+"', value:'"+_value+"'";
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/92c0a8b4/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MetaDataDefinition.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MetaDataDefinition.as b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MetaDataDefinition.as
index 48efac8..8805b69 100755
--- a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MetaDataDefinition.as
+++ b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MetaDataDefinition.as
@@ -20,7 +20,7 @@ package org.apache.flex.reflection
 {
     
     /**
-     *  The description of a Class or Interface
+     *  The description of a MetaData tag attached to a class member or a class
      * 
      *  @langversion 3.0
      *  @playerversion Flash 10.2
@@ -33,11 +33,19 @@ package org.apache.flex.reflection
         {
             super(name, rawData);
         }
-        
+
+        private var _args:Array;
+        /**
+         * The argument pairs (if any) associated with a Metadata tag
+         * in [Event(name="boom")]
+         * the args array would be of length 1
+         * the array contains MetaDataArgDefinitions
+         */
         public function get args():Array
         {
+            if (_args) return _args.slice();
             var results:Array = [];
-            
+
             COMPILE::SWF
             {
                 var xml:XML = rawData as XML;
@@ -59,13 +67,57 @@ package org.apache.flex.reflection
                     var args:Array = rdata.args;
                     if (args)
                     {
-                        var n:int = args.length;
-                        for each (var argDef:Object in args)
-                        results.push(new MetaDataArgDefinition(argDef.key, argDef.value));
+                        args = args.slice();
+                        while(args.length) {
+                            var argDef:Object = args.shift();
+                            results.push(new MetaDataArgDefinition(argDef.key, argDef.value));
+                        }
                     }
                 }
             }
-            return results;            
+            //fully populated, so release rawData ref
+            _rawData = null;
+            _args = results.slice();
+            return  results;
+        }
+
+        /**
+         * convenience method for retrieving a set of args with a specific key
+         * Most often this would be of length 1, but it is possible for there to be
+         * multiple MetaDataArgDefinitions with the same key
+         * @param key the key to search for
+         * @return an array of MetaDataArgDefinitions with the matching key.
+         */
+        public function getArgsByKey(key:String):Array{
+            var ret:Array=[];
+            var source:Array = _args || args;
+            var i:uint=0, l:uint=source.length;
+            for (;i<l;i++) {
+                var arg:MetaDataArgDefinition = source[i];
+                if (arg.key == key) ret.push(arg);
+            }
+            return ret;
+        }
+
+        /**
+         * Used primarily for debugging purposes, this provides a string representation of this
+         * MetaDataDefinition
+         * @return a String representation of this MetaDataDefinition
+         */
+        public function toString():String
+        {
+            var s:String="item: '"+_name +"', ";
+            var args:Array = this.args;
+            var i:uint;
+            var l:uint = args.length;
+            if (!l) s+= "args:{none}";
+            else {
+                s+= "args:";
+                for (i=0;i<l;i++) {
+                    s+="\n\t"+args[i].toString();
+                }
+            }
+            return s;
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/92c0a8b4/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MethodDefinition.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MethodDefinition.as b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MethodDefinition.as
index a16c649..b58c7af 100755
--- a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MethodDefinition.as
+++ b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/MethodDefinition.as
@@ -20,7 +20,7 @@ package org.apache.flex.reflection
 {
     
     /**
-     *  The description of a Class or Interface
+     *  The description of a method inside a class or interface
      * 
      *  @langversion 3.0
      *  @playerversion Flash 10.2
@@ -29,21 +29,104 @@ package org.apache.flex.reflection
      */
     public class MethodDefinition extends DefinitionWithMetaData
 	{
-        public function MethodDefinition(name:String, declaredBy:String, rawData:Object = null)
+        public function MethodDefinition(name:String, rawData:Object)
         {
             super(name, rawData);
-            _declaredBy = declaredBy;
         }
-        
-        private var _declaredBy:String;
-        private var declaredByDef:TypeDefinition;
-        
+
+        /**
+         * The type that defined this method
+         * This could be an ancestor class of the method's containing TypeDefinition
+         */
         public function get declaredBy():TypeDefinition
         {
-            if (declaredByDef == null)
-                declaredByDef = new TypeDefinition(_declaredBy);
-            
-            return declaredByDef;
+            COMPILE::SWF{
+                var declareBy:String = _rawData.@declaredBy;
+            }
+            COMPILE::JS{
+                var declareBy:String = _rawData.declaredBy;
+            }
+            return TypeDefinition.getDefinition(declareBy);
+        }
+
+        private var _parameters:Array;
+        /**
+         * The collection of parameters defined for this method
+         * each parameter is represented by a ParameterDefinition instance
+         */
+        public function get parameters():Array {
+            var results:Array;
+            if (_parameters) {
+                results = _parameters.slice();
+               if (!TypeDefinition.useCache) _parameters = null;
+               return results;
+            }
+            results = [];
+            COMPILE::SWF {
+                var xml:XML = rawData as XML;
+                var data:XMLList = xml.parameter;
+                var n:int = data.length();
+                for (var i:int = 0; i < n; i++)
+                {
+                    var item:XML = data[i] as XML;
+                    results.push(new ParameterDefinition(uint(item.@index),item));
+                }
+            }
+            COMPILE::JS {
+                if (rawData.parameters != null) {
+                    var data:Array = rawData.parameters();
+                    var n:int = data.length;
+                    for (var i:int = 0; i < n; i++)
+                    {
+                        var item:Object = data[i];
+                        results.push(new ParameterDefinition(uint(item.index),item));
+                    }
+                }
+            }
+
+            if (TypeDefinition.useCache) _parameters = results;
+            return results;
+        }
+        /**
+         * The return type for this method
+         * note: a return type may be "*" or "void"
+         */
+        public function get returnType():TypeDefinition {
+            COMPILE::SWF{
+                var returnType:String = _rawData.@returnType;
+            }
+
+            COMPILE::JS{
+                var returnType:String = _rawData.type;
+            }
+
+            return TypeDefinition.getDefinition(returnType);
+        }
+
+        /**
+         * A string representation of this method definition
+         */
+        public function toString():String{
+            var retType:String=returnType.qualifiedName;
+            if (retType=="") retType ="''";
+            var s:String="method: '"+name +"', returnType:"+retType+" declaredBy:"+declaredBy.qualifiedName;
+            var params:Array = parameters;
+            var i:uint;
+            var l:uint = params.length;
+            if (!l) s+="\n\t{No parameters}";
+            else
+                for (i=0;i<l;i++) {
+                    s+="\n\t"+params[i].toString();
+                }
+            var meta:Array = metadata;
+            l = meta.length;
+            if (l) {
+                s += "\n\tmetadata:";
+                for (i=0;i<l;i++) {
+                    s += "\n\t\t" + meta[i].toString().split("\n").join("\n\t\t");
+                }
+            }
+            return s;
         }
         
     }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/92c0a8b4/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/ParameterDefinition.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/ParameterDefinition.as b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/ParameterDefinition.as
new file mode 100644
index 0000000..b552e33
--- /dev/null
+++ b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/ParameterDefinition.as
@@ -0,0 +1,84 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.reflection
+{
+    
+    /**
+     *  The description of a Function parameter
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2S
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+    public class ParameterDefinition extends DefinitionBase
+	{
+
+        public function ParameterDefinition( index:uint, rawData:Object)
+        {
+            super("parameter "+index, rawData);
+        }
+
+		/**
+		 * The type of this parameter
+		 */
+		public function get type():TypeDefinition{
+			COMPILE::SWF {
+				return TypeDefinition.getDefinition(_rawData.@type);
+			}
+
+			COMPILE::JS {
+				return TypeDefinition.getDefinition(_rawData.type);
+			}
+
+		}
+		/**
+		 * Whether this parameter is optional (has a default value) or not
+		 */
+		public function get optional():Boolean {
+			COMPILE::SWF {
+				return _rawData.@optional == "true";
+			}
+
+			COMPILE::JS {
+				return _rawData.optional;
+			}
+
+		}
+		/**
+		 * The 1-based index of this parameter in its owner function/method
+		 */
+		public function get index():uint{
+			COMPILE::SWF {
+				return uint(_rawData.@index);
+			}
+
+			COMPILE::JS {
+				return _rawData.index;
+			}
+
+		}
+        /**
+         * A string representation of this parameter definition
+         */
+		public function toString():String{
+			return _name+", optional:"+optional+", type:"+type.qualifiedName;
+		}
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/92c0a8b4/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/TypeDefinition.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/TypeDefinition.as b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/TypeDefinition.as
index cf69bd1..7070e5a 100755
--- a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/TypeDefinition.as
+++ b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/TypeDefinition.as
@@ -18,6 +18,9 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.reflection
 {
+COMPILE::SWF {
+  import flash.utils.describeType;
+}
     
     /**
      *  The description of a Class or Interface
@@ -29,232 +32,802 @@ package org.apache.flex.reflection
      */
     public class TypeDefinition extends DefinitionWithMetaData
 	{
+
+        COMPILE::JS {
+            //js storage support for class aliases
+            private static var _aliasMappings:Object={};
+
+            /**
+             * @private
+             * @param aliasName
+             * @param classObject
+             */
+            internal static function registerClassAlias(aliasName:String, classObject:Class ) :void{
+                var info:* = classObject.FLEXJS_CLASS_INFO;
+                if (info) {
+                    //a class may have more than one alias point to it, but only the most recently registered
+                    //alias is retained for reflection (applying same approach as swf)
+                    var alias:String = info.alias;
+                    if (alias) {
+                        if (alias == aliasName) {
+                            if (_aliasMappings[aliasName] == classObject) return; //nothing to do
+                        }
+                    }
+                    //check for alternate mapping, remove any alternative mapping
+                    //from the other class's FLEXJS_CLASS_INFO
+                    var altClass:Class = _aliasMappings[aliasName];
+                    if (altClass) {
+                        var altInfo:* = altClass.FLEXJS_CLASS_INFO;
+                        delete altInfo.alias;
+                    }
+                    _aliasMappings[aliasName] = classObject;
+                    info.alias = aliasName;
+                } else throw new Error("registerClassAlias error: classObject is not Reflectable "+classObject);
+            }
+
+            /**
+             * @private
+             * @param aliasName
+             * @return
+             */
+            internal static function getClassByAlias(aliasName:String):Class {
+                return _aliasMappings[aliasName];
+            }
+
+        }
+
+
+
+        //special cases
+        private static const SC:Array=['void','null','*',''];
+
+
+
+        private static var _cache:Object;
+
+        public static function get useCache():Boolean{
+            return _cache != null;
+        }
+
+        public static function set useCache(value:Boolean):void{
+            if (value) {
+                if (!_cache) _cache = {};
+            } else if (_cache) _cache = null;
+        }
+
+
+        /**
+         * The static getDefinition method is the primary access to TypeDefinitions. Although the
+         * constructor does not have a lock to prevent use (for performance reasons), using it directly
+         * is discouraged.
+         * @param name the qualified name of the definition,
+         * @param rawData (optional) the reflection data if already available
+         * @return a TypeDefinition representing the class or interface represented by the parameters
+         */
+        public static function getDefinition(name:String, rawData:Object = null):TypeDefinition {
+            return _cache ? (_cache[name] || new TypeDefinition(name, rawData)) : new TypeDefinition(name, rawData);
+        }
+
+        /**
+         * The static TypeDefinitions.getDefinition method is the primary access to TypeDefinitions. Although the
+         * constructor does not have a lock to prevent use (for performance reasons), using it directly
+         * is discouraged.
+         * Most of the time you should retrieve TypeDefinitions with org.apache.flex.reflection.describeType()
+         */
         public function TypeDefinition(name:String, rawData:Object = null)
         {
-            var c:int = name.indexOf("::");
-            if (c > -1)
-            {
-                _packageName = name.substring(0, c);
-                name = name.substring(c+2);
-            }
-            else
-                _packageName = "";
+            if (_cache) _cache[name] = this;
+
+			var c:int;
+			COMPILE::SWF{
+				c = name.indexOf("::");
+				if (c > -1)
+				{
+					_packageName = name.substr(0, c);
+					name = name.substr(c+2);
+				}
+				else
+					_packageName = "";
+                //this definition sets a flag for where to find the metadata:
+                useFactory = true;
+			}
+			COMPILE::JS{
+				c = name.lastIndexOf(".");
+				if (c > -1)
+				{
+					_packageName = name.substr(0, c);
+					name = name.substr(c+1);
+				}
+				else
+					_packageName = "";
+			}
+            _specialCase = _packageName=="" && SC.indexOf(name) != -1;
             super(name, rawData);
         }
-        
-        private var _packageName:String;
-        
+
+        protected var _kind:String;
+        /**
+         * The type of definition this TypeDefinition describes
+         * values can be "class", "interface", "unknown"
+         * This can sometimes be different between swf and js
+         * targets.
+         */
+        public function get kind():String{
+            if (_kind) return _kind;
+
+            COMPILE::SWF {
+                var xml:XML = rawData as XML;
+                if (xml) {
+                    //double check we have the uppermost definition
+                    if (xml.@isStatic!="true") _kind = "class";
+                    var factory:XML = xml.factory[0];
+                    //all classes have an extends class, except for Object
+                    if (!factory || factory.extendsClass.length() || factory.@type=="Object") _kind="class";
+                    else _kind="interface";
+                }
+            }
+
+            COMPILE::JS {
+                var data:Object = rawData;
+                _kind = data.names[0].kind;
+            }
+
+            return _kind || "unknown";
+        }
+
+        /**
+         * convenience check for whether this definition
+         * represents a Class or instance of a Class
+         */
+        public function get isClass():Boolean{
+            return (_kind || kind) == "class";
+        }
+        /**
+         * convenience check for whether this definition
+         * represents an interface
+         */
+        public function get isInterface():Boolean{
+            return (_kind || kind) == "interface";
+        }
+
+
+        private var _specialCase:Boolean;
+
+        protected var _packageName:String;
+        /**
+         * The package name for this TypeDefinition
+         */
         public function get packageName():String
         {
             return _packageName;
-        }        
-        
+        }
+        /**
+         * The qualified name for this TypeDefinition
+         */
+        public function get qualifiedName():String{
+            if (_packageName.length) return _packageName + "." + _name;
+            else return _name;
+        }
+
+        /**
+         * @private
+         */
         override protected function get rawData():Object
         {
-            if (_rawData == null)
-            {
-                var def:Object = getDefinitionByName(packageName + "::" + name);
-                COMPILE::SWF
+            var def:Object;
+            COMPILE::SWF {
+                if (_rawData == null)
                 {
-                    _rawData = describeType(def);                        
+                    if (_packageName.length)
+                        def = getDefinitionByName(_packageName + "::" + _name);
+                    else def = getDefinitionByName(_name);
+                    _rawData = flash.utils.describeType(def);
+
                 }
-                COMPILE::JS
+            }
+
+            COMPILE::JS{
+                if (_rawData == null)
                 {
+                    if (_packageName.length)
+                        def = getDefinitionByName(_packageName + "." + _name);
+                    else def = getDefinitionByName(_name);
                     _rawData = def.prototype.FLEXJS_CLASS_INFO;
                 }
             }
             return _rawData;
         }
+
+        /** class specific support */
+
+        private var _constructorMethod:MethodDefinition;
+        /**
+         * A MethodDefinition representing the constructor for a "class" kind TypeDefinition
+         * For an interface this returns null.
+         */
+        public function get constructorMethod():MethodDefinition{
+            if ((_kind || kind) != "class") return null;
+            COMPILE::SWF {
+                if (!_constructorMethod) {
+                    var source:XML = rawData.factory.constructor[0];//['constructor'][0];
+                    var declaredBy:String = _packageName.length? _packageName+"::"+_name : _name;
+                    if (source ==null) {
+                        //constructor with no params
+                        _constructorMethod =
+                                new MethodDefinition(_name, XML('<method name="'+_name+'" declaredBy="'+declaredBy+'" returnType="" />'));
+                    } else {
+                        var params:XMLList = source.parameter;
+                        _constructorMethod=new MethodDefinition(_name, XML('<method name="'+_name+'" declaredBy="'+declaredBy+'" returnType="">'+params.toXMLString()+'</method>'))
+                    }
+                }
+            }
+
+            COMPILE::JS {
+                if (!_constructorMethod) {
+                    var temp:Array = getCollection("methods","instance",false);
+                    var i:int=0, l:int=temp.length;
+                    for (;i<l;i++) {
+                        if (temp[i].name == _name) {
+                            //trace('found constructor '+results[i].toString());
+                            _constructorMethod = temp[i];
+                            break;
+                        }
+                    }
+                }
+            }
+
+            return _constructorMethod;
+        }
+        
+        
+        private var _baseClasses:Array;
         /**
+         * For a "class" kind TypeDefinition, this returns the TypeDefinitions
+         * of the base classes (inheritance chain). This may differ between
+         * javascript and flash platform targets for some classes.
          *  @flexjsignorecoercion XML 
          */
         public function get baseClasses():Array
         {
-            var results:Array = [];
+
+            var results:Array;
+            if (_baseClasses) {
+                results =_baseClasses.slice();
+                if (!_cache) _baseClasses = null;
+                return results;
+            }
+            if ((_kind || kind) != "class") return [];
+
+            results = [];
+            //handle special cases
+            if (_specialCase) {
+                if (_cache) {
+                    _baseClasses = results;
+                    results = results.slice();
+                }
+                return results;
+            }
             
             COMPILE::SWF
             {
                 var xml:XML = rawData as XML;
-                var data:XMLList = xml.extendsClass;
+                var data:XMLList = xml.factory.extendsClass;
                 var n:int = data.length();
                 for (var i:int = 0; i < n; i++)
                 {
                     var item:XML = data[i] as XML;
                     var qname:String = item.@type;
-                    results.push(new TypeDefinition(qname));
+                    results.push(TypeDefinition.getDefinition(qname));
                 }
             }
             COMPILE::JS
             {
                 var data:Object = rawData;
-                var name:String = data.names[0].qName;
-                var def:Object = getDefinitionByName(name);
-                var prototype:Object = def.prototype;
-                while (prototype.FLEXJS_CLASS_INFO !== undefined)
+                var qname:String = data.names[0].qName;
+                var def:Object = getDefinitionByName(qname);
+                var superClass:Object = def.superClass_;
+                if (!superClass) {
+                    //todo: support for when superClass is not a flexjs 'class'
+                } else while (superClass)
                 {
-                    name = prototype.FLEXJS_CLASS_INFO.names[0].qName;
-                    results.push(new TypeDefinition(name));
-                    def = getDefinitionByName(name);
-                    prototype = def.prototype;
+                    if (superClass.FLEXJS_CLASS_INFO !== undefined) {
+                        qname = superClass.FLEXJS_CLASS_INFO.names[0].qName;
+                        results.push(TypeDefinition.getDefinition(qname));
+                        def = getDefinitionByName(qname);
+                        superClass = def.superClass_;
+                        //todo: support for when superClass is not a flexjs 'class'
+
+                    } else {
+                        //todo: support for when superClass is not a flexjs 'class'
+                        superClass = null;
+                    }
                 }
             }
+            
+            if (_cache) {
+                _baseClasses = results;
+                results = results.slice();
+            }
             return results;
         }
-        
+
+        private var _interfaces:Array;
+        /**
+         * returns the full set of interfaces that this class implements or that this
+         * interface extends, depending on the 'kind' value ("interface" or "class")
+         */
         public function get interfaces():Array
         {
-            var results:Array = [];
+            var results:Array;
+            if (_interfaces) {
+                results =_interfaces.slice();
+                if (!_cache) _interfaces = null;
+                return results;
+            }
+            results = [];
+            //handle special cases
+            if (_specialCase) {
+                if (_cache) {
+                    _interfaces = results;
+                    results = results.slice();
+                }
+                return results;
+            }
             
             COMPILE::SWF
             {
                 var xml:XML = rawData as XML;
-                var data:XMLList = xml.implementsInterface;
+                var data:XMLList = xml.factory.implementsInterface;
                 var n:int = data.length();
                 for (var i:int = 0; i < n; i++)
                 {
                     var item:XML = data[i] as XML;
                     var qname:String = item.@type;
-                    results.push(new TypeDefinition(qname));
+                    results.push(TypeDefinition.getDefinition(qname));
                 }
             }
             COMPILE::JS
             {
                 var data:* = rawData;
-                var name:String = data.names[0].qName;
-                var def:Object = getDefinitionByName(name);
-                var prototype:Object = def.prototype;
-                while (data !== undefined)
+                var i:uint, n:int;
+                if (data !== undefined)
                 {
-                    var interfaces:Array = data.interfaces;
-                    if (interfaces)
-                    {
-                        var n:int = interfaces.length;
-                        for each (var s:String in interfaces)
-                            results.push(new TypeDefinition(s));
+                    var collect:Array = data.interfaces || [];
+                    var qname:String = data.names[0].qName;
+                    var def:Object = getDefinitionByName(qname);
+                    if ((_kind || kind) == "interface") {
+                        //collect.length can expand during the loop below
+                        for (i = 0; i < collect.length; i++) {
+                            collect.push.apply(collect, (collect[i].prototype.FLEXJS_CLASS_INFO.interfaces || []));
+                        }
+                    } else {
+                        var superClass:Object = def.superClass_;
+                        while (superClass && superClass.FLEXJS_CLASS_INFO !== undefined)
+                        {
+                            data = superClass.FLEXJS_CLASS_INFO;
+                            var latest:Array = data.interfaces;
+                            if (latest) {
+                                n = latest.length;
+                                for (i=0;i<n;i++) if (collect.indexOf(latest[i])==-1) collect.push(latest[i]);
+                            }
+                            qname = data.names[0].qName;
+                            def = getDefinitionByName(qname);
+                            superClass = def.superClass_;
+                        }
+                    }
+                    n = collect.length;
+                    for (i=0;i<n;i++) {
+                        var iface:Object = collect[i];
+                        data = iface.prototype.FLEXJS_CLASS_INFO;
+                        results[i] = TypeDefinition.getDefinition(data.names[0].qName,data);
                     }
-                    name = data.names[0].qName;
-                    results.push(new TypeDefinition(name));
-                    def = getDefinitionByName(name);
-                    prototype = def.prototype;
-                    data = prototype.FLEXJS_CLASS_INFO;
                 }
             }
+
+            if (_cache) {
+                _interfaces = results;
+                results = results.slice();
+            }
             return results;            
         }
-        
+
+
+        private var _staticVars:Array;
+
+        /**
+         * The static variables associated with a "class" kind TypeDefinition
+         * An array of VariableDefinition instances
+         */
+        public function get staticVariables():Array
+        {
+
+            if ((_kind || kind) != "class") return [];
+            var results:Array;
+            if (_staticVars) {
+                results =_staticVars.slice();
+                if (!_cache) _staticVars = null;
+                return results;
+            }
+            COMPILE::SWF {
+                results = getCollection("variable","static");
+            }
+            COMPILE::JS
+            {
+                results = getCollection("variables","static",false);
+            }
+            if (_cache) {
+                _staticVars = results;
+                results = results.slice();
+            }
+            return results;
+        }
+
+        private var _staticAccessors:Array;
+        /**
+         * The static accessors associated with a "class" kind TypeDefinition
+         * An array of AccessorDefinition instances
+         */
+        public function get staticAccessors():Array
+        {
+
+            if ((_kind || kind) != "class") return [];
+            var results:Array;
+            if (_staticAccessors) {
+                results =_staticAccessors.slice();
+                if (!_cache) _staticAccessors = null;
+                return results;
+            }
+            COMPILE::SWF {
+                results = getCollection("accessor","static");
+            }
+            COMPILE::JS
+            {
+                results = getCollection("accessors","static",false);
+            }
+            if (_cache) {
+                _staticAccessors = results;
+                results = results.slice();
+            }
+            return results;
+        }
+
+
+        private var _staticMethods:Array;
+        /**
+         * The static methods associated with a "class" kind TypeDefinition
+         * An array of MethodDefinition instances
+         */
+        public function get staticMethods():Array
+        {
+
+            if ((_kind || kind) != "class") return [];
+            var results:Array;
+            if (_staticMethods) {
+                results =_staticMethods.slice();
+                if (!_cache) _staticMethods = null;
+                return results;
+            }
+            COMPILE::SWF {
+                results = getCollection("method","static");
+            }
+            COMPILE::JS
+            {
+                results = getCollection("methods","static",false);
+            }
+            if (_cache) {
+                _staticMethods = results;
+                results = results.slice();
+            }
+            return results;
+        }
+
+
+
+
+        private var _variables:Array;
+        /**
+         * The instance variables associated with a "class" kind TypeDefinition
+         * An array of VariableDefinition instances
+         */
         public function get variables():Array
         {
-            var results:Array = [];
+
+            var results:Array;
+            if (_variables) {
+                results =_variables.slice();
+                if (!_cache) _variables = null;
+                return results;
+            }
+            if ((_kind || kind) != "class") return [];
+            //handle special cases
+            if (_specialCase) {
+                results = [];
+                if (_cache) {
+                    _variables = results = [];
+                    results = results.slice();
+                }
+                return results;
+            }
             
             COMPILE::SWF
             {
-                var xml:XML = rawData as XML;
-                var data:XMLList = xml.variable;
-                var n:int = data.length();
-                for (var i:int = 0; i < n; i++)
-                {
-                    var item:XML = data[i] as XML;
-                    var qname:String = item.@name;
-                    results.push(new VariableDefinition(qname, item));
-                }
+                results = getCollection("variable");
             }
             COMPILE::JS
             {
-                var data:Object = rawData;
-                var name:String = data.names[0].qName;
-                var def:Object = getDefinitionByName(name);
-                var rdata:* = def.prototype.FLEXJS_REFLECTION_INFO();
-                if (rdata !== undefined)
-                {
-                    var variables:Object = rdata.variables();
-                    if (variables)
-                    {
-                        for (var v:String in variables)
-                        {
-                            var varDef:Object = variables[v];
-                            results.push(new VariableDefinition(v, varDef));
-                        }
-                    }
-                }
+                results = getCollection("variables");
+            }
+            if (_cache) {
+                _variables = results;
+                results = results.slice();
             }
             return results;        
         }
         
+        private var _accessors:Array;
+        /**
+         * The instance accessors associated with a "class" kind TypeDefinition
+         * An array of AccessorDefinition instances
+         */
         public function get accessors():Array
         {
-            var results:Array = [];
+            var results:Array;
+            if (_accessors) {
+                results =_accessors.slice();
+                if (!_cache) _accessors = null;
+                return results;
+            }
+
+
+            //handle special cases
+            if (_packageName=="" && SC.indexOf(name)!=-1) {
+                results = [];
+                if (_cache) {
+                    _accessors = results;
+                    results=results.slice();
+                }
+                return results;
+            }
             
             COMPILE::SWF
             {
-                var xml:XML = rawData as XML;
-                var data:XMLList = xml.accessor;
-                var n:int = data.length();
-                for (var i:int = 0; i < n; i++)
-                {
-                    var item:XML = data[i] as XML;
-                    var qname:String = item.@name;
-                    results.push(new MethodDefinition(qname, item.@declaredBy, item));
-                }
+                results = getCollection("accessor");
             }
             COMPILE::JS
             {
-                var data:Object = rawData;
-                var name:String = data.names[0].qName;
-                var def:Object = getDefinitionByName(name);
-                var rdata:* = def.prototype.FLEXJS_REFLECTION_INFO();
-                if (rdata !== undefined)
-                {
-                    var accessors:Object = rdata.accessors();
-                    if (accessors)
-                    {
-                        for (var prop:String in accessors)
-                        {
-                             var propDef:Object = accessors[prop];
-                             results.push(new MethodDefinition(prop, propDef.declaredBy, propDef));
-                        }
-                    }
-                }
+                results = getCollection("accessors");
+            }
+            if (_cache) {
+                _accessors = results;
+                results = results.slice();
             }
             return results;            
         }
+
         
+        private var _methods:Array;
+        /**
+         * The instance methods associated with a "class" kind TypeDefinition
+         * An array of MethodDefinition instances
+         */
         public function get methods():Array
         {
-            var results:Array = [];
+            var results:Array;
+            if (_methods) {
+                results =_methods.slice();
+                if (!_cache) _methods = null;
+                return results;
+            }
+
+
+            //handle special cases
+            if (_packageName=="" && SC.indexOf(name)!=-1) {
+                results = [];
+                if (_cache) {
+
+                    _methods = results;
+                    results=results.slice();
+                }
+                return results;
+            }
             
             COMPILE::SWF
             {
-                var xml:XML = rawData as XML;
-                var data:XMLList = xml.method;
-                var n:int = data.length();
-                for (var i:int = 0; i < n; i++)
-                {
-                    var item:XML = data[i] as XML;
-                    var qname:String = item.@name;
-                    results.push(new MethodDefinition(qname, item.@declaredBy, item));
-                }
+                results = getCollection("method");
             }
             COMPILE::JS
             {
-                var data:Object = rawData;
-                var name:String = data.names[0].qName;
-                var def:Object = getDefinitionByName(name);
-                var rdata:* = def.prototype.FLEXJS_REFLECTION_INFO();
-                if (rdata !== undefined)
+                results = getCollection("methods");
+                //special case, remove constructor method:
+                var i:int=0, l:int=results.length;
+                for (;i<l;i++) {
+                    if (results[i].name==this.name) {
+                        //trace('found constructor '+results[i].toString());
+                        _constructorMethod = results[i];
+                        results.splice(i,1);
+                        break;
+                    }
+                }
+            }
+            if (_cache) {
+                _methods = results;
+                results = results.slice();
+            }
+            return results;            
+        }
+
+
+
+        COMPILE::SWF
+        protected function getCollection(collection:String, type:String="instance"):Array{
+            var lookups:Object = {
+                variable : VariableDefinition,
+                accessor : AccessorDefinition,
+                method : MethodDefinition
+            };
+            var results:Array =[];
+            var isStatic:Boolean = type=="static";
+            var xml:XML = rawData as XML;
+            var data:XMLList = isStatic? xml[collection] : xml.factory[collection];
+            var n:int = data.length();
+            var itemClass:Class = lookups[collection];
+            for (var i:int = 0; i < n; i++)
+            {
+                var item:XML = data[i] as XML;
+                var qname:String = item.@name;
+                results[i]= new itemClass(qname, item);
+            }
+            return results;
+        }
+
+
+        COMPILE::JS
+        protected function getCollection(collection:String,  type:String="instance", resolve:Boolean = true):Array{
+           var lookups:Object = {
+               variables : VariableDefinition,
+               accessors : AccessorDefinition,
+               methods : MethodDefinition
+           };
+           if (!collection in lookups) throw new Error("ArgumentError: name must be a standard name [variables,accessors,methods]") ;
+           var isStatic:Boolean =  type == "static";
+           var results:Array = [];
+
+           var data:Object = rawData;
+           var qname:String = data.names[0].qName;
+           var def:Object = getDefinitionByName(qname);
+           var rdata:* =  def.prototype.FLEXJS_REFLECTION_INFO();
+
+           var itemClass:Class = lookups[collection];
+
+           var l:int, i:int = 0;
+           if (resolve) {
+               if (isStatic) throw new Error("ArgumentError : resolve and static are not compatible");
+               //get ancestor items, and record the names for overrides
+               var oldNames:Array=[];
+               var superClass:Object = def.superClass_;
+               if (superClass) data = superClass.FLEXJS_CLASS_INFO;
+               else data = null;
+
+               if (data) {
+                   results = TypeDefinition.getDefinition(data.names[0].qName,data)[collection];
+                   l=results.length;
+                   for (i=0;i<l;i++) oldNames[i]=results[i].name;
+               } else results=[];
+           }
+           //get the local definitions
+            if (rdata !== undefined)
+            {
+                var items:Object = rdata[collection]();
+                if (items)
                 {
-                    var methods:Object = rdata.methods();
-                    if (methods)
+                    for (var item:String in items)
                     {
-                        for (var fn:String in methods)
-                        {
-                            var fnDef:Object = methods[fn];
-                            results.push(new MethodDefinition(fn, fnDef.declaredBy, fnDef));
+                        var itemDef:Object = items[item];
+                        if (isStatic) {
+                            //we are looking for static members only
+                            if ( itemDef.isStatic) results[i++] = new itemClass(item, itemDef);
+                        } else {
+                            //ignore statics here, because this is for instance members:
+                            if (itemDef.isStatic) continue;
+                            //instance member:
+                            var itemClassDef:DefinitionWithMetaData = new itemClass(item, itemDef);
+                            if (resolve) {
+                                //resolve against older versions ("overrides")
+                                var oldIdx:uint = oldNames.indexOf(itemClassDef.name);
+                                if (oldIdx != -1) {
+                                    //we have an override of an ancestor's definition, replace it
+                                    results[oldIdx] = itemClassDef;
+                                    continue;
+                                }
+                            }
+                            //add the new definition item to the collection
+                            results[i++] = itemClassDef;
                         }
                     }
                 }
             }
-            return results;            
+           return results;
+        }
+
+        /**
+         * Used primarily for debugging purposes, this provides a string representation of this
+         * TypeDefinition
+         * @param includeDetail whether to output member definitions and other detailed information
+         * @return a stringified representation of this TypeDefinition
+         */
+        public function toString(includeDetail:Boolean=false):String
+        {
+            var kind:String = this.kind;
+            var s:String =  "Typedefinition: " + qualifiedName + ", kind:"+kind;
+            if (includeDetail)
+            {
+                s += "\n";
+                var meta:Array = metadata;
+                var i:uint;
+                var l:uint = meta.length;
+                if (l) {
+                    s += "\tmetadata:";
+                    for (i=0;i<l;i++) {
+                        s += "\n\t\t" + meta[i].toString().split("\n").join("\n\t\t");
+                    }
+                    s += "\n";
+                }
+
+                var collections:Array;
+                if (kind == "class") {
+                    var constructorDef:MethodDefinition = constructorMethod;
+                    var construct:Array = constructorDef ? [constructorDef] :[];
+                    collections = [ "constructor",      construct,
+                                    "interfaces",       interfaces,
+                                    "baseClasses",      baseClasses,
+                                    "variables",        variables,
+                                    "accessors",        accessors,
+                                    "methods",          methods,
+                                    "static variables", staticVariables,
+                                    "static accessors", staticAccessors,
+                                    "static methods",   staticMethods];
+                } else {
+                    if (kind == "interface") {
+                        collections = [ "interfaces", interfaces,
+                                        "accessors",accessors,
+                                        "methods",methods];
+                    }
+                }
+                if (collections) s += stringifyCollections(collections);
+                else s += "\t{no detail available}"
+            }
+            return s;
+        }
+
+        /**
+         * utility method to create friendly output of collections,
+         * primarily for debugging purposes - used via toString(includeDetail=true)
+         * @param collections array of alternating collection names and collections
+         * @return stringified representation of the collections
+         */
+        protected function stringifyCollections(collections:Array):String
+        {
+            var s:String="";
+            while (collections.length) {
+                var collectionType:String = collections.shift();
+                var collection:Array =collections.shift();
+                s += collectionType+" :";
+                if (!collection || !collection.length) {
+                    s+= "\n\t{none}\n"
+                } else {
+                    s+="\n";
+                    var outData:String = "\t";
+                    var l:uint = collection.length;
+                    while (l) {
+                        l--;
+                        outData += collection.shift().toString();
+                        if (l) outData += "\n";
+                    }
+                    outData = outData.replace(/\n/g,"\n\t") + "\n";
+                    s += outData;
+                }
+            }
+            return s;
         }
-           
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/92c0a8b4/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/VariableDefinition.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/VariableDefinition.as b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/VariableDefinition.as
index 3e87566..c83b02f 100755
--- a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/VariableDefinition.as
+++ b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/VariableDefinition.as
@@ -20,7 +20,7 @@ package org.apache.flex.reflection
 {
     
     /**
-     *  The description of a Class or Interface
+     *  The description of a Class or Interface variable
      * 
      *  @langversion 3.0
      *  @playerversion Flash 10.2
@@ -29,9 +29,39 @@ package org.apache.flex.reflection
      */
     public class VariableDefinition extends DefinitionWithMetaData
 	{
-        public function VariableDefinition(name:String, rawData:Object = null)
+        public function VariableDefinition(name:String, rawData:Object)
         {
-            super(rawData, name);
+            super(name, rawData);
+        }
+
+        /**
+         * A TypeDefinition representing the type of the variable that
+         * this VariableDefinition represents
+         */
+        public function get type():TypeDefinition {
+            COMPILE::SWF {
+                return TypeDefinition.getDefinition(_rawData.@type);
+            }
+
+            COMPILE::JS {
+                return TypeDefinition.getDefinition(_rawData.type);
+            }
+        }
+        /**
+         * A string representation of this variable definition
+         */
+        public function toString():String {
+            var s:String = "variable: '"+name+"', type:"+type.qualifiedName;
+            var meta:Array = metadata;
+            var i:uint;
+            var l:uint = meta.length;
+            if (l) {
+                s+="\n\tmetadata:";
+                for (i=0;i<l;i++) {
+                    s += "\n\t\t" + meta[i].toString().split("\n").join("\n\t\t");
+                }
+            }
+            return s;
         }
         
     }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/92c0a8b4/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/describeType.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/describeType.as b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/describeType.as
index 89b1821..ceb4963 100755
--- a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/describeType.as
+++ b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/describeType.as
@@ -35,13 +35,21 @@ COMPILE::SWF
 	{
         COMPILE::SWF
         {
+
+            var untyped:* = value;
+            if (value !== null && untyped !== undefined) {
+                //normalize the query object to the static Class or interface level
+                while (value['constructor'] !== Class) {
+                    value = value['constructor'];
+                }
+            }
             var xml:XML = flash.utils.describeType(value);
-            return new TypeDefinition(xml.@name, xml);
+            return TypeDefinition.getDefinition(xml.@name, xml);
         }
         COMPILE::JS
         {
             var qname:String = getQualifiedClassName(value);
-            return new TypeDefinition(qname, value.FLEXJS_CLASS_INFO);
+            return TypeDefinition.getDefinition(qname, value.FLEXJS_CLASS_INFO || value.prototype.FLEXJS_CLASS_INFO);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/92c0a8b4/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/getAliasByClass.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/getAliasByClass.as b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/getAliasByClass.as
new file mode 100644
index 0000000..aebb4c6
--- /dev/null
+++ b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/getAliasByClass.as
@@ -0,0 +1,47 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.reflection {
+
+
+COMPILE::SWF {
+    import flash.utils.describeType;
+}
+/**
+     * Retrieves a an alias for a class, based on an alias mapping, previously registered with
+     * registerClassAlias, or possibly using [RemoteClass(alias='someAlias')] metadata
+     *
+     * @param classObject the class to retrieve the alias for
+     * @return the most recently mapped alias, if found otherwise "" (empty string)
+     */
+    public function getAliasByClass(classObject:Class):String {
+        var ret:String;
+        if (classObject == null) throw new TypeError("Parameter classObject must be non-null.");
+        COMPILE::SWF {
+            ret= flash.utils.describeType(classObject).@alias;
+        }
+
+        COMPILE::JS {
+            var info:* = classObject.FLEXJS_CLASS_INFO;
+            if (info) {
+                ret = info.alias || "";
+            } else ret="";
+        }
+        return ret;
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/92c0a8b4/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/getClassByAlias.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/getClassByAlias.as b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/getClassByAlias.as
new file mode 100644
index 0000000..e59a61b
--- /dev/null
+++ b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/getClassByAlias.as
@@ -0,0 +1,43 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.reflection {
+COMPILE::SWF {
+    import flash.net.getClassByAlias;
+}
+/**
+     * Retrieves a class based on an alias mapping, previously registered with
+     * registerClassAlias, or possibly using [RemoteClass(alias='someAlias')] metadata
+     *
+     * @param aliasName the alias name to use to look up the class definition
+     * @return the class definition that has been mapped to by the registered
+     *         alias, or null if no alias mapping exists.
+     */
+    public function getClassByAlias(aliasName:String):Class {
+        COMPILE::SWF {
+            return flash.net.getClassByAlias(aliasName);
+        }
+
+        COMPILE::JS {
+            if (aliasName == null) throw new TypeError("Parameter aliasName must be non-null.");
+            var klazz:Class = TypeDefinition.getClassByAlias(aliasName);
+            if (!klazz) throw new ReferenceError("Class "+aliasName+" could not be found.");
+            return klazz;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/92c0a8b4/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/registerClassAlias.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/registerClassAlias.as b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/registerClassAlias.as
new file mode 100644
index 0000000..c06bd42
--- /dev/null
+++ b/frameworks/projects/Reflection/src/main/flex/org/apache/flex/reflection/registerClassAlias.as
@@ -0,0 +1,44 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.reflection {
+COMPILE::SWF {
+    import flash.net.registerClassAlias;
+}
+    /**
+     * Sets up an alias mapping for serialization/deserialization purposes
+     * This can be auto-generated by the FlexJS compiler
+     * when using class level metadata e.g. [RemoteClass(alias='someAlias')]
+     *
+     * @param aliasName the alias name to use to look up the class definition
+     * @param classObject the class to map to the alias name
+     *
+     */
+    public function registerClassAlias(aliasName:String, classObject:Class):void {
+        COMPILE::SWF {
+
+            flash.net.registerClassAlias(aliasName,classObject);
+        }
+
+        COMPILE::JS {
+            if (classObject == null) throw new TypeError("Parameter classObject must be non-null.");
+            if (aliasName == null) throw new TypeError("Parameter aliasName must be non-null.");
+            TypeDefinition.registerClassAlias(aliasName , classObject);
+        }
+    }
+}


[28/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - Added CSS for BinaryImage

Posted by ha...@apache.org.
Added CSS for BinaryImage


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/26bc1519
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/26bc1519
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/26bc1519

Branch: refs/heads/refactor-sprite
Commit: 26bc15194c6a033c0b476f6e5243194319264747
Parents: 0c031d9
Author: Harbs <ha...@in-tools.com>
Authored: Tue Sep 27 12:49:35 2016 +0300
Committer: Harbs <ha...@in-tools.com>
Committed: Tue Sep 27 12:49:35 2016 +0300

----------------------------------------------------------------------
 frameworks/projects/HTML/src/main/resources/defaults.css | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/26bc1519/frameworks/projects/HTML/src/main/resources/defaults.css
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/resources/defaults.css b/frameworks/projects/HTML/src/main/resources/defaults.css
index 26a3c26..81d7922 100644
--- a/frameworks/projects/HTML/src/main/resources/defaults.css
+++ b/frameworks/projects/HTML/src/main/resources/defaults.css
@@ -185,6 +185,11 @@ Image
 	IBeadModel: ClassReference("org.apache.flex.html.beads.models.ImageModel");
 	IBeadView:  ClassReference("org.apache.flex.html.beads.ImageView");
 }
+BinaryImage
+{
+    IBeadModel: ClassReference("org.apache.flex.html.beads.models.BinaryImageModel");
+    IBeadView:  ClassReference("org.apache.flex.html.beads.BinaryImageView");
+}
 
 ImageAndTextButton
 {


[03/28] git commit: [flex-asjs] [refs/heads/refactor-sprite] - add a script to update version numbers

Posted by ha...@apache.org.
add a script to update version numbers


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/37941c56
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/37941c56
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/37941c56

Branch: refs/heads/refactor-sprite
Commit: 37941c566e460f2dd2be2919476c540b46feef08
Parents: e877870
Author: Alex Harui <ah...@apache.org>
Authored: Fri Sep 9 13:00:15 2016 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Sep 9 13:00:15 2016 -0700

----------------------------------------------------------------------
 build.xml | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/37941c56/build.xml
----------------------------------------------------------------------
diff --git a/build.xml b/build.xml
index 5410b78..d484606 100644
--- a/build.xml
+++ b/build.xml
@@ -942,6 +942,35 @@
         </sequential>
     </macrodef>	
     
+    <!--
+	    Update various files for a new release version.
+     -->
+    <target name="update-version">
+        <fail message="old-version and new-version must be set in the form major.minor.hotfix i.e. 0.7.0">
+            <condition>
+                <or>
+                    <not>
+                        <isset property="old-version"/>
+                    </not>
+                    <not>
+                        <isset property="new-version"/>
+                    </not>
+                </or>
+            </condition>
+        </fail>
+        <replace file="${FLEXJS_HOME}/build.properties"
+            token="${old-version}"
+            value="${new-version}" />
+        <replace file="${FLEXJS_HOME}/installer.xml"
+            token="${old-version}"
+            value="${new-version}" />
+        <replace dir="${FLEXJS_HOME}/examples"
+            token="&lt;versionNumber&gt;${old-version}&lt;/versionNumber&gt;"
+            value="&lt;versionNumber&gt;${new-version}&lt;/versionNumber&gt;" >
+            <include name="**/*-app.xml"/>
+        </replace>
+    </target>
+    
 	<!--
 	    Update all frameworks Version.as files in the kit stagging area with the 
 	    latest version build number info.