You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/02/13 17:41:07 UTC

[isis] branch master updated: ISIS-2275: regression: only prime layout data when newly created

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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 1b12aa6  ISIS-2275: regression: only prime layout data when newly created
1b12aa6 is described below

commit 1b12aa69bd537bccaa00fcda783a2e107fb261af
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Feb 13 18:40:52 2020 +0100

    ISIS-2275: regression: only prime layout data when newly created
---
 .../core/metamodel/layout/LayoutFacetUtil.java     | 38 +++++++++++++
 .../grid/bootstrap3/GridSystemServiceBS3.java      | 65 ++++++++++++++++------
 2 files changed, 85 insertions(+), 18 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/LayoutFacetUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/LayoutFacetUtil.java
index ef718c7..f52e421 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/LayoutFacetUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/LayoutFacetUtil.java
@@ -272,6 +272,44 @@ public class LayoutFacetUtil {
         }
     }
 
+    public static class LayoutDataFactory {
+        
+        private final MetamodelToGridOverridingVisitor helper;
+        
+        public static LayoutDataFactory of(ObjectSpecification objectSpec) {
+            return new LayoutDataFactory(objectSpec);
+        }
+        
+        private LayoutDataFactory(ObjectSpecification objectSpec) {
+            this.helper = MetamodelToGridOverridingVisitor.of(objectSpec);
+        }
+        
+        public ActionLayoutData createActionLayoutData(String id) {
+            val layoutData = new ActionLayoutData(id);
+            helper.visit(layoutData);
+            return layoutData;
+        }
+        
+        public CollectionLayoutData createCollectionLayoutData(String id) {
+            val layoutData = new CollectionLayoutData(id);
+            helper.visit(layoutData);
+            return layoutData;
+        }
+        
+        public PropertyLayoutData createPropertyLayoutData(String id) {
+            val layoutData = new PropertyLayoutData(id);
+            helper.visit(layoutData);
+            return layoutData;
+        }
+        
+        public DomainObjectLayoutData createDomainObjectLayoutData() {
+            val layoutData = new DomainObjectLayoutData();
+            helper.visit(layoutData);
+            return layoutData;
+        }
+        
+    }
+    
     @RequiredArgsConstructor(staticName = "of")
     public static class MetamodelToGridOverridingVisitor extends Grid.VisitorAdapter  {
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
index 920db96..53c4141 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
@@ -24,6 +24,7 @@ import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import java.util.function.BiConsumer;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import javax.inject.Inject;
@@ -59,7 +60,7 @@ import org.apache.isis.core.commons.internal.resources._Resources;
 import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet;
 import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
 import org.apache.isis.core.metamodel.facets.members.order.annotprop.MemberOrderFacetAnnotation;
-import org.apache.isis.core.metamodel.layout.LayoutFacetUtil.MetamodelToGridOverridingVisitor;
+import org.apache.isis.core.metamodel.layout.LayoutFacetUtil.LayoutDataFactory;
 import org.apache.isis.core.metamodel.services.grid.GridReaderUsingJaxb;
 import org.apache.isis.core.metamodel.services.grid.GridSystemServiceAbstract;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -188,6 +189,8 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
             return false;
         }
         val gridModel = gridModelIfValid.get(); 
+        
+        val layoutDataFactory = LayoutDataFactory.of(objectSpec);
 
         // * surplus ... those defined in the grid model but not available with the meta-model 
         // * missing ... those available with the meta-model but missing in the grid-model 
@@ -258,14 +261,22 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
                         .map(ObjectAssociation::getId)
                         .collect(Collectors.toList());
 
-                addPropertiesTo(fieldSet, associations1To1Ids, propertyLayoutDataById::put);
+                addPropertiesTo(
+                        fieldSet, 
+                        associations1To1Ids,
+                        layoutDataFactory::createPropertyLayoutData,
+                        propertyLayoutDataById::put);
             }
 
             if(!unboundPropertyIds.isEmpty()) {
                 val fieldSet = gridModel.getFieldSetForUnreferencedPropertiesRef();
                 if(fieldSet != null) {
                     unboundPropertyIds.removeAll(unboundMetadataContributingIds);
-                    addPropertiesTo(fieldSet, unboundPropertyIds, propertyLayoutDataById::put);
+                    addPropertiesTo(
+                            fieldSet,
+                            unboundPropertyIds,
+                            layoutDataFactory::createPropertyLayoutData,
+                            propertyLayoutDataById::put);
                 }
             }
         }
@@ -291,11 +302,19 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
 
             final BS3TabGroup bs3TabGroup = gridModel.getTabGroupForUnreferencedCollectionsRef();
             if(bs3TabGroup != null) {
-                addCollectionsTo(bs3TabGroup, sortedMissingCollectionIds, objectSpec);
+                addCollectionsTo(
+                        bs3TabGroup, 
+                        sortedMissingCollectionIds, 
+                        objectSpec,
+                        layoutDataFactory::createCollectionLayoutData);
             } else {
                 final BS3Col bs3Col = gridModel.getColForUnreferencedCollectionsRef();
                 if(bs3Col != null) {
-                    addCollectionsTo(bs3Col, sortedMissingCollectionIds, collectionLayoutDataById::put);
+                    addCollectionsTo(
+                        bs3Col, 
+                        sortedMissingCollectionIds,
+                        layoutDataFactory::createCollectionLayoutData,
+                        collectionLayoutDataById::put);
                 }
             }
         }
