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 2eada9cce3 ISIS-3272: more separation of concerns
2eada9cce3 is described below

commit 2eada9cce3164bce81dbb12bc01301c96e49f9dd
Author: Andi Huber <[email protected]>
AuthorDate: Sat Nov 5 09:02:44 2022 +0100

    ISIS-3272: more separation of concerns
    
    - MenuBarsLoaderService can work in a generic way, it if we don't bind
    it to a particular marshaller
---
 .../services/menu/MenuBarsLoaderService.java       | 13 ++---
 .../CausewayModuleCoreRuntimeServices.java         |  4 +-
 ...trap.java => MenuBarsLoaderServiceDefault.java} | 57 ++++++++--------------
 .../bootstrap/MenuBarsServiceBootstrap.java        |  4 +-
 .../RuntimeServicesTestAbstract.java               | 11 ++---
 .../menubars/bootstrap/MenuBarsServiceBSTest.java  | 21 +++++---
 6 files changed, 46 insertions(+), 64 deletions(-)

diff --git 
a/api/applib/src/main/java/org/apache/causeway/applib/services/menu/MenuBarsLoaderService.java
 
b/api/applib/src/main/java/org/apache/causeway/applib/services/menu/MenuBarsLoaderService.java
index 607bd4bc1b..6faf1aff38 100644
--- 
a/api/applib/src/main/java/org/apache/causeway/applib/services/menu/MenuBarsLoaderService.java
+++ 
b/api/applib/src/main/java/org/apache/causeway/applib/services/menu/MenuBarsLoaderService.java
@@ -18,11 +18,11 @@
  */
 package org.apache.causeway.applib.services.menu;
 
-import java.util.EnumSet;
 import java.util.Optional;
 
 import org.apache.causeway.applib.layout.menubars.MenuBars;
-import org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
+
+import lombok.NonNull;
 
 /**
  * Returns the {@link MenuBars} instance for the UI.
@@ -39,7 +39,7 @@ import 
org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
  *
  * @since 1.x - revised for 2.0 {@index}
  */
