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 2022/08/23 11:01:44 UTC
[isis] branch master updated: ISIS-3162: fixes regression in layout export
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 a0151904b7 ISIS-3162: fixes regression in layout export
a0151904b7 is described below
commit a0151904b76ab77916c2a46261a66cf3577efdff
Author: andi-huber <ah...@apache.org>
AuthorDate: Tue Aug 23 13:01:37 2022 +0200
ISIS-3162: fixes regression in layout export
---
.../isis/applib/services/grid/GridService.java | 1 +
.../org/apache/isis/commons/functional/Try.java | 24 +++++++++
.../services/layout/LayoutServiceDefault.java | 59 ++++++++++++++--------
3 files changed, 63 insertions(+), 21 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java b/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java
index 0ac8a1ba1d..5a24134100 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java
@@ -165,6 +165,7 @@ public interface GridService {
if(grid == null) {
grid = defaultGridFor(domainClass);
}
+ grid = normalize(grid); // required so the grid's tns and schema-locations get populated
if (style == LayoutExportStyle.COMPLETE) {
return complete(grid);
}
diff --git a/commons/src/main/java/org/apache/isis/commons/functional/Try.java b/commons/src/main/java/org/apache/isis/commons/functional/Try.java
index 540f6beeea..64a21e4f97 100644
--- a/commons/src/main/java/org/apache/isis/commons/functional/Try.java
+++ b/commons/src/main/java/org/apache/isis/commons/functional/Try.java
@@ -137,6 +137,16 @@ public interface Try<T> {
final @NonNull Function<Throwable, L> failureMapper,
final @NonNull Function<Optional<T>, R> successMapper);
+ // -- TERMINATE
+
+ /**
+ * Either consumes the success or the failure.
+ * @apiNote Order of arguments conforms to {@link #map(Function, Function)}
+ */
+ void accept(
+ final @NonNull Consumer<Throwable> failureConsumer,
+ final @NonNull Consumer<Optional<T>> successConsumer);
+
// -- FOLDING
/**
@@ -225,6 +235,13 @@ public interface Try<T> {
return Try.run(runnable);
}
+ @Override
+ public void accept(
+ final @NonNull Consumer<Throwable> failureConsumer,
+ final @NonNull Consumer<Optional<T>> successConsumer) {
+ successConsumer.accept(getValue());
+ }
+
@Override
public <R> R fold(
final @NonNull Function<Throwable, R> failureMapper,
@@ -306,6 +323,13 @@ public interface Try<T> {
return new Failure<>(throwable);
}
+ @Override
+ public void accept(
+ final @NonNull Consumer<Throwable> failureConsumer,
+ final @NonNull Consumer<Optional<T>> successConsumer) {
+ failureConsumer.accept(throwable);
+ }
+
@Override
public <R> R fold(
final @NonNull Function<Throwable, R> failureMapper,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/LayoutServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/LayoutServiceDefault.java
index 3e3605ac3f..0c56970199 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/LayoutServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/LayoutServiceDefault.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.metamodel.services.layout;
import java.io.File;
+import java.util.Objects;
import javax.annotation.Priority;
import javax.inject.Inject;
@@ -26,6 +27,7 @@ import javax.inject.Named;
import javax.xml.bind.Marshaller;
import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.lang.Nullable;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.PriorityPrecedence;
@@ -37,6 +39,7 @@ import org.apache.isis.applib.services.layout.LayoutExportStyle;
import org.apache.isis.applib.services.layout.LayoutService;
import org.apache.isis.applib.services.menu.MenuBarsService;
import org.apache.isis.applib.util.ZipWriter;
+import org.apache.isis.commons.functional.Try;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.core.metamodel.IsisModuleCoreMetamodel;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -44,12 +47,14 @@ import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import lombok.RequiredArgsConstructor;
import lombok.val;
+import lombok.extern.log4j.Log4j2;
@Service
@Named(IsisModuleCoreMetamodel.NAMESPACE + ".LayoutServiceDefault")
@Priority(PriorityPrecedence.MIDPOINT)
@Qualifier("Default")
@RequiredArgsConstructor(onConstructor_ = {@Inject})
+@Log4j2
public class LayoutServiceDefault implements LayoutService {
private final SpecificationLoader specificationLoader;
@@ -60,11 +65,7 @@ public class LayoutServiceDefault implements LayoutService {
@Override
public String toXml(final Class<?> domainClass, final LayoutExportStyle style) {
final Grid grid = gridService.toGridForExport(domainClass, style);
- return jaxbService.toXml(grid,
- _Maps.unmodifiable(
- Marshaller.JAXB_SCHEMA_LOCATION,
- grid.getTnsAndSchemaLocation()
- ));
+ return gridToXml(grid);
}
@Override
@@ -78,28 +79,23 @@ public class LayoutServiceDefault implements LayoutService {
for (val objectSpec : domainObjectSpecs) {
val domainClass = objectSpec.getCorrespondingClass();
- val grid = gridService.toGridForExport(domainClass, style);
- if(grid != null) {
- zipWriter.nextEntry(zipEntryNameFor(objectSpec), writer->{
-
- val xmlString = jaxbService.toXml(grid,
- _Maps.unmodifiable(
- Marshaller.JAXB_SCHEMA_LOCATION,
- grid.getTnsAndSchemaLocation()
- ));
- writer.writeCharactersUtf8(xmlString);
+
+ tryGridToXml(domainClass, style)
+ .accept(failure->{
+ log.warn("failed to generate layout XML for {}", domainClass);//, failure);
+ },
+ xmlIfAny->{
+ xmlIfAny.ifPresent(xmlString->{
+ zipWriter.nextEntry(zipEntryNameFor(objectSpec), writer->
+ writer.writeCharactersUtf8(xmlString)
+ );
});
- }
+ });
}
return zipWriter.toBytes();
}
- private static String zipEntryNameFor(final ObjectSpecification objectSpec) {
- final String fqn = objectSpec.getFullIdentifier();
- return fqn.replace(".", File.separator)+".layout.xml";
- }
-
@Override
public String toMenuBarsXml(final MenuBarsService.Type type) {
final MenuBars menuBars = menuBarsService.menuBars(type);
@@ -110,6 +106,27 @@ public class LayoutServiceDefault implements LayoutService {
));
}
+ // -- HELPER
+
+ private Try<String> tryGridToXml(final Class<?> domainClass, final LayoutExportStyle style) {
+ final Grid grid = gridService.toGridForExport(domainClass, style);
+ return Try.call(()->gridToXml(grid));
+ }
+
+ private String gridToXml(final @Nullable Grid grid) {
+ if(grid==null) {
+ return null;
+ }
+ return jaxbService.toXml(grid,
+ _Maps.unmodifiable(
+ Marshaller.JAXB_SCHEMA_LOCATION,
+ Objects.requireNonNull(grid.getTnsAndSchemaLocation())
+ ));
+ }
+ private static String zipEntryNameFor(final ObjectSpecification objectSpec) {
+ final String fqn = objectSpec.getFullIdentifier();
+ return fqn.replace(".", File.separator)+".layout.xml";
+ }
}