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";