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());