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/04/07 13:17:01 UTC

[isis] branch master updated: ISIS-2994: fixes for prev. commits

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 7fd7f8343f ISIS-2994: fixes for prev. commits
7fd7f8343f is described below

commit 7fd7f8343f8fb7766c36aa4095fd898b12846e72
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Apr 7 15:16:52 2022 +0200

    ISIS-2994: fixes for prev. commits
---
 .../core/metamodel/spec/ObjectSpecification.java     |  3 ++-
 .../org/apache/isis/core/metamodel/util/Facets.java  |  4 ++--
 .../core/runtimeservices/memento/_ObjectMemento.java | 15 +++++++++------
 .../sitemap/SitemapServiceDefault.java               |  6 ++----
 .../handlers/DomainObjectInvocationHandler.java      |  7 ++-----
 .../domainobjects/ObjectPropertyReprRenderer.java    | 20 ++++++++++----------
 .../viewer/wicket/model/util/PageParameterUtils.java | 12 ++++++------
 7 files changed, 33 insertions(+), 34 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index 58e09a4dcb..13b501de40 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -352,7 +352,8 @@ extends
      * In effect, means has got {@link ValueFacet}.
      */
     default boolean isValue() {
-        return getBeanSort().isValue();
+        return getBeanSort().isValue()
+                || containsFacet(ValueFacet.class);
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java
index 12c0213eff..752ae0ef2b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java
@@ -381,7 +381,7 @@ public final class Facets {
             final ObjectSpecification objectSpec,
             final Class<X> requiredType) {
         return objectSpec.lookupFacet(ValueFacet.class)
-        .filter(valueFacet->valueFacet.getValueClass().equals(requiredType))
+        .filter(valueFacet->requiredType.isAssignableFrom(valueFacet.getValueClass()))
         .flatMap(ValueFacet::selectDefaultSemantics);
     }
 
@@ -390,7 +390,7 @@ public final class Facets {
             final ObjectSpecification objectSpec,
             final Class<X> requiredType) {
         return objectSpec.lookupFacet(ValueFacet.class)
-        .filter(valueFacet->valueFacet.getValueClass().equals(requiredType))
+        .filter(valueFacet->requiredType.isAssignableFrom(valueFacet.getValueClass()))
         .map(valueFacet->(ValueSerializer<X>)valueFacet);
     }
 
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_ObjectMemento.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_ObjectMemento.java
index c920649534..e7a9958df2 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_ObjectMemento.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/_ObjectMemento.java
@@ -32,6 +32,7 @@ import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.Oid;
 import org.apache.isis.applib.services.hint.HintIdProvider;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
@@ -42,6 +43,7 @@ import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.metamodel.util.Facets;
 
 import lombok.AccessLevel;
 import lombok.Getter;
@@ -179,14 +181,14 @@ final class _ObjectMemento implements HasLogicalType, Serializable {
                     final _ObjectMemento memento,
                     final MetaModelContext mmc) {
 
-                val valueFacet = mmc.getSpecificationLoader()
+                val valueSerializer = mmc.getSpecificationLoader()
                         .specForLogicalType(memento.logicalType)
-                        .map(spec->spec.getFacet(ValueFacet.class))
+                        .flatMap(spec->Facets.valueSerializer(spec, spec.getCorrespondingClass()))
                         .orElseThrow(()->_Exceptions.unrecoverableFormatted(
                                 "logical type %s is expected to have a ValueFacet", memento.logicalType));
 
                 return mmc.getObjectManager().adapt(
-                        valueFacet.fromEncodedString(Format.JSON, memento.encodableValue));
+                        valueSerializer.fromEncodedString(Format.JSON, memento.encodableValue));
             }
 
             @Override
@@ -454,10 +456,11 @@ final class _ObjectMemento implements HasLogicalType, Serializable {
             return;
         }
 
-        val valueFacet = spec.getFacet(ValueFacet.class);
-        val isEncodable = valueFacet != null;
+        val valueSerializer = Facets.valueSerializer(spec, spec.getCorrespondingClass())
+                .orElse(null);
+        val isEncodable = valueSerializer != null;
         if (isEncodable) {
-            encodableValue = valueFacet.toEncodedString(Format.JSON, adapter.getPojo());
+            encodableValue = valueSerializer.toEncodedString(Format.JSON, _Casts.uncheckedCast(adapter.getPojo()));
             recreateStrategy = RecreateStrategy.VALUE;
             return;
         }
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/sitemap/SitemapServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/sitemap/SitemapServiceDefault.java
index 6aa760c2a6..ebf9041085 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/sitemap/SitemapServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/sitemap/SitemapServiceDefault.java
@@ -42,10 +42,10 @@ import org.apache.isis.applib.services.menu.MenuBarsService;
 import org.apache.isis.applib.services.sitemap.SitemapService;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.metamodel.facets.object.grid.GridFacet;
 import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.metamodel.util.Facets;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;
