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 2018/09/28 20:16:14 UTC

[isis] branch v2 updated (a445986 -> f9ebfa2)

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

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


    from a445986  ISIS-1976: rework CollectionFacet API such that methods invoked on non-scalar types preserves their generic type nature
     new f6c1f18  ISIS-1976: minor: move static ElementSpecificationProvider factory from facet to the interface itself
     new f9ebfa2  ISIS-1976: facet lookup: cleanup some code smell

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 ...lementSpecificationProviderFromTypeOfFacet.java |  8 ---
 ...ctionInvocationFacetForDomainEventAbstract.java |  4 +-
 .../javautilcollection/JavaArrayFacet.java         |  3 -
 .../spec/ElementSpecificationProvider.java         | 12 ++++
 .../core/metamodel/spec/ObjectSpecification.java   |  2 +
 .../core/metamodel/spec/feature/ObjectAction.java  |  1 -
 .../specimpl/ObjectSpecificationAbstract.java      | 74 +++++++++++-----------
 .../ObjectAdapterContext_Factories.java            |  4 +-
 .../actionresponse/ActionResultResponseType.java   |  9 +--
 9 files changed, 61 insertions(+), 56 deletions(-)


[isis] 01/02: ISIS-1976: minor: move static ElementSpecificationProvider factory from facet to the interface itself

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f6c1f181af447d0ec51bad21366033c10df6fae1
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 28 21:05:17 2018 +0200

    ISIS-1976: minor: move static ElementSpecificationProvider factory from
    facet to the interface itself
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../typeof/ElementSpecificationProviderFromTypeOfFacet.java  |  8 --------
 .../ActionInvocationFacetForDomainEventAbstract.java         |  4 ++--
 .../collections/javautilcollection/JavaArrayFacet.java       |  3 ---
 .../core/metamodel/spec/ElementSpecificationProvider.java    | 12 ++++++++++++
 .../isis/core/metamodel/spec/feature/ObjectAction.java       |  1 -
 .../adaptermanager/ObjectAdapterContext_Factories.java       |  4 ++--
 .../wicket/ui/actionresponse/ActionResultResponseType.java   |  9 +++++----
 7 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actcoll/typeof/ElementSpecificationProviderFromTypeOfFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actcoll/typeof/ElementSpecificationProviderFromTypeOfFacet.java
