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/04 09:39:03 UTC

[isis] branch master updated: ISIS-2787: testing: setup a sample Service that contributes a menu

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 0913bc9  ISIS-2787: testing: setup a sample Service that contributes a menu
0913bc9 is described below

commit 0913bc9ab0f1617f8ccd2d199eee5290a092b7f0
Author: andi-huber <ah...@apache.org>
AuthorDate: Sun Jul 4 11:38:56 2021 +0200

    ISIS-2787: testing: setup a sample Service that contributes a menu
---
 .../_testing/MetaModelContext_forTesting.java      | 42 ++++++++++++++++------
 .../runtimeservices/menubars/bootstrap3/Bar.java   | 36 +++++++++++++++++++
 .../bootstrap3/MenuBarsServiceBS3Test.java         | 34 ++++++++++++++----
 3 files changed, 95 insertions(+), 17 deletions(-)

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 adae8c1..f10c498 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
@@ -19,10 +19,12 @@
 package org.apache.isis.core.metamodel._testing;
 
 import java.util.Collections;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Consumer;
 import java.util.function.Function;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.springframework.core.env.AbstractEnvironment;
@@ -49,6 +51,7 @@ import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.commons.internal.ioc._ManagedBeanAdapter;
 import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.config.beans.IsisBeanFactoryPostProcessorForSpring;
@@ -152,26 +155,21 @@ implements MetaModelContext {
 
     private IsisBeanTypeRegistry isisBeanTypeRegistry;
 
-    private Map<String, ManagedObject> serviceAdaptersById;
+    //private Map<String, ManagedObject> serviceAdaptersById;
 
     @Singular
     private List<Object> singletons;
 
+    // -- SERVICE SUPPORT
+
     @Override
     public Stream<ManagedObject> streamServiceAdapters() {
-
-        if(serviceAdaptersById==null) {
-            return Stream.empty();
-        }
-        return serviceAdaptersById.values().stream();
+        return objectAdaptersForBeansOfKnownSort.get().values().stream();
     }
 
     @Override
     public ManagedObject lookupServiceAdapterById(final String serviceId) {
-        if(serviceAdaptersById==null) {
-            return null;
-        }
-        return serviceAdaptersById.get(serviceId);
+        return objectAdaptersForBeansOfKnownSort.get().get(serviceId);
     }
 
     // -- LOOKUP
@@ -423,5 +421,29 @@ implements MetaModelContext {
                 getMenuBarsService());
     }
 
+    // -- SERVICE REGISTRY HELPER
+
+    private final _Lazy<Map<String, ManagedObject>> objectAdaptersForBeansOfKnownSort =
+            _Lazy.threadSafe(this::collectBeansOfKnownSort);
+
+    private final Map<String, ManagedObject> collectBeansOfKnownSort() {
+
+        return getServiceRegistry()
+                .streamRegisteredBeans()
+                .map(this::toManagedObject)
+                .collect(Collectors.toMap(
+                        serviceAdapter->serviceAdapter.getSpecification().getFullIdentifier(),
+                        v->v, (o,n)->n, LinkedHashMap::new));
+    }
+
+    private final ManagedObject toManagedObject(final _ManagedBeanAdapter managedBeanAdapter) {
 
+        val servicePojo = managedBeanAdapter.getInstance().getFirst()
+                .orElseThrow(()->_Exceptions.unrecoverableFormatted(
+                        "Cannot get service instance of type '%s'",
+                        managedBeanAdapter.getBeanClass()));
+
+        return ManagedObject.lazy(getSpecificationLoader(), servicePojo);
+
+    }
 }
diff --git a/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/Bar.java b/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/Bar.java
new file mode 100644
index 0000000..1068593
--- /dev/null
+++ b/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/Bar.java
@@ -0,0 +1,36 @@
+/*
+ *  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.core.runtimeservices.menubars.bootstrap3;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
+
+@DomainService(
+        nature = NatureOfService.VIEW,
+        logicalTypeName = "simple.SimpleMenu"
+        )
+public class Bar {
+
+    @Action
+    public Object createSimpleObject() {
+        return new Object();
+    }
+
+}
\ No newline at end of file
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 555fbb3..2ae56a7 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
@@ -24,12 +24,15 @@ import org.junit.jupiter.api.Test;
 
 import org.apache.isis.applib.services.jaxb.JaxbService;
 import org.apache.isis.applib.services.message.MessageService;
+import org.apache.isis.commons.internal.base._Refs;
 import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
 import org.apache.isis.core.metamodel.context.HasMetaModelContext;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import lombok.Getter;
 import lombok.val;
@@ -46,36 +49,53 @@ implements HasMetaModelContext {
     void setUp() throws Exception {
         metaModelContext = MetaModelContext_forTesting
                 .builder()
+                .singleton(new Bar())
                 .build();
 
+        getSpecificationLoader().loadSpecification(Bar.class);
 
-        val messageService = metaModelContext.getServiceRegistry().lookupServiceElseFail(MessageService.class);
-        val jaxbService = metaModelContext.getServiceRegistry().lookupServiceElseFail(JaxbService.class);
+        assertTrue(getServiceRegistry().streamRegisteredBeans()
+                .anyMatch(bean->bean.getBeanClass().equals(Bar.class)));
+
+        assertTrue(metaModelContext.streamServiceAdapters()
+                .anyMatch(domainObject->domainObject.getSpecification().getCorrespondingClass().equals(Bar.class)));
+
+
+        val messageService = getServiceRegistry().lookupServiceElseFail(MessageService.class);
+        val jaxbService = getServiceRegistry().lookupServiceElseFail(JaxbService.class);
 
         val menuBarsLoaderService = new MenuBarsLoaderServiceDefault(
-                metaModelContext.getSystemEnvironment(),
+                getSystemEnvironment(),
                 jaxbService,
-                metaModelContext.getConfiguration());
+                getConfiguration());
 
         menuBarsService = new MenuBarsServiceBS3(
                 menuBarsLoaderService,
                 messageService,
                 jaxbService,
-                metaModelContext.getSystemEnvironment(),
+                getSystemEnvironment(),
                 metaModelContext);
 
     }
 
     @AfterEach
     void tearDown() throws Exception {
-        metaModelContext.getSpecificationLoader().disposeMetaModel();
+        getSpecificationLoader().disposeMetaModel();
     }
 
     @Test
     void test() {
         val menuBars = menuBarsService.menuBars();
         assertNotNull(menuBars);
-        //TODO[ISIS-2787] setup a sample Service that contributes a menu, then verify
+
+        val menuCounter = _Refs.intRef(0);
+        menuBars.visit(v->{
+            menuCounter.inc();
+        });
+
+        assertEquals(1, menuCounter.getValue());
+
+        //TODO[ISIS-2787] verify menu xml export (roundtrip?)
     }
 
 }