-public interface MenuBarsLoaderService<T extends MenuBars> {
+public interface MenuBarsLoaderService {
 
     /**
      * Whether dynamic reloading of layouts is enabled.
@@ -51,16 +51,11 @@ public interface MenuBarsLoaderService<T extends MenuBars> {
      */
     boolean supportsReloading();
 
-    /**
-     * Supported format(s) for {@link #menuBars()}.
-     */
-    EnumSet<CommonMimeType> supportedFormats();
-
     /**
      * Returns a new instance of a {@link MenuBars} if possible,
      * else <tt>Optional.empty()</tt>.
      * @throws UnsupportedOperationException - when format is not supported
      */
-    Optional<T> menuBars();
+    <T extends MenuBars> Optional<T> menuBars(@NonNull 
MenuBarsMarshallerService<T> marshaller);
 
 }
diff --git 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/CausewayModuleCoreRuntimeServices.java
 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/CausewayModuleCoreRuntimeServices.java
index a5b66aa3f2..6fd8fbdacb 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/CausewayModuleCoreRuntimeServices.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/CausewayModuleCoreRuntimeServices.java
@@ -44,7 +44,7 @@ import 
org.apache.causeway.core.runtimeservices.interaction.InteractionDtoFactor
 import org.apache.causeway.core.runtimeservices.jaxb.JaxbServiceDefault;
 import org.apache.causeway.core.runtimeservices.locale.LanguageProviderDefault;
 import 
org.apache.causeway.core.runtimeservices.locale.LocaleChoiceProviderDefault;
-import 
org.apache.causeway.core.runtimeservices.menubars.bootstrap.MenuBarsLoaderServiceBootstrap;
+import 
org.apache.causeway.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault;
 import 
org.apache.causeway.core.runtimeservices.menubars.bootstrap.MenuBarsMarshallerServiceBootstrap;
 import 
org.apache.causeway.core.runtimeservices.menubars.bootstrap.MenuBarsServiceBootstrap;
 import org.apache.causeway.core.runtimeservices.message.MessageServiceDefault;
@@ -104,8 +104,8 @@ import 
org.apache.causeway.core.runtimeservices.xmlsnapshot.XmlSnapshotServiceDe
         LanguageProviderDefault.class,
         LocaleChoiceProviderDefault.class,
         MemberExecutorServiceDefault.class,
+        MenuBarsLoaderServiceDefault.class,
         MenuBarsMarshallerServiceBootstrap.class,
-        MenuBarsLoaderServiceBootstrap.class,
         MenuBarsServiceBootstrap.class,
         MessageServiceDefault.class,
         ObjectIconServiceDefault.class,
diff --git 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsLoaderServiceBootstrap.java
 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/MenuBarsLoaderServiceDefault.java
similarity index 76%
rename from 
core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsLoaderServiceBootstrap.java
rename to 
core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/MenuBarsLoaderServiceDefault.java
index f9b11c5514..319d518fd6 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsLoaderServiceBootstrap.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/MenuBarsLoaderServiceDefault.java
@@ -16,12 +16,11 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.core.runtimeservices.menubars.bootstrap;
+package org.apache.causeway.core.runtimeservices.menubars;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
-import java.util.EnumSet;
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -35,42 +34,33 @@ import org.springframework.core.io.ClassPathResource;
 import org.springframework.stereotype.Service;
 
 import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.applib.layout.menubars.bootstrap.BSMenuBars;
+import org.apache.causeway.applib.layout.menubars.MenuBars;
 import org.apache.causeway.applib.services.menu.MenuBarsLoaderService;
 import org.apache.causeway.applib.services.menu.MenuBarsMarshallerService;
 import org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
-import org.apache.causeway.commons.functional.Try;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.core.config.viewer.web.WebAppContextPath;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
 import 
org.apache.causeway.core.runtimeservices.CausewayModuleCoreRuntimeServices;
 
-import lombok.Getter;
+import lombok.NonNull;
 import lombok.val;
-import lombok.experimental.Accessors;
 import lombok.extern.log4j.Log4j2;
 
 @Service
-@Named(CausewayModuleCoreRuntimeServices.NAMESPACE + 
".MenuBarsLoaderServiceBootstrap")
+@Named(CausewayModuleCoreRuntimeServices.NAMESPACE + 
".MenuBarsLoaderServiceDefault")
 @Priority(PriorityPrecedence.MIDPOINT)
 @Qualifier("Default")
 @Log4j2
-public class MenuBarsLoaderServiceBootstrap
-implements MenuBarsLoaderService<BSMenuBars> {
+public class MenuBarsLoaderServiceDefault
+implements MenuBarsLoaderService {
 
-    private final MenuBarsMarshallerService<BSMenuBars> marshaller;
     private final boolean supportsReloading;
-
-    @Getter(onMethod_={@Override}) @Accessors(fluent = true)
-    private final EnumSet<CommonMimeType> supportedFormats = 
EnumSet.of(CommonMimeType.XML);
-
     private final AtomicReference<AbstractResource> menubarsLayoutResourceRef;
+    private final CommonMimeType menubarsLayoutMimeType;
 
     @Inject
-    public MenuBarsLoaderServiceBootstrap(
-            final MetaModelContext mmc,
-            final MenuBarsMarshallerService<BSMenuBars> marshaller) {
-        this.marshaller = marshaller;
+    public MenuBarsLoaderServiceDefault(final MetaModelContext mmc) {
         this.supportsReloading = mmc.getSystemEnvironment().isPrototyping();
 
         val menubarsLayoutFile = 
mmc.getConfiguration().getViewer().getCommon().getApplication()
@@ -80,19 +70,16 @@ implements MenuBarsLoaderService<BSMenuBars> {
             log.warn("menubarsLayoutFile {} (as configured for Apache 
Causeway) not found",
                     menubarsLayoutFile);
         }
+        this.menubarsLayoutResourceRef = new 
AtomicReference<>(menubarsLayoutResource);
         this.menubarsLayoutMimeType = 
CommonMimeType.valueOfFileName(menubarsLayoutFile)
-                .filter(supportedFormats::contains)
                 .orElse(CommonMimeType.XML); // fallback default
-        this.menubarsLayoutResourceRef = new 
AtomicReference<>(menubarsLayoutResource);
     }
 
     // JUnit support
-    public MenuBarsLoaderServiceBootstrap(
-            final MenuBarsMarshallerService<BSMenuBars> marshaller,
-            final AtomicReference<AbstractResource> menubarsLayoutResourceRef) 
{
-        this.marshaller = marshaller;
+    public MenuBarsLoaderServiceDefault(
+            final AtomicReference<AbstractResource> menubarsLayoutResourceRef,
+            final CommonMimeType formatUnderTest) {
         this.supportsReloading = true;
-
         menubarsLayoutResourceRef.getAndUpdate(r->r!=null
                 ? r
                 : new AbstractResource() {
@@ -100,7 +87,7 @@ implements MenuBarsLoaderService<BSMenuBars> {
                     @Override public InputStream getInputStream() throws 
IOException { return null; }}
                 );
         this.menubarsLayoutResourceRef = menubarsLayoutResourceRef;
-        this.menubarsLayoutMimeType = CommonMimeType.XML;
+        this.menubarsLayoutMimeType = formatUnderTest;
     }
 
     @Override
@@ -109,15 +96,10 @@ implements MenuBarsLoaderService<BSMenuBars> {
     }
 
     @Override
-    public Optional<BSMenuBars> menuBars() {
-        return tryLoadMenuBars(loadMenubarsLayoutResource())
-                
.ifFailure(failure->severeCannotLoad(menubarsLayoutResourceRef.get(), failure))
-                .getValue();
-    }
-
-    // public, in support of JUnit testing
-    public Try<BSMenuBars> tryLoadMenuBars(final String layoutFileContent) {
-        return marshaller.unmarshal(layoutFileContent, menubarsLayoutMimeType);
+    public <T extends MenuBars> Optional<T> menuBars(@NonNull final 
MenuBarsMarshallerService<T> marshaller) {
+        return marshaller.unmarshal(loadMenubarsLayoutResource(), 
menubarsLayoutMimeType)
+            
.ifFailure(failure->severeCannotLoad(menubarsLayoutResourceRef.get(), failure))
+            .getValue();
     }
 
     // -- HELPER
@@ -147,13 +129,11 @@ implements MenuBarsLoaderService<BSMenuBars> {
     }
 
     private boolean warnedOnce = false;
-    private CommonMimeType menubarsLayoutMimeType;
 
     private void warnNotFound(final AbstractResource menubarsLayoutResource) {
         if(warnedOnce) {
             return;
         }
-
         log.warn(
                 "{}: could not find readable resource {} for the 
Menubars-Layout.",
                         WebAppContextPath.class.getName(),
@@ -162,12 +142,13 @@ implements MenuBarsLoaderService<BSMenuBars> {
     }
 
     private void severeCannotLoad(final AbstractResource 
menubarsLayoutResource, final Throwable cause) {
-
         log.error("{}: could not find readable resource {} for the 
Menubars-Layout.",
                         WebAppContextPath.class.getName(),
                         menubarsLayoutResource,
                 cause);
     }
 
+
+
 }
 
diff --git 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java
 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java
index e043a270b1..5c524c3c20 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java
@@ -99,7 +99,7 @@ implements MenuBarsService {
     public static final String LINKS_TNS = GridServiceDefault.LINKS_TNS;
     public static final String LINKS_SCHEMA_LOCATION = 
GridServiceDefault.LINKS_SCHEMA_LOCATION;
 
-    private final MenuBarsLoaderService<BSMenuBars> loader;
+    private final MenuBarsLoaderService loader;
     private final MenuBarsMarshallerService<BSMenuBars> marshaller;
     private final MessageService messageService;
     private final JaxbService jaxbService;
@@ -144,7 +144,7 @@ implements MenuBarsService {
     private BSMenuBars loadOrElse(
             final BSMenuBars menuBarsFromAnnotationsOnly) {
 
-        val menuBars = loader.menuBars()
+        val menuBars = loader.menuBars(marshaller)
                 .map(this::updateFacetsFromActionLayoutXml)
                 .map(this::addTnsAndSchemaLocation)
                 .orElse(menuBarsFromAnnotationsOnly);
diff --git 
a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/RuntimeServicesTestAbstract.java
 
b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/RuntimeServicesTestAbstract.java
index 1c16c906bc..2054a4944e 100644
--- 
a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/RuntimeServicesTestAbstract.java
+++ 
b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/RuntimeServicesTestAbstract.java
@@ -29,12 +29,13 @@ import 
org.apache.causeway.applib.services.menu.MenuBarsLoaderService;
 import org.apache.causeway.applib.services.menu.MenuBarsMarshallerService;
 import org.apache.causeway.applib.services.menu.MenuBarsService;
 import org.apache.causeway.applib.services.message.MessageService;
+import org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
 import org.apache.causeway.commons.internal.ioc._ManagedBeanAdapter;
 import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting;
 import 
org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting.MetaModelContext_forTestingBuilder;
 import org.apache.causeway.core.metamodel.context.HasMetaModelContext;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import 
org.apache.causeway.core.runtimeservices.menubars.bootstrap.MenuBarsLoaderServiceBootstrap;
+import 
org.apache.causeway.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault;
 import 
org.apache.causeway.core.runtimeservices.menubars.bootstrap.MenuBarsMarshallerServiceBootstrap;
 import 
org.apache.causeway.core.runtimeservices.menubars.bootstrap.MenuBarsServiceBootstrap;
 
@@ -77,13 +78,11 @@ implements HasMetaModelContext {
         mmcBuilder.singletonProvider(
                 _ManagedBeanAdapter
                 .forTestingLazy(MenuBarsLoaderService.class, ()->{
-                    val menuBarsMenuBarsMarshaller = 
getServiceRegistry().lookupServiceElseFail(MenuBarsMarshallerService.class);
-                    return new MenuBarsLoaderServiceBootstrap(
-                            menuBarsMenuBarsMarshaller,
-                            menubarsLayoutXmlResourceRef);
+                    return new MenuBarsLoaderServiceDefault(
+                            menubarsLayoutXmlResourceRef,
+                            CommonMimeType.XML); // format under test
                 }));
 
-
         mmcBuilder.singletonProvider(
                 _ManagedBeanAdapter
                 .forTestingLazy(MenuBarsService.class, ()->{
diff --git 
a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java
 
b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java
index 490062e31f..12dc23c8b0 100644
--- 
a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java
+++ 
b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java
@@ -32,7 +32,7 @@ import static org.junit.jupiter.api.Assertions.assertSame;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.causeway.applib.services.layout.LayoutService;
-import org.apache.causeway.applib.services.menu.MenuBarsLoaderService;
+import org.apache.causeway.applib.services.menu.MenuBarsMarshallerService;
 import org.apache.causeway.applib.services.menu.MenuBarsService;
 import org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
 import 
org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting.MetaModelContext_forTestingBuilder;
@@ -46,7 +46,8 @@ class MenuBarsServiceBSTest
 extends RuntimeServicesTestAbstract {
 
     private MenuBarsServiceBootstrap menuBarsService;
-    private MenuBarsLoaderServiceBootstrap menuBarsLoaderService;
+    //private MenuBarsLoaderServiceDefault menuBarsLoaderService;
+    private MenuBarsMarshallerServiceBootstrap menuBarsMarshallerService;
     private LayoutService layoutService;
 
     @Override
@@ -59,9 +60,14 @@ extends RuntimeServicesTestAbstract {
 
         
getConfiguration().getCore().getMetaModel().getIntrospector().setValidateIncrementally(false);
 
-        layoutService = 
getServiceRegistry().lookupServiceElseFail(LayoutService.class);
-        menuBarsService = (MenuBarsServiceBootstrap) 
getServiceRegistry().lookupServiceElseFail(MenuBarsService.class);
-        menuBarsLoaderService = (MenuBarsLoaderServiceBootstrap) 
getServiceRegistry().lookupServiceElseFail(MenuBarsLoaderService.class);
+        layoutService = getServiceRegistry()
+                .lookupServiceElseFail(LayoutService.class);
+        menuBarsMarshallerService = (MenuBarsMarshallerServiceBootstrap) 
getServiceRegistry()
+                .lookupServiceElseFail(MenuBarsMarshallerService.class);
+        menuBarsService = (MenuBarsServiceBootstrap) getServiceRegistry()
+                .lookupServiceElseFail(MenuBarsService.class);
+//        menuBarsLoaderService = (MenuBarsLoaderServiceDefault) 
getServiceRegistry()
+//                .lookupServiceElseFail(MenuBarsLoaderService.class);
 
         // double check, we are all set
         assertNotNull(getSpecificationLoader().loadSpecification(Bar.class));
@@ -95,7 +101,7 @@ extends RuntimeServicesTestAbstract {
         val xml = layoutService.menuBarsLayout(MenuBarsService.Type.DEFAULT, 
format);
 
         // after round-trip
-        val menuBars2 = 
menuBarsLoaderService.tryLoadMenuBars(xml).getValue().orElse(null);
+        val menuBars2 = menuBarsMarshallerService.unmarshal(xml, 
format).getValue().orElse(null);
         assertNotNull(menuBars2);
         assertEquals(1L, menuBars2.stream().count());
 
@@ -111,7 +117,8 @@ extends RuntimeServicesTestAbstract {
         val xml = sampleMenuBarsXmlWithCustomName(customNamed);
 
         // create menubars-xml from scratch (annotations and fallback naming 
only)
-        val menuBars = 
menuBarsLoaderService.tryLoadMenuBars(xml).getValue().orElse(null);
+        val menuBars = menuBarsMarshallerService.unmarshal(xml, 
CommonMimeType.XML).getValue().orElse(null);
+
         assertNotNull(menuBars);
         assertEquals(1L, menuBars.stream().count());
 

Reply via email to