@@ -183,10 +183,8 @@ public class SitemapServiceDefault implements SitemapService {
     private Grid toGrid(final Class<?> domainClass, final Style style) {
 
         if (style == Style.CURRENT) {
-
             return specificationLoader.specForType(domainClass)
-                    .flatMap(spec->spec.lookupFacet(GridFacet.class))
-                    .map(gridFacet->gridFacet.getGrid(null))
+                    .flatMap(Facets::bootstrapGrid)
                     .orElse(null);
         }
 
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java
index e2cacd6f8c..63a018a20e 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java
@@ -51,7 +51,6 @@ import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
 import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
-import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
 import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
 import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -64,6 +63,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.metamodel.specloader.specimpl.MixedInMember;
+import org.apache.isis.core.metamodel.util.Facets;
 
 import lombok.SneakyThrows;
 import lombok.val;
@@ -221,10 +221,7 @@ extends DelegatingInvocationHandlerDefault<T> {
 
             val objectAction = (ObjectAction) objectMember;
 
-
-            val mixinFacet = targetSpec.getFacet(MixinFacet.class);
-            if(mixinFacet != null) {
-
+            if(Facets.mixinIsPresent(targetSpec)) {
                 if (mixeeAdapter == null) {
                     throw _Exceptions.illegalState(
                             "Missing the required mixeeAdapter for action '%s'",
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
index a9d4527528..2de8f6ceb2 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
@@ -81,16 +81,16 @@ extends AbstractObjectMemberReprRenderer<OneToOneAssociation> {
     // ///////////////////////////////////////////////////
 
     private Object addValue(final LinkFollowSpecs linkFollower) {
-        val valueAdapterIfAny2 = objectMember.get(objectAdapter, getInteractionInitiatedBy());
+        val valueAdapterIfAny = objectMember.get(objectAdapter, getInteractionInitiatedBy());
 
         // use the runtime type if we have a value, otherwise fallback to the compile time type of the member
-        val valueAdapter = ManagedObjects.isSpecified(valueAdapterIfAny2)
-                ? valueAdapterIfAny2
+        val valueAdapter = ManagedObjects.isSpecified(valueAdapterIfAny)
+                ? valueAdapterIfAny
                 : ManagedObject.empty(objectMember.getElementType());
 
         val spec = valueAdapter.getSpecification();
 
-        if (Facets.valueIsPresent(objectAdapter.getSpecification())) {
+        if (Facets.valueIsPresent(spec)) {
             String format = null;
             final Class<?> valueType = spec.getCorrespondingClass();
             if(valueType == java.math.BigDecimal.class) {
@@ -115,18 +115,18 @@ extends AbstractObjectMemberReprRenderer<OneToOneAssociation> {
                             resourceContext.suppressMemberExtensions());
         }
 
-        final boolean eagerlyRender =
-                (Facets.defaultViewIsTable(objectMember)
-                        && resourceContext.canEagerlyRender(valueAdapter))
-                || (linkFollower != null
-                        && !linkFollower.isTerminated());
-
         if(valueAdapter.getPojo() == null) {
             final NullNode value = NullNode.getInstance();
             representation.mapPut("value", value);
             return value;
         }
 
+        final boolean eagerlyRender =
+                (Facets.defaultViewIsTable(objectMember)
+                        && resourceContext.canEagerlyRender(valueAdapter))
+                || (linkFollower != null
+                        && !linkFollower.isTerminated());
+
         final String title = valueAdapter.getTitle();
 
         final LinkBuilder valueLinkBuilder = DomainObjectReprRenderer
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/PageParameterUtils.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/PageParameterUtils.java
index 92fff493f5..963ebec891 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/PageParameterUtils.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/PageParameterUtils.java
@@ -33,10 +33,10 @@ import org.springframework.lang.Nullable;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.collections.Can;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
-import org.apache.isis.core.metamodel.facets.object.value.ValueSerializer;
+import org.apache.isis.core.metamodel.facets.object.value.ValueSerializer.Format;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -213,8 +213,8 @@ public class PageParameterUtils {
 
         final ObjectSpecification objSpec = adapter.getSpecification();
         if(objSpec.isValue()) {
-            val valueFacet = objSpec.getFacet(ValueFacet.class);
-            return valueFacet.toEncodedString(ValueSerializer.Format.JSON, adapter.getPojo());
+            return Facets.valueSerializerElseFail(objSpec, objSpec.getCorrespondingClass())
+            .toEncodedString(Format.JSON, _Casts.uncheckedCast(adapter.getPojo()));
         }
 
         return ManagedObjects.stringify(adapter).orElse(null);
@@ -229,9 +229,9 @@ public class PageParameterUtils {
         }
 
         if(objSpec.isValue()) {
-            val valueFacet = objSpec.getFacet(ValueFacet.class);
             return ManagedObject.of(objSpec,
-                    valueFacet.fromEncodedString(ValueSerializer.Format.JSON, encoded));
+                    Facets.valueSerializerElseFail(objSpec, objSpec.getCorrespondingClass())
+                        .fromEncodedString(Format.JSON, encoded));
         }
 
         try {