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/01/16 22:56:39 UTC

[isis] branch master updated: ISIS-2265: simplifies adapter visibility processing

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 a6379d4  ISIS-2265: simplifies adapter visibility processing
a6379d4 is described below

commit a6379d46cc79b896bc46c06cec628f9d7605acf0
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jan 16 23:55:52 2020 +0100

    ISIS-2265: simplifies adapter visibility processing
---
 ...ctionInvocationFacetForDomainEventAbstract.java | 11 ++++-------
 .../CollectionAccessorFacetViaAccessor.java        | 11 ++++-------
 .../facets/collections/modify/CollectionFacet.java | 13 +------------
 .../ActionParameterAutoCompleteFacetViaMethod.java | 16 +++++-----------
 .../method/ActionChoicesFacetViaMethod.java        | 10 ++++------
 .../ActionParameterChoicesFacetViaMethod.java      | 19 +++++++------------
 .../method/PropertyAutoCompleteFacetMethod.java    | 16 +++++-----------
 .../method/PropertyChoicesFacetViaMethod.java      | 16 +++++-----------
 .../isis/core/metamodel/spec/ManagedObject.java    | 22 +++++++++++++++++++++-
 .../metamodel/facets/CollectionFacetUtilsTest.java | 10 +++++-----
 10 files changed, 61 insertions(+), 83 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index 3be74a0..1bc20bc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -59,7 +59,6 @@ import org.apache.isis.core.metamodel.facets.DomainEventHelper;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
 import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.services.ixn.InteractionDtoServiceInternal;
 import org.apache.isis.core.metamodel.services.publishing.PublisherDispatchService;
