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 2021/07/06 21:16:33 UTC

[isis] branch master updated: ISIS-2787: fixes custom naming test for menubars.layout.xml

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 9f44090  ISIS-2787: fixes custom naming test for menubars.layout.xml
9f44090 is described below

commit 9f44090376f76ef5072efcc39f95d105121e3020
Author: andi-huber <ah...@apache.org>
AuthorDate: Tue Jul 6 23:16:23 2021 +0200

    ISIS-2787: fixes custom naming test for menubars.layout.xml
---
 .../applib/services/registry/ServiceRegistry.java  |  8 ++++-
 .../_testing/MetaModelContext_forTesting.java      |  2 +-
 .../_testing/ServiceRegistry_forTesting.java       |  9 +++++
 .../services/registry/ServiceRegistryDefault.java  |  5 +++
 .../specloader/SpecificationLoaderDefault.java     |  1 +
 .../menubars/bootstrap3/MenuBarsServiceBS3.java    | 41 ++++++++--------------
 .../bootstrap3/MenuBarsServiceBS3Test.java         |  3 +-
 7 files changed, 38 insertions(+), 31 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java b/api/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
index 0b0022c..d8e12bc 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
@@ -158,6 +158,12 @@ public interface ServiceRegistry {
         // ...
     }
 
-    // -- PRIORITY ANNOTATION HANDLING
+    /**
+     * Invalidates any cached service adapters that might hold a reference to
+     * the current {@link SpecificationLoader}. Particularly useful when discarding
+     * a meta-model instance, that is, purging the {@link ObjectSpecification} cache.
+     */
+    void clearRegisteredBeans();
+
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/MetaModelContext_forTesting.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/MetaModelContext_forTesting.java
index f2f3127..6bad50a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/MetaModelContext_forTesting.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/MetaModelContext_forTesting.java
@@ -435,7 +435,7 @@ implements MetaModelContext {
 
     // -- SERVICE REGISTRY HELPER
 
-    private final _Lazy<Map<String, ManagedObject>> objectAdaptersForBeansOfKnownSort =
+    final _Lazy<Map<String, ManagedObject>> objectAdaptersForBeansOfKnownSort =
             _Lazy.threadSafe(this::collectBeansOfKnownSort);
 
     private final Map<String, ManagedObject> collectBeansOfKnownSort() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceRegistry_forTesting.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceRegistry_forTesting.java
index dfe9fc2..bcab0e6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceRegistry_forTesting.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceRegistry_forTesting.java
@@ -119,5 +119,14 @@ class ServiceRegistry_forTesting implements ServiceRegistry {
         return Stream.empty();
     }
 
+    @Override
+    public void clearRegisteredBeans() {
+        val mmc = metaModelContext;
+        if(mmc instanceof MetaModelContext_forTesting) {
+            val mmcb = (MetaModelContext_forTesting) mmc;
+            mmcb.objectAdaptersForBeansOfKnownSort.clear();
+        }
+    }
+
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/registry/ServiceRegistryDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/registry/ServiceRegistryDefault.java
index 8301d50..3f269ab 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/registry/ServiceRegistryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/registry/ServiceRegistryDefault.java
@@ -95,6 +95,11 @@ public final class ServiceRegistryDefault implements ServiceRegistry {
         return managedBeanAdapterByName;
     }
 
+    @Override
+    public void clearRegisteredBeans() {
+        managedBeansById.clear();
+    }
+
 
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
index 01e0d48..cdba40d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
@@ -343,6 +343,7 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
         logicalTypeResolver.clear();
         cache.clear();
         validationResult.clear();
+        serviceRegistry.clearRegisteredBeans();
         log.info("Metamodel disposed.");
     }
 
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3.java
index 17182a2..e68eeaa 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3.java
@@ -33,7 +33,6 @@ import javax.inject.Named;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
-import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
@@ -115,20 +114,6 @@ implements MenuBarsService {
         return menuBarsDefault();
     }
 
