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 <[email protected]>
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();            

Reply via email to