@@ -362,13 +361,11 @@ implements ImperativeFacet {
 
             val requiredContainerType = method.getReturnType();
             
-            val visiblePojoStream = ManagedObject.VisibilityUtil
-                    .streamVisiblePojos(resultAdapter, interactionInitiatedBy);
-            
-            final Object visibleObjects = CollectionFacet.Utils.collect(visiblePojoStream, requiredContainerType); 
+            val autofittedObjectContainer = ManagedObject.VisibilityUtil
+                    .visiblePojosAutofit(resultAdapter, interactionInitiatedBy, requiredContainerType); 
 
-            if (visibleObjects != null) {
-                return getObjectManager().adapt(visibleObjects);
+            if (autofittedObjectContainer != null) {
+                return getObjectManager().adapt(autofittedObjectContainer);
             }
 
             // would be null if unable to take a copy (unrecognized return type)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
index d5c3aa4..3f91789 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
@@ -27,7 +27,6 @@ import java.util.Map;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -76,13 +75,11 @@ implements ImperativeFacet {
         final boolean filterForVisibility = getConfiguration().getCore().getMetaModel().isFilterVisibility();
         if(filterForVisibility) {
             
-            val visiblePojoStream = ManagedObject.VisibilityUtil
-                    .streamVisiblePojos(collectionAdapter, interactionInitiatedBy);
+            val autofittedObjectContainer = ManagedObject.VisibilityUtil
+                    .visiblePojosAutofit(collectionAdapter, interactionInitiatedBy, method.getReturnType());
             
-            final Object visibleObjects = CollectionFacet.Utils.collect(visiblePojoStream, method.getReturnType());
-            
-            if (visibleObjects != null) {
-                return visibleObjects;
+            if (autofittedObjectContainer != null) {
+                return autofittedObjectContainer;
             }
             // would be null if unable to take a copy (unrecognized return type)
             // fallback to returning the original adapter, without filtering for visibility
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionFacet.java
index eadfb88..cdbb10e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionFacet.java
@@ -47,7 +47,6 @@ import org.apache.isis.core.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.internal.collections._Sets;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
-import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
@@ -131,7 +130,7 @@ public interface CollectionFacet extends Facet {
     }
 
     @UtilityClass
-    public static class Utils {
+    public static class AutofitUtils {
         
         /**
          * Copies the iterable into the specified type.
@@ -164,16 +163,6 @@ public interface CollectionFacet extends Facet {
 
         }
 
-        public static Object[] collectAsPojoArray(
-                final Stream<Object> pojoStream, 
-                final ObjectSpecification spec, 
-                final ObjectManager objectManger) {
-            
-            val optionPojo = pojoStream.collect(Collectors.toList());
-            final ManagedObject collection = objectManger.adapt(optionPojo);
-            return toArrayOfPojos(collection);
-        }
-        
         
         // -- HELPER
         
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
index ea8ee12..0d21fc2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
@@ -27,9 +27,7 @@ import java.util.Map;
 import org.apache.isis.core.commons.internal._Constants;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.param.autocomplete.ActionParameterAutoCompleteFacetAbstract;
 import org.apache.isis.core.metamodel.facets.param.autocomplete.MinLengthUtil;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -89,16 +87,12 @@ implements ImperativeFacet {
         if (collectionOrArray == null) {
             return _Constants.emptyObjects;
         }
-        final ManagedObject collectionAdapter = getObjectManager().adapt(collectionOrArray);
+        val collectionAdapter = getObjectManager().adapt(collectionOrArray);
 
-        final FacetedMethodParameter facetedMethodParameter = (FacetedMethodParameter) getFacetHolder();
-        final Class<?> parameterType = facetedMethodParameter.getType();
-
-        val visiblePojoStream = ManagedObject.VisibilityUtil
-                .streamVisiblePojos(collectionAdapter, interactionInitiatedBy);
-
-        val parameterSpec = getSpecification(parameterType);
-        return CollectionFacet.Utils.collectAsPojoArray(visiblePojoStream, parameterSpec, getObjectManager());
+        val visiblePojos = ManagedObject.VisibilityUtil
+                .visiblePojosAsArray(collectionAdapter, interactionInitiatedBy);
+        
+        return visiblePojos;
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
index daeff8e..52b3f25 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
@@ -27,7 +27,6 @@ import java.util.Map;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.param.choices.ActionChoicesFacetAbstract;
 import org.apache.isis.core.metamodel.spec.DomainModelException;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -95,11 +94,10 @@ public class ActionChoicesFacetViaMethod extends ActionChoicesFacetAbstract impl
         }
 
         val collectionAdapter = getObjectManager().adapt(collectionOrArray);
-        val visiblePojoStream = ManagedObject.VisibilityUtil
-                .streamVisiblePojos(collectionAdapter, interactionInitiatedBy);
-
-        val parameterSpec = getSpecification(parameterType);
-        return CollectionFacet.Utils.collectAsPojoArray(visiblePojoStream, parameterSpec, getObjectManager());
+        val visiblePojos = ManagedObject.VisibilityUtil
+                .visiblePojosAsArray(collectionAdapter, interactionInitiatedBy);
+        
+        return visiblePojos;
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
index 3d6dd22..2744d65 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
@@ -27,9 +27,7 @@ import java.util.Map;
 import org.apache.isis.core.commons.internal._Constants;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
@@ -72,21 +70,18 @@ implements ImperativeFacet {
             final List<ManagedObject> pendingArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
-        final Object choices =
-                ManagedObject.InvokeUtil.invokeAutofit(
-                        method, owningAdapter, pendingArgs);
+        final Object choices = ManagedObject.InvokeUtil
+                .invokeAutofit(method, owningAdapter, pendingArgs);
         if (choices == null) {
             return _Constants.emptyObjects;
         }
-        final ManagedObject objectAdapter = getObjectManager().adapt(choices);
-        final FacetedMethodParameter facetedMethodParameter = (FacetedMethodParameter) getFacetHolder();
-        final Class<?> parameterType = facetedMethodParameter.getType();
+        
+        val objectAdapter = getObjectManager().adapt(choices);
 
-        val visiblePjoStream = ManagedObject.VisibilityUtil
-                .streamVisiblePojos(objectAdapter, interactionInitiatedBy);
+        val visiblePojos = ManagedObject.VisibilityUtil
+                .visiblePojosAsArray(objectAdapter, interactionInitiatedBy);
 
-        val parameterSpec = getSpecification(parameterType);
-        return CollectionFacet.Utils.collectAsPojoArray(visiblePjoStream, parameterSpec, getObjectManager());
+        return visiblePojos;
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
index a6cfb63..cf60454 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
@@ -26,9 +26,7 @@ import java.util.Map;
 
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.param.autocomplete.MinLengthUtil;
 import org.apache.isis.core.metamodel.facets.properties.autocomplete.PropertyAutoCompleteFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -82,15 +80,11 @@ public class PropertyAutoCompleteFacetMethod extends PropertyAutoCompleteFacetAb
         }
 
         val collectionAdapter = getObjectManager().adapt(collectionOrArray);
-
-        final FacetedMethod facetedMethod = (FacetedMethod) getFacetHolder();
-        final Class<?> propertyType = facetedMethod.getType();
-
-        val visiblePojoStream = ManagedObject.VisibilityUtil
-                .streamVisiblePojos(collectionAdapter, interactionInitiatedBy);
-
-        val propertySpec = getSpecification(propertyType);
-        return CollectionFacet.Utils.collectAsPojoArray(visiblePojoStream, propertySpec, getObjectManager());
+        
+        val visiblePojos = ManagedObject.VisibilityUtil
+                .visiblePojosAsArray(collectionAdapter, interactionInitiatedBy);
+        
+        return visiblePojos;
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
index 72ed3ce..5a5035f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
@@ -26,9 +26,7 @@ import java.util.Map;
 
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.properties.choices.PropertyChoicesFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
@@ -76,17 +74,13 @@ public class PropertyChoicesFacetViaMethod extends PropertyChoicesFacetAbstract
 
         val collectionAdapter = getObjectManager().adapt(options);
 
-        final FacetedMethod facetedMethod = (FacetedMethod) getFacetHolder();
-        final Class<?> propertyType = facetedMethod.getType();
-
-        val visiblePojoStream = ManagedObject.VisibilityUtil
-                .streamVisiblePojos(collectionAdapter, interactionInitiatedBy);
-
-        val propertySpec = getSpecification(propertyType);
-        return CollectionFacet.Utils.collectAsPojoArray(visiblePojoStream, propertySpec, getObjectManager());
+        val visiblePojos = ManagedObject.VisibilityUtil
+                .visiblePojosAsArray(collectionAdapter, interactionInitiatedBy);
+        
+        return visiblePojos;
         
         
-        //XXX legacy of
+        //XXX legacy of, (not checking visibility)
 
 //        final Object options = ManagedObject.InvokeUtil.invoke(method, owningAdapter);
 //        if (options == null) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
index 640490d..96709fe 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
@@ -379,7 +379,7 @@ public interface ManagedObject {
                     .filter(VisibilityUtil.filterOn(interactionInitiatedBy));
         }
         
-        public static Stream<Object> streamVisiblePojos(
+        private static Stream<Object> streamVisiblePojos(
                 final ManagedObject collectionAdapter,
                 final InteractionInitiatedBy interactionInitiatedBy) {
     
@@ -388,6 +388,26 @@ public interface ManagedObject {
                     .map(ManagedObject::unwrapSingle);
         }
         
+        public static Object[] visiblePojosAsArray(
+                final ManagedObject collectionAdapter,
+                final InteractionInitiatedBy interactionInitiatedBy) {
+    
+            return streamVisiblePojos(collectionAdapter, interactionInitiatedBy)
+                    .collect(_Arrays.toArray(Object.class));
+        }
+        
+        public static Object visiblePojosAutofit(
+                final ManagedObject collectionAdapter,
+                final InteractionInitiatedBy interactionInitiatedBy,
+                final Class<?> requiredContainerType) {
+            
+            val visiblePojoStream = streamVisiblePojos(collectionAdapter, interactionInitiatedBy);
+            val autofittedObjectContainer = CollectionFacet.AutofitUtils
+                    .collect(visiblePojoStream, requiredContainerType);
+            return autofittedObjectContainer;
+        }
+        
+        
         /**
          * @param adapter - an adapter around the domain object whose visibility is being checked
          * @param interactionInitiatedBy
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/CollectionFacetUtilsTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/CollectionFacetUtilsTest.java
index bb603e9..f1d9605 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/CollectionFacetUtilsTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/CollectionFacetUtilsTest.java
@@ -78,7 +78,7 @@ public class CollectionFacetUtilsTest {
                 Collection.class
                 );
         for (Class<?> collectionType : collectionTypes) {
-            Object o = CollectionFacet.Utils.collect(iterable.stream(), collectionType);
+            Object o = CollectionFacet.AutofitUtils.collect(iterable.stream(), collectionType);
             assertThat(o, is(not(nullValue())));
             assertThat(collectionType.isAssignableFrom(o.getClass()), is(true));
 
@@ -91,7 +91,7 @@ public class CollectionFacetUtilsTest {
 
     @Test
     public void whenArray() throws Exception {
-        Object o = CollectionFacet.Utils.collect(iterable.stream(), String[].class);
+        Object o = CollectionFacet.AutofitUtils.collect(iterable.stream(), String[].class);
         assertThat(o instanceof String[], is(true));
 
         String[] copy = (String[])o;
@@ -100,7 +100,7 @@ public class CollectionFacetUtilsTest {
 
     @Test
     public void whenNotSupported() throws Exception {
-        Object o = CollectionFacet.Utils.collect(iterable.stream(), Map.class);
+        Object o = CollectionFacet.AutofitUtils.collect(iterable.stream(), Map.class);
         assertThat(o, is(nullValue()));
     }
 
@@ -109,7 +109,7 @@ public class CollectionFacetUtilsTest {
 
         expectedException.expect(IllegalArgumentException.class);
 
-        CollectionFacet.Utils.collect(iterable.stream(), null);
+        CollectionFacet.AutofitUtils.collect(iterable.stream(), null);
     }
 
     @Test
@@ -117,7 +117,7 @@ public class CollectionFacetUtilsTest {
 
         expectedException.expect(IllegalArgumentException.class);
 
-        CollectionFacet.Utils.collect(null, List.class);
+        CollectionFacet.AutofitUtils.collect(null, List.class);
     }