-
-
-    private Optional<ServiceActionLayoutData> lookupLayout(Identifier serviceActionIdentifier) {
-        val actionId = serviceActionIdentifier.getLogicalTypeName()
-                + "#" + serviceActionIdentifier.getMemberLogicalName();
-
-        if(menuBars == null) {
-            menuBarsDefault();
-        }
-
-        val layoutData = serviceActionLayoutDataByActionId.get(actionId);
-        return Optional.ofNullable(layoutData);
-    }
-
     // -- HELPER
 
     private BS3MenuBars menuBarsDefault() {
@@ -143,12 +128,10 @@ implements MenuBarsService {
         return menuBars;
     }
 
-    private final Map<String, ServiceActionLayoutData> serviceActionLayoutDataByActionId = _Maps.newHashMap();
-
     private BS3MenuBars loadOrElse(final BS3MenuBars menuBarsFromAnnotationsOnly) {
 
         val menuBars = Optional.ofNullable(menuBarsLoaderService.menuBars())
-                .map(this::updateActionLayoutLookupTable)
+                .map(this::updateFacetsFromActionLayoutXml)
                 .map(this::addTnsAndSchemaLocation)
                 .orElse(menuBarsFromAnnotationsOnly);
 
@@ -188,23 +171,28 @@ implements MenuBarsService {
         return menuBars;
     }
 
-    private BS3MenuBars updateActionLayoutLookupTable(final BS3MenuBars menuBarsFromXml) {
-        serviceActionLayoutDataByActionId.clear();
+    private BS3MenuBars updateFacetsFromActionLayoutXml(final BS3MenuBars menuBarsFromXml) {
+        final Map<String, ServiceActionLayoutData> serviceActionLayoutDataByActionId = _Maps.newHashMap();
         menuBarsFromXml.visit(serviceActionLayoutData->
             serviceActionLayoutDataByActionId.put(
                     serviceActionLayoutData.getLogicalTypeNameAndId(),
                     serviceActionLayoutData));
 
-        val visibleServiceAdapters = metaModelContext.streamServiceAdapters()
-                .filter(this::isVisibleAdapterForMenu)
-                .collect(Can.toCan());
+        metaModelContext.streamServiceAdapters()
+        .filter(this::isVisibleAdapterForMenu)
+        .forEach(serviceAdapter->{
 
-        visibleServiceAdapters.forEach(objectAdapter->{
+            val serviceSpec = serviceAdapter.getSpecification();
 
-            objectAdapter.getSpecification().streamAnyActions(MixedIn.INCLUDED)
+            serviceSpec.streamAnyActions(MixedIn.INCLUDED)
             .forEach(objectAction->{
 
-                val layoutData = lookupLayout(objectAction.getFeatureIdentifier()).orElse(null);
+                val serviceActionIdentifier = objectAction.getFeatureIdentifier();
+
+                val actionId = serviceActionIdentifier.getLogicalTypeName()
+                        + "#" + serviceActionIdentifier.getMemberLogicalName();
+
+                val layoutData = serviceActionLayoutDataByActionId.get(actionId);
 
                 FacetUtil.addFacetIfPresent(
                         MemberNamedFacetForMenuBarXml
@@ -213,7 +201,6 @@ implements MenuBarsService {
                 FacetUtil.addFacetIfPresent(
                         MemberDescribedFacetForMenuBarXml
                         .create(layoutData, objectAction));
-
             });
 
         });
diff --git a/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3Test.java b/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3Test.java
index 0bc6884..a6e7512 100644
--- a/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3Test.java
+++ b/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3Test.java
@@ -20,7 +20,6 @@ package org.apache.isis.core.runtimeservices.menubars.bootstrap3;
 
 import java.nio.charset.StandardCharsets;
 
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.springframework.core.io.ByteArrayResource;
 
@@ -98,7 +97,7 @@ extends RuntimeServicesTestAbstract {
         assertEquals(null, layoutData2.getNamedEscaped()); // deprecated: always escape
     }
 
-    @Test @Disabled("TODO ISIS-2787")
+    @Test
     void customNamed() {
 
         val customNamed = "Hello";