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 2019/10/24 13:36:57 UTC

[isis] branch v2 updated: ISIS-2158: more simplifications ... removing DecoratingFacet

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


The following commit(s) were added to refs/heads/v2 by this push:
     new 5e90244  ISIS-2158: more simplifications ... removing DecoratingFacet
5e90244 is described below

commit 5e902448b6c950e26b1679fa19e064fd611cc8af
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Oct 24 15:36:45 2019 +0200

    ISIS-2158: more simplifications ... removing DecoratingFacet
---
 .../commons/internal/functions/_Predicates.java    |  3 +-
 .../isis/metamodel/facetapi/DecoratingFacet.java   | 35 ----------
 .../isis/metamodel/facetapi/FacetHolder.java       |  6 ++
 .../isis/metamodel/facets/ImperativeFacet.java     |  6 --
 .../metamodel/interactions/InteractionUtils.java   | 81 ++++++++++------------
 .../interactions/InteractionUtils_isA_Test.java    | 12 ++--
 6 files changed, 50 insertions(+), 93 deletions(-)

diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java b/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java
index 9a5a155..a708e02 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java
@@ -79,9 +79,8 @@ public final class _Predicates {
     /**
      * @param cls
      * @return a Predicate that tests for the operand to be an instance of {@code cls}
-     * @deprecated use Class::isInstance instead
+     * @implNote equivalent to {@code Class::isInstance}
      */
-    @Deprecated
     public static Predicate<Object> instanceOf(Class<?> cls) {
         return cls::isInstance;
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facetapi/DecoratingFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facetapi/DecoratingFacet.java
deleted file mode 100644
index 6c3013b..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facetapi/DecoratingFacet.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.metamodel.facetapi;
-
-/**
- * Provides access to underlying facet that has been decorated.
- *
- * <p>
- * Originally introduced as a means to allow filtering of facets to get at the
- * underlying facet (eg to locate those that are imperative, that is, abstract a
- * method call to an <tt>addToXxx</tt>).
- *
- * @param <T>
- */
-public interface DecoratingFacet<T extends Facet> {
-
-    T getDecoratedFacet();
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facetapi/FacetHolder.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facetapi/FacetHolder.java
index 02f56e1..d819bbe 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facetapi/FacetHolder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facetapi/FacetHolder.java
@@ -67,6 +67,12 @@ public interface FacetHolder {
     }
 
     Stream<Facet> streamFacets();
+    
+    default <F extends Facet> Stream<F> streamFacets(Class<F> requiredType) {
+        return streamFacets()
+                .filter(facet->requiredType.isAssignableFrom(facet.getClass()))
+                .map(requiredType::cast);
+    }
 
     /**
      * Adds the facet, extracting its {@link Facet#facetType() type} as the key.
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/ImperativeFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/ImperativeFacet.java
index 3e4160f..a8529a5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/ImperativeFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/ImperativeFacet.java
@@ -26,9 +26,7 @@ import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
-import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.metamodel.facetapi.DecoratingFacet;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectMember;
@@ -123,10 +121,6 @@ public interface ImperativeFacet extends Facet {
             if (facet.getUnderlyingFacet() instanceof ImperativeFacet) {
                 return (ImperativeFacet) facet.getUnderlyingFacet();
             }
-            if (facet instanceof DecoratingFacet) {
-                final DecoratingFacet<?> decoratingFacet = _Casts.uncheckedCast(facet);
-                return getImperativeFacet(decoratingFacet.getDecoratedFacet());
-            }
             return null;
         }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/InteractionUtils.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/InteractionUtils.java
index 161040a..64901b2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/InteractionUtils.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/InteractionUtils.java
@@ -19,68 +19,61 @@
 
 package org.apache.isis.metamodel.interactions;
 
-import java.util.function.Predicate;
-import java.util.stream.Stream;
-
 import org.apache.isis.metamodel.consent.InteractionResult;
 import org.apache.isis.metamodel.consent.InteractionResultSet;
-import org.apache.isis.metamodel.facetapi.DecoratingFacet;
-import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
 import lombok.val;
 
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class InteractionUtils {
 
-    private InteractionUtils() {
-    }
-
-    public static InteractionResult isVisibleResult(final FacetHolder facetHolder, final VisibilityContext<?> context) {
-        final InteractionResult result = new InteractionResult(context.createInteractionEvent());
-        final Stream<Facet> facets = facetHolder.streamFacets().filter(isA(HidingInteractionAdvisor.class));
-        facets.forEach(facet->{
-            final HidingInteractionAdvisor advisor = (HidingInteractionAdvisor) facet;
-
-            result.advise(advisor.hides(context), advisor);
+    public static InteractionResult isVisibleResult(FacetHolder facetHolder, VisibilityContext<?> context) {
+        
+        val iaResult = new InteractionResult(context.createInteractionEvent());
+        
+        facetHolder.streamFacets(HidingInteractionAdvisor.class)
+        .forEach(advisor->{
+            iaResult.advise(advisor.hides(context), advisor);
         });
-        return result;
+        
+        return iaResult;
     }
 
-    public static InteractionResult isUsableResult(final FacetHolder facetHolder, final UsabilityContext<?> context) {
-        final InteractionResult result = new InteractionResult(context.createInteractionEvent());
-        final Stream<Facet> facets = facetHolder.streamFacets().filter(isA(DisablingInteractionAdvisor.class));
-        facets.forEach(facet->{
-            final DisablingInteractionAdvisor advisor = (DisablingInteractionAdvisor) facet;
+    public static InteractionResult isUsableResult(FacetHolder facetHolder, UsabilityContext<?> context) {
+        
+        val isResult = new InteractionResult(context.createInteractionEvent());
+        
+        facetHolder.streamFacets(DisablingInteractionAdvisor.class)
+        .forEach(advisor->{
             final String disables = advisor.disables(context);
-            result.advise(disables, advisor);
+            isResult.advise(disables, advisor);
         });
-        return result;
+        
+        return isResult;
     }
 
-    public static InteractionResult isValidResult(final FacetHolder facetHolder, final ValidityContext<?> context) {
-        final InteractionResult result = new InteractionResult(context.createInteractionEvent());
-        final Stream<Facet> facets = facetHolder.streamFacets().filter(isA(ValidatingInteractionAdvisor.class));
-        facets.forEach(facet->{
-            val advisor = (ValidatingInteractionAdvisor) facet;
-            result.advise(advisor.invalidates(context), advisor);
+    public static InteractionResult isValidResult(FacetHolder facetHolder, ValidityContext<?> context) {
+        
+        val iaResult = new InteractionResult(context.createInteractionEvent());
+        
+        facetHolder.streamFacets(ValidatingInteractionAdvisor.class)
+        .forEach(advisor->{
+            iaResult.advise(advisor.invalidates(context), advisor);
         });
-        return result;
+        
+        return iaResult;
     }
 
-    public static InteractionResultSet isValidResultSet(final FacetHolder facetHolder, final ValidityContext<?> context, final InteractionResultSet resultSet) {
+    public static InteractionResultSet isValidResultSet(
+            FacetHolder facetHolder, 
+            ValidityContext<?> context, 
+            InteractionResultSet resultSet) {
+        
         return resultSet.add(isValidResult(facetHolder, context));
     }
-
-    static Predicate<Facet> isA(final Class<?> superClass) {
-        return new Predicate<Facet>() {
-            @Override
-            public boolean test(final Facet facet) {
-                if (facet instanceof DecoratingFacet) {
-                    final DecoratingFacet<?> decoratingFacet = (DecoratingFacet<?>) facet;
-                    return test(decoratingFacet.getDecoratedFacet());
-                }
-                return superClass.isAssignableFrom(facet.getClass());
-            }
-        };
-    }
+  
+  
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/interactions/InteractionUtils_isA_Test.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/interactions/InteractionUtils_isA_Test.java
index 462083c..2869ad9 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/interactions/InteractionUtils_isA_Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/interactions/InteractionUtils_isA_Test.java
@@ -19,14 +19,14 @@
 
 package org.apache.isis.metamodel.interactions;
 
-import java.util.function.Predicate;
-
+import org.apache.isis.commons.internal.functions._Predicates;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facetapi.FacetHolderImpl;
 
 import junit.framework.TestCase;
+import lombok.val;
 
 public class InteractionUtils_isA_Test extends TestCase {
 
@@ -81,22 +81,22 @@ public class InteractionUtils_isA_Test extends TestCase {
     }
 
     public void testIsAWhenIs() {
-        final Predicate<Facet> predicate = InteractionUtils.isA(FooFacet.class);
+        val predicate = _Predicates.instanceOf(FooFacet.class);
         TestCase.assertTrue(predicate.test(fooFacet));
     }
 
     public void testIsAWhenIsNot() {
-        final Predicate<Facet> predicate = InteractionUtils.isA(FooFacet.class);
+        val predicate = _Predicates.instanceOf(FooFacet.class);
         TestCase.assertFalse(predicate.test(barFacet));
     }
 
     public void testIsAWhenIsSubclass() {
-        final Predicate<Facet> predicate = InteractionUtils.isA(FooFacet.class);
+        val predicate = _Predicates.instanceOf(FooFacet.class);
         TestCase.assertTrue(predicate.test(fooSubFacet));
     }
 
     public void testIsAWhenIsNotBecauseASuperclass() {
-        final Predicate<Facet> predicate = InteractionUtils.isA(FooFacet.class);
+        val predicate = _Predicates.instanceOf(FooFacet.class);
         TestCase.assertFalse(predicate.test(fooSuperFacet));
     }