You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ca...@apache.org on 2020/07/23 18:35:50 UTC

[royale-asjs] 01/03: dataprovider factory: little refactor to make it more extensible for more complex components (jewel table)

This is an automated email from the ASF dual-hosted git repository.

carlosrovira pushed a commit to branch feature/dataprovider-extensiblity
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit 4c168894a5c2f3e420bb806525e340bf6883e130
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Thu Jul 23 19:34:02 2020 +0200

    dataprovider factory: little refactor to make it more extensible for more complex components (jewel table)
    
    (cherry picked from commit a0e490c88b4b453bed9e59184a224de112888161)
---
 .../html/beads/DataItemRendererFactoryBase.as      | 27 ++++++++-------
 .../DataItemRendererFactoryForCollectionView.as    | 38 +++++++++++-----------
 .../royale/html/beads/ItemRendererFactoryBase.as   |  9 +++--
 3 files changed, 40 insertions(+), 34 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as
index fc0758f..2f8cbd8 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as
@@ -52,11 +52,6 @@ package org.apache.royale.html.beads
 		}
 
 		/**
-		 * the dataProvider
-		 */
-		protected var dp:Object;
-						
-		/**
 		 *  This Factory deletes all renderers, and generates a renderer
 		 *  for every data provider item.
 		 *  
@@ -67,8 +62,7 @@ package org.apache.royale.html.beads
 		 *  @royaleignorecoercion Array
 		 *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
 		 *  @royaleignorecoercion org.apache.royale.html.beads.IListView
-		 *  @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer
-		 *  @royaleignorecoercion org.apache.royale.core.IIndexedItemRendererInitializer
+		 *  @royaleignorecoercion org.apache.royale.core.IItemRendererOwnerView
 		 */		
 		override protected function dataProviderChangeHandler(event:Event):void
 		{			
@@ -77,10 +71,22 @@ package org.apache.royale.html.beads
 			
 			removeAllItemRenderers(dataGroup);
 			
-			dp = dataProviderModel.dataProvider;
-			if (!dp)
+			if (!dataProviderModel.dataProvider)
 				return;
 			
+			createAllItemRenderers(dataGroup);
+			
+			dispatchItemCreatedEvent();
+		}
+
+		/**
+		 *  create all item renderers
+		 *  
+		 *  @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer
+		 *  @royaleignorecoercion org.apache.royale.core.IIndexedItemRendererInitializer
+		 */
+		protected function createAllItemRenderers(dataGroup:IItemRendererOwnerView):void
+		{
 			var n:int = dataProviderLength; 
 			for (var i:int = 0; i < n; i++)
 			{				
@@ -91,14 +97,11 @@ package org.apache.royale.html.beads
 				(itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, i);
 				ir.data = data;				
 			}
-			
-			dispatchItemCreatedEvent();
 		}
 
 		protected function dispatchItemCreatedEvent():void
 		{
 			sendStrandEvent(_strand,"itemsCreated");
 		}
-
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as
index d532595..01f3156 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as
@@ -18,7 +18,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-	import org.apache.royale.collections.ICollectionView;
 	import org.apache.royale.core.IIndexedItemRenderer;
 	import org.apache.royale.core.IIndexedItemRendererInitializer;
 	import org.apache.royale.core.IItemRendererOwnerView;
@@ -58,7 +57,7 @@ package org.apache.royale.html.beads
 			
 			super.dataProviderChangeHandler(event);
 			
-			if (!dp)
+			if (!dataProviderModel.dataProvider)
 				return;
 			
 			if(dped)
@@ -68,13 +67,25 @@ package org.apache.royale.html.beads
 				dped.removeEventListener(CollectionEvent.ITEM_UPDATED, itemUpdatedHandler);
 			}
 			// listen for individual items being added in the future.
-			dped = dp as IEventDispatcher;
+			dped = dataProviderModel.dataProvider as IEventDispatcher;
 			dped.addEventListener(CollectionEvent.ITEM_ADDED, itemAddedHandler);
 			dped.addEventListener(CollectionEvent.ITEM_REMOVED, itemRemovedHandler);
 			dped.addEventListener(CollectionEvent.ITEM_UPDATED, itemUpdatedHandler);
 		}
 		
 		/**
+		 * check if model and dataprovider exists. This check is done through all methods
+		 * @private
+		 */
+		private function get dataProviderExist():Boolean
+		{
+			if (!dataProviderModel || !dataProviderModel.dataProvider)
+				return false;
+			
+			return true;
+		}
+
+		/**
 		 * @private
 		 * @royaleignorecoercion org.apache.royale.collections.ICollectionView
 		 * @royaleignorecoercion org.apache.royale.core.IListPresentationModel
@@ -82,12 +93,8 @@ package org.apache.royale.html.beads
 		 */
 		protected function itemAddedHandler(event:CollectionEvent):void
 		{
-			if (!dataProviderModel)
+			if(!dataProviderExist)
 				return;
-			dp = dataProviderModel.dataProvider as ICollectionView;
-			if (!dp)
-				return;
-			
 			var view:IListView = (_strand as IStrandWithModelView).view as IListView;
 			var dataGroup:IItemRendererOwnerView = view.dataGroup;
 			
@@ -123,10 +130,7 @@ package org.apache.royale.html.beads
 		 */
 		protected function itemRemovedHandler(event:CollectionEvent):void
 		{
-			if (!dataProviderModel)
-				return;
-			dp = dataProviderModel.dataProvider as ICollectionView;
-			if (!dp)
+			if(!dataProviderExist)
 				return;
 			
 			var view:IListView = (_strand as IStrandWithModelView).view as IListView;
@@ -160,10 +164,7 @@ package org.apache.royale.html.beads
 		 */
 		protected function itemUpdatedHandler(event:CollectionEvent):void
 		{
-			if (!dataProviderModel)
-				return;
-			dp = dataProviderModel.dataProvider as ICollectionView;
-			if (!dp)
+			if(dataProviderExist)
 				return;
 
 			var view:IListView = (_strand as IStrandWithModelView).view as IListView;
@@ -180,13 +181,12 @@ package org.apache.royale.html.beads
 
 		override protected function get dataProviderLength():int
 		{
-			return dp.length;
+			return dataProviderModel.dataProvider.length;
 		}
 		
 		override protected function getItemAt(i:int):Object
 		{
-			return dp.getItemAt(i);
+			return dataProviderModel.dataProvider.getItemAt(i);
 		}
-		
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as
index 7a3f00d..0cb509e 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as
@@ -18,17 +18,15 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-	import org.apache.royale.core.IBead;
+	import org.apache.royale.core.DispatcherBead;
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IItemRendererClassFactory;
 	import org.apache.royale.core.IItemRendererInitializer;
 	import org.apache.royale.core.IItemRendererOwnerView;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.EventDispatcher;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
-	import org.apache.royale.core.DispatcherBead;
 
     /**
      *  The DataItemRendererFactoryBase class is a base class
@@ -162,6 +160,11 @@ package org.apache.royale.html.beads
 		{
 		}
         
+        /**
+         *  Remove all itemrenderers
+         * 
+         *  @royaleignorecoercion org.apache.royale.core.IItemRendererOwnerView
+         */
         protected function removeAllItemRenderers(dataGroup:IItemRendererOwnerView):void
         {
             dataGroup.removeAllItemRenderers();