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 2022/09/15 04:22:55 UTC

[isis] branch master updated: ISIS-3210: don't expose specimpl

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 438ab8eceb ISIS-3210: don't expose specimpl
438ab8eceb is described below

commit 438ab8eceb08eb42376f6905649902b569c0f297
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 15 06:22:49 2022 +0200

    ISIS-3210: don't expose specimpl
---
 core/metamodel/src/main/java/module-info.java      |  5 -----
 .../command/CommandExecutorServiceDefault.java     | 12 +++--------
 .../wrapper/WrapperFactoryDefault.java             | 23 ++++++++++------------
 3 files changed, 13 insertions(+), 27 deletions(-)

diff --git a/core/metamodel/src/main/java/module-info.java b/core/metamodel/src/main/java/module-info.java
index 35db97fb0e..40228eecf3 100644
--- a/core/metamodel/src/main/java/module-info.java
+++ b/core/metamodel/src/main/java/module-info.java
@@ -87,11 +87,6 @@ open module org.apache.isis.core.metamodel {
         //TODO don't expose impl. details
         to org.apache.isis.viewer.wicket.model;
 
-    exports org.apache.isis.core.metamodel.specloader.specimpl
-        //TODO don't expose impl. details
-        to //org.apache.isis.viewer.wicket.ui,
-        org.apache.isis.core.runtimeservices;
-
     exports org.apache.isis.core.metamodel.specloader
         to org.apache.isis.core.runtimeservices,
         //TODO don't expose to viewers
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java
index 071bf74c28..a99d3915d0 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java
@@ -60,7 +60,6 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionMixedIn;
 import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
 import org.apache.isis.schema.cmd.v2.ActionDto;
 import org.apache.isis.schema.cmd.v2.CommandDto;
@@ -193,19 +192,14 @@ public class CommandExecutorServiceDefault implements CommandExecutorService {
             for (OidDto targetOidDto : targetOidDtos) {
 
                 val targetAdapter = valueMarshaller.recoverReferenceFrom(targetOidDto);
-                final ObjectAction objectAction = findObjectAction(targetAdapter, logicalMemberIdentifier);
+                val objectAction = findObjectAction(targetAdapter, logicalMemberIdentifier);
 
                 // we pass 'null' for the mixedInAdapter; if this action _is_ a mixin then
                 // it will switch the targetAdapter to be the mixedInAdapter transparently
                 val argAdapters = argAdaptersFor(actionDto);
 
-                InteractionHead head;
-                if(objectAction instanceof ObjectActionMixedIn) {
-                    ObjectActionMixedIn actionMixedIn = (ObjectActionMixedIn) objectAction;
-                    head = actionMixedIn.interactionHead(targetAdapter);
-                } else {
-                    head = InteractionHead.regular(targetAdapter);
-                }
+                final InteractionHead head = objectAction.interactionHead(targetAdapter);
+
                 val resultAdapter = objectAction.execute(head, argAdapters, InteractionInitiatedBy.FRAMEWORK);
 
                 // flush any Isis PersistenceCommands pending
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/WrapperFactoryDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/WrapperFactoryDefault.java
index 52150ee04f..0711040424 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/WrapperFactoryDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/WrapperFactoryDefault.java
@@ -92,10 +92,10 @@ import org.apache.isis.core.metamodel.object.ManagedObjects;
 import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
 import org.apache.isis.core.metamodel.services.command.CommandDtoFactory;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
+import org.apache.isis.core.metamodel.spec.feature.MixedInMember;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionMixedIn;
 import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
 import org.apache.isis.core.runtimeservices.wrapper.dispatchers.InteractionEventDispatcher;
 import org.apache.isis.core.runtimeservices.wrapper.dispatchers.InteractionEventDispatcherTypeSafe;
@@ -433,7 +433,7 @@ public class WrapperFactoryDefault implements WrapperFactory {
 
     private <T> MemberAndTarget memberAndTargetForMixin(
             final Method method,
-            final T mixedIn,
+            final T mixee,
             final ManagedObject mixinAdapter) {
 
         val mixinMember = mixinAdapter.getSpecification().getMember(method).orElse(null);
@@ -441,24 +441,21 @@ public class WrapperFactoryDefault implements WrapperFactory {
             return MemberAndTarget.notFound();
         }
 
-        // find corresponding action of the mixedIn (this is the 'real' target).
-        val mixedInClass = mixedIn.getClass();
+        // find corresponding action of the mixee (this is the 'real' target, the target usable for invocation).
+        val mixeeClass = mixee.getClass();
 
         // don't care about anything other than actions
         // (contributed properties and collections are read-only).
-        final ObjectActionMixedIn targetAction = specificationLoader
-        .specForType(mixedInClass)
-        .flatMap(mixedInSpec->mixedInSpec.streamAnyActions(MixedIn.INCLUDED)
-                .filter(ObjectActionMixedIn.class::isInstance)
-                .map(ObjectActionMixedIn.class::cast)
-                .filter(x -> x.hasMixinAction((ObjectAction) mixinMember))
+        final ObjectAction targetAction = specificationLoader.specForType(mixeeClass)
+        .flatMap(mixeeSpec->mixeeSpec.streamAnyActions(MixedIn.ONLY)
+                .filter(act -> ((MixedInMember)act).hasMixinAction((ObjectAction) mixinMember))
                 .findFirst()
         )
         .orElseThrow(()->new UnsupportedOperationException(String.format(
-                "Could not locate objectAction delegating to mixinAction id='%s' on mixedIn class '%s'",
-                mixinMember.getId(), mixedInClass.getName())));
+                "Could not locate objectAction delegating to mixinAction id='%s' on mixee class '%s'",
+                mixinMember.getId(), mixeeClass.getName())));
 
-        return MemberAndTarget.foundAction(targetAction, currentObjectManager().adapt(mixedIn), method);
+        return MemberAndTarget.foundAction(targetAction, currentObjectManager().adapt(mixee), method);
     }
 
     private static <R> InteractionContext interactionContextFrom(