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?)
}
}