@@ -374,7 +393,7 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
             }
             // if the @MemberOrder for the action references a field set (that has bound
             // associations), then don't mark it as missing, but instead explicitly add it to the
-            // list of actions of that fieldset.
+            // list of actions of that field-set.
             final Set<String> boundAssociationIds = boundAssociationIdsByFieldSetId.get(id);
             if(boundAssociationIds != null && !boundAssociationIds.isEmpty()) {
 
@@ -400,24 +419,30 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
         if(!missingActionIds.isEmpty()) {
             final BS3Col bs3Col = gridModel.getColForUnreferencedActionsRef();
             if(bs3Col != null) {
-                addActionsTo(bs3Col, missingActionIds, actionLayoutDataById::put);
+                addActionsTo(
+                        bs3Col,
+                        missingActionIds, 
+                        layoutDataFactory::createActionLayoutData,
+                        actionLayoutDataById::put);
             } else {
                 final FieldSet fieldSet = gridModel.getFieldSetForUnreferencedActionsRef();
                 if(fieldSet != null) {
-                    addActionsTo(fieldSet, missingActionIds, actionLayoutDataById::put);
+                    addActionsTo(
+                            fieldSet, 
+                            missingActionIds,
+                            layoutDataFactory::createActionLayoutData,
+                            actionLayoutDataById::put);
                 }
             }
         }
 
-        // prime all layout data from metamodel
-        grid.visit(MetamodelToGridOverridingVisitor.of(objectSpec));
-        
         return true;
     }
 
     private void addPropertiesTo(
             final FieldSet fieldSet,
             final Collection<String> propertyIds,
+            final Function<String, PropertyLayoutData> layoutFactory,
             final BiConsumer<String, PropertyLayoutData> onNewLayoutData) {
         
         final Set<String> existingIds =
@@ -429,7 +454,7 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
             if(existingIds.contains(propertyId)) {
                 continue;
             }
-            val propertyLayoutData = new PropertyLayoutData(propertyId);
+            val propertyLayoutData = layoutFactory.apply(propertyId);
             fieldSet.getProperties().add(propertyLayoutData);
             propertyLayoutData.setOwner(fieldSet);
             onNewLayoutData.accept(propertyId, propertyLayoutData);
@@ -439,10 +464,11 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
     private void addCollectionsTo(
             final BS3Col tabRowCol,
             final Collection<String> collectionIds,
+            final Function<String, CollectionLayoutData> layoutFactory,
             final BiConsumer<String, CollectionLayoutData> onNewLayoutData) {
         
         for (final String collectionId : collectionIds) {
-            val collectionLayoutData = new CollectionLayoutData(collectionId);
+            val collectionLayoutData = layoutFactory.apply(collectionId);
             tabRowCol.getCollections().add(collectionLayoutData);
             onNewLayoutData.accept(collectionId, collectionLayoutData);
         }
@@ -451,7 +477,8 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
     private void addCollectionsTo(
             final BS3TabGroup tabGroup,
             final Collection<String> collectionIds,
-            final ObjectSpecification objectSpec) {
+            final ObjectSpecification objectSpec,
+            final Function<String, CollectionLayoutData> layoutFactory) {
         
         for (final String collectionId : collectionIds) {
             final BS3Tab bs3Tab = new BS3Tab();
@@ -469,18 +496,19 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
             tabRowCol.setOwner(tabRow);
             tabRow.getCols().add(tabRowCol);
 
-            final CollectionLayoutData layoutMetadata = new CollectionLayoutData(collectionId);
-            tabRowCol.getCollections().add(layoutMetadata);
+            val collectionLayoutData = layoutFactory.apply(collectionId);
+            tabRowCol.getCollections().add(collectionLayoutData);
         }
     }
 
     protected void addActionsTo(
             final BS3Col bs3Col,
             final Collection<String> actionIds,
+            final Function<String, ActionLayoutData> layoutFactory,
             final BiConsumer<String, ActionLayoutData> onNewLayoutData) {
         
         for (String actionId : actionIds) {
-            val actionLayoutData = new ActionLayoutData(actionId);
+            val actionLayoutData = layoutFactory.apply(actionId);
             addActionTo(bs3Col, actionLayoutData);
             onNewLayoutData.accept(actionId, actionLayoutData);
         }
@@ -489,10 +517,11 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
     private void addActionsTo(
             final FieldSet fieldSet,
             final Collection<String> actionIds,
+            final Function<String, ActionLayoutData> layoutFactory,
             final BiConsumer<String, ActionLayoutData> onNewLayoutData) {
         
         for (String actionId : actionIds) {
-            val actionLayoutData = new ActionLayoutData(actionId);
+            val actionLayoutData = layoutFactory.apply(actionId);
             addActionTo(fieldSet, actionLayoutData);
             onNewLayoutData.accept(actionId, actionLayoutData);
         }