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/29 08:16:07 UTC
[isis] branch master updated: ISIS-3167: further prepare removal of lazy specs in ManagedObject
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 122b4e914a ISIS-3167: further prepare removal of lazy specs in ManagedObject
122b4e914a is described below
commit 122b4e914aee375ccc22dfa89e4a95ae27d11160
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Aug 29 10:15:58 2022 +0200
ISIS-3167: further prepare removal of lazy specs in ManagedObject
---
.../_testing/MetaModelContext_forTesting.java | 4 +++-
.../context/MetaModelContext_usingIoc.java | 8 +++++--
.../isis/core/metamodel/object/ManagedObjects.java | 3 +++
.../runtimeservices/memento/_ObjectMemento.java | 22 ++++++++++---------
.../xmlsnapshot/XmlSnapshotBuilder.java | 25 ++++++++++++++++------
5 files changed, 42 insertions(+), 20 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 18973bef07..d8b0dae0d9 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
@@ -507,7 +507,9 @@ implements MetaModelContext {
if(ProgrammingModelConstants.TypeVetoMarker.anyMatchOn(managedBeanAdapter.getBeanClass())) {
return Optional.empty();
}
- return Optional.of(ManagedObject.lazy(getSpecificationLoader(), servicePojo));
+ return getSpecificationLoader()
+ .specForType(servicePojo.getClass())
+ .map(serviceSpec->ManagedObject.service(serviceSpec, servicePojo));
}
// -- RECURSIVE INITIALIZATION FIX
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContext_usingIoc.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContext_usingIoc.java
index d54c633833..4660ff3c77 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContext_usingIoc.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContext_usingIoc.java
@@ -183,8 +183,12 @@ class MetaModelContext_usingIoc implements MetaModelContext {
.orElseThrow(()->_Exceptions.unrecoverable(
"Cannot get service instance of type '%s'",
managedBeanAdapter.getBeanClass()));
-
- return ManagedObject.lazy(getSpecificationLoader(), servicePojo);
+ return getSpecificationLoader()
+ .specForType(servicePojo.getClass())
+ .map(serviceSpec->ManagedObject.service(serviceSpec, servicePojo))
+ .orElseThrow(()->_Exceptions.unrecoverable(
+ "Cannot wrap vetoed service of type '%s'",
+ managedBeanAdapter.getBeanClass()));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObjects.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObjects.java
index 8623d56a1e..977e275cba 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObjects.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObjects.java
@@ -343,7 +343,10 @@ public final class ManagedObjects {
/**
* Optionally the common {@link ObjectSpecification} based on whether provided {@code objects}
* have any at all.
+ * @deprecated this is a hack - the MM has strict type-of metadata for non-scalars,
+ * resorting to runtime introspection does not conform with our design decisions
*/
+ @Deprecated
public static Optional<ObjectSpecification> commonSpecification(
final @Nullable Can<ManagedObject> objects) {
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 bc151d117c..f15aa0204a 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
@@ -31,7 +31,6 @@ 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.collections.Can;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.exceptions._Exceptions;
@@ -123,15 +122,18 @@ final class _ObjectMemento implements HasLogicalType, Serializable {
final _ObjectMemento memento,
final MetaModelContext mmc) {
- final Can<ManagedObject> managedObjects =
- _NullSafe.stream(memento.list)
- .map(Functions.toManagedObject(mmc))
- .collect(Can.toCan());
-
- val commonSpec = ManagedObjects.commonSpecification(managedObjects)
- .orElseGet(()->mmc.getSpecificationLoader().loadSpecification(Object.class));
-
- return ManagedObject.packed(commonSpec, managedObjects);
+ // I believe this code path is no longer reachable
+ throw _Exceptions.unexpectedCodeReach();
+
+// final Can<ManagedObject> managedObjects =
+// _NullSafe.stream(memento.list)
+// .map(Functions.toManagedObject(mmc))
+// .collect(Can.toCan());
+//
+// val commonSpec = ManagedObjects.commonSpecification(managedObjects)
+// .orElseGet(()->mmc.getSpecificationLoader().loadSpecification(Object.class));
+//
+// return ManagedObject.packed(commonSpec, managedObjects);
}
@Override
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/xmlsnapshot/XmlSnapshotBuilder.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/xmlsnapshot/XmlSnapshotBuilder.java
index 675c86a8b5..ac1bae20da 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/xmlsnapshot/XmlSnapshotBuilder.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/xmlsnapshot/XmlSnapshotBuilder.java
@@ -20,28 +20,37 @@ package org.apache.isis.core.runtimeservices.xmlsnapshot;
import java.util.List;
+import org.springframework.lang.Nullable;
+
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.core.metamodel.object.ManagedObject;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.metamodel.util.snapshot.XmlSchema;
import org.apache.isis.core.metamodel.util.snapshot.XmlSnapshot;
+import lombok.NonNull;
import lombok.RequiredArgsConstructor;
/**
- * Builds an {@link XmlSnapshot} using a fluent use through a builder:
+ * Builds a {@link XmlSnapshot} fluently with a builder:
*
* <pre>
- * XmlSnapshot snapshot = XmlSnapshotBuilder.create(customer).includePath("placeOfBirth").includePath("orders/product").build();
+ * XmlSnapshot snapshot = XmlSnapshotBuilder
+ * .create(customer)
+ * .includePath("placeOfBirth")
+ * .includePath("orders/product")
+ * .build();
* Element customerAsXml = snapshot.toXml();
* </pre>
*/
@RequiredArgsConstructor
public class XmlSnapshotBuilder {
- private final SpecificationLoader specificationLoader;
- private final Object domainObject;
- private XmlSchema schema;
+ private final @NonNull SpecificationLoader specificationLoader;
+
+ /** required, must also be a scalar */
+ private final @NonNull Object domainObject;
+ private @Nullable XmlSchema schema;
static class PathAndAnnotation {
public PathAndAnnotation(final String path, final String annotation) {
@@ -70,8 +79,10 @@ public class XmlSnapshotBuilder {
}
public XmlSnapshot build() {
- final ManagedObject adapter = ManagedObject.lazy(specificationLoader, domainObject);
- final XmlSnapshot snapshot = (schema != null) ? new XmlSnapshot(adapter, schema) : new XmlSnapshot(adapter);
+ final ManagedObject adapter = ManagedObject.wrapScalar(specificationLoader, domainObject);
+ final XmlSnapshot snapshot = (schema != null)
+ ? new XmlSnapshot(adapter, schema)
+ : new XmlSnapshot(adapter);
for (final XmlSnapshotBuilder.PathAndAnnotation paa : paths) {
if (paa.annotation != null) {
snapshot.include(paa.path, paa.annotation);