index a99d448..96adc23 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actcoll/typeof/ElementSpecificationProviderFromTypeOfFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actcoll/typeof/ElementSpecificationProviderFromTypeOfFacet.java
@@ -21,14 +21,6 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 public class ElementSpecificationProviderFromTypeOfFacet implements ElementSpecificationProvider {
 
-    public static ElementSpecificationProvider createFrom(final TypeOfFacet typeOfFacet) {
-        if (typeOfFacet == null) {
-            return null;
-        }
-        final ObjectSpecification spec = typeOfFacet.valueSpec();
-        return new ElementSpecificationProviderFromTypeOfFacet(spec);
-    }
-
     private final ObjectSpecification spec;
 
     public ElementSpecificationProviderFromTypeOfFacet(final ObjectSpecification spec) {
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 01c7cca..871e667 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
@@ -71,7 +71,6 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.CollectionUtils;
 import org.apache.isis.core.metamodel.facets.DomainEventHelper;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.facets.actcoll.typeof.ElementSpecificationProviderFromTypeOfFacet;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
@@ -81,6 +80,7 @@ import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.ixn.InteractionDtoServiceInternal;
 import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.metamodel.services.publishing.PublishingServiceInternal;
+import org.apache.isis.core.metamodel.spec.ElementSpecificationProvider;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
@@ -425,7 +425,7 @@ implements ImperativeFacet {
 
         // copy over TypeOfFacet if required
         final TypeOfFacet typeOfFacet = getFacetHolder().getFacet(TypeOfFacet.class);
-        clonedAdapter.setElementSpecificationProvider(ElementSpecificationProviderFromTypeOfFacet.createFrom(typeOfFacet));
+        clonedAdapter.setElementSpecificationProvider(ElementSpecificationProvider.of(typeOfFacet));
 
         return clonedAdapter;
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java
index a99e414..5fcec93 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java
@@ -22,9 +22,6 @@ package org.apache.isis.core.metamodel.facets.collections.javautilcollection;
 import static org.apache.isis.commons.internal.base._NullSafe.isEmpty;
 import static org.apache.isis.commons.internal.collections._Arrays.toArray;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.stream.Stream;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ElementSpecificationProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ElementSpecificationProvider.java
index b159907..44e43e3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ElementSpecificationProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ElementSpecificationProvider.java
@@ -16,6 +16,9 @@
  */
 package org.apache.isis.core.metamodel.spec;
 
+import org.apache.isis.core.metamodel.facets.actcoll.typeof.ElementSpecificationProviderFromTypeOfFacet;
+import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
+
 /**
  * A mechanism to provide the {@link ObjectSpecification type} of a
  * (stand-alone) collection.
@@ -27,4 +30,13 @@ package org.apache.isis.core.metamodel.spec;
 public interface ElementSpecificationProvider {
 
     public ObjectSpecification getElementType();
+    
+    /** for convenience */
+    public static ElementSpecificationProvider of(final TypeOfFacet typeOfFacet) {
+        if (typeOfFacet == null) {
+            return null;
+        }
+        final ObjectSpecification spec = typeOfFacet.valueSpec();
+        return new ElementSpecificationProviderFromTypeOfFacet(spec);
+    }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index 23a8af0..2de9176 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -42,7 +42,6 @@ import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facets.actions.action.associateWith.AssociatedWithFacet;
-import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
 import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java
index fffc74f..8a99b90 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java
@@ -24,8 +24,8 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.ParentedOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.facets.actcoll.typeof.ElementSpecificationProviderFromTypeOfFacet;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
+import org.apache.isis.core.metamodel.spec.ElementSpecificationProvider;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
@@ -83,7 +83,7 @@ class ObjectAdapterContext_Factories implements ObjectAdapterFactories {
         // the adapter
         // to look this up on the fly?]
         final TypeOfFacet facet = otma.getFacet(TypeOfFacet.class);
-        collectionAdapter.setElementSpecificationProvider(ElementSpecificationProviderFromTypeOfFacet.createFrom(facet));
+        collectionAdapter.setElementSpecificationProvider(ElementSpecificationProvider.of(facet));
 
         return collectionAdapter;
     }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
index 70536dd..4f367be 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
@@ -30,9 +30,9 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
-import org.apache.isis.core.metamodel.facets.actcoll.typeof.ElementSpecificationProviderFromTypeOfFacet;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
+import org.apache.isis.core.metamodel.spec.ElementSpecificationProvider;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
@@ -63,10 +63,11 @@ public enum ActionResultResponseType {
         @Override
         public ActionResultResponse interpretResult(final ActionModel actionModel, final AjaxRequestTarget target, final ObjectAdapter resultAdapter) {
             if(resultAdapter.getElementSpecification() == null) {
-                final TypeOfFacet typeOfFacet = actionModel.getActionMemento().getAction(IsisContext.getSessionFactory().getSpecificationLoader()).getFacet(
-                        TypeOfFacet.class);
+                final TypeOfFacet typeOfFacet = actionModel.getActionMemento()
+                        .getAction(IsisContext.getSessionFactory().getSpecificationLoader())
+                        .getFacet(TypeOfFacet.class);
                 if (typeOfFacet != null) {
-                    resultAdapter.setElementSpecificationProvider(new ElementSpecificationProviderFromTypeOfFacet(typeOfFacet.valueSpec()));
+                    resultAdapter.setElementSpecificationProvider(ElementSpecificationProvider.of(typeOfFacet));
                 }
             }
 


[isis] 02/02: ISIS-1976: facet lookup: cleanup some code smell

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f9ebfa2adc414d69d602d76d59fdf875f192dd26
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 28 22:12:10 2018 +0200

    ISIS-1976: facet lookup: cleanup some code smell
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../core/metamodel/spec/ObjectSpecification.java   |  2 +
 .../specimpl/ObjectSpecificationAbstract.java      | 74 +++++++++++-----------
 2 files changed, 40 insertions(+), 36 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index 9a99c37..33d2fc3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -342,5 +342,7 @@ ObjectAssociationContainer, Hierarchical,  DefaultProvider {
     boolean isPersistenceCapable();
     boolean isPersistenceCapableOrViewModel();
 
+    
+
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index ba8c158..22c9711 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.function.Function;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -37,6 +38,7 @@ import org.slf4j.LoggerFactory;
 import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
@@ -468,46 +470,46 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
 
     @Override
     public <Q extends Facet> Q getFacet(final Class<Q> facetType) {
-        final Q facet = super.getFacet(facetType);
-        if (isNotANoopFacet(facet)) {
-            return facet;
-        }
-        Q noopFacet = facet; // might be null
-        if (interfaces() != null) {
-            final List<ObjectSpecification> interfaces = interfaces();
-            for (int i = 0; i < interfaces.size(); i++) {
-                final ObjectSpecification interfaceSpec = interfaces.get(i);
-                if (interfaceSpec == null) {
-                    // HACK: shouldn't happen, but occurring on occasion when
-                    // running
-                    // XATs under JUnit4. Some sort of race condition?
-                    continue;
-                }
-                final Q interfaceFacet = interfaceSpec.getFacet(facetType);
-                if (isNotANoopFacet(interfaceFacet)) {
-                    return interfaceFacet;
-                }
-                if (noopFacet == null) {
-                    noopFacet = interfaceFacet; // might be null
-                }
-            }
-        }
+
+        // lookup facet holder's facet
+        final Stream<Q> facets1 = _NullSafe.streamNullable(super.getFacet(facetType));
+        
+        // lookup all interfaces
+        final Stream<Q> facets2 = _NullSafe.stream(interfaces)
+                .filter(_NullSafe::isPresent) // just in case
+                .map(interfaceSpec->interfaceSpec.getFacet(facetType));
+        
         // search up the inheritance hierarchy
-        final ObjectSpecification superSpec = superclass();
-        if (superSpec != null) {
-            final Q superClassFacet = superSpec.getFacet(facetType);
-            if (isNotANoopFacet(superClassFacet)) {
-                return superClassFacet;
-            }
-            // TODO: should we perhaps default the noopFacet here as we do in the previous two cases?
-        }
-        return noopFacet;
+        final Stream<Q> facets3 = _NullSafe.streamNullable(superclass()) 
+                .map(superSpec->superSpec.getFacet(facetType));
+        
+        final Stream<Q> facetsCombined = Stream.concat(Stream.concat(facets1, facets2), facets3);
+        
+        final NotANoopFacetFilter<Q> notANoopFacetFilter = new NotANoopFacetFilter<>();
+        
+        return facetsCombined
+        .filter(notANoopFacetFilter)
+        .findFirst()
+        .orElse(notANoopFacetFilter.noopFacet);
     }
 
-    private boolean isNotANoopFacet(final Facet facet) {
-        return facet != null && !facet.isNoop();
-    }
+    private static class NotANoopFacetFilter<Q extends Facet> implements Predicate<Q> {
+        Q noopFacet;
 
+        @Override
+        public boolean test(Q facet) {
+            if(facet==null) {
+                return false;
+            }
+            if(!facet.isNoop()) {
+                return true;
+            }
+            if(noopFacet == null) {
+                noopFacet = facet;
+            }
+            return false;
+        }
+    }
 
 
     // -- DefaultValue - unused