You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2025/03/12 05:56:12 UTC
(causeway) branch main updated: CAUSEWAY-3859: flattens ManagedObjectEntityTransient into a record
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/main by this push:
new ad928d2bbd7 CAUSEWAY-3859: flattens ManagedObjectEntityTransient into a record
ad928d2bbd7 is described below
commit ad928d2bbd7dc0e68d8447d0e61d4659aefac7e6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Mar 12 06:53:31 2025 +0100
CAUSEWAY-3859: flattens ManagedObjectEntityTransient into a record
---
.../core/metamodel/object/Bookmarkable.java | 2 +-
.../core/metamodel/object/ManagedObject.java | 3 +-
...ient.java => ManagedObjectEntityTransient.java} | 66 ++++++++++++++--------
.../object/_ManagedObjectEntityAbstract.java | 21 ++-----
.../object/_ManagedObjectEntityBookmarked.java | 8 +--
.../object/_ManagedObjectEntityHybrid.java | 4 +-
.../objectmanager/memento/ObjectMemento.java | 12 ++++
7 files changed, 68 insertions(+), 48 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/Bookmarkable.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/Bookmarkable.java
index 6188dccc83c..9a202bc84c8 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/Bookmarkable.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/Bookmarkable.java
@@ -59,7 +59,7 @@ default Optional<Bookmark> refreshBookmark() {
bookmarkRefreshable.invalidateBookmark();
return bookmarkRefreshable.getBookmark();
})
- .orElse(getBookmark());
+ .orElseGet(this::getBookmark);
}
/**
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObject.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObject.java
index 988b53ee1be..e7ffaa78f12 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObject.java
@@ -63,6 +63,7 @@ public sealed interface ManagedObject
ManagedObjectValue,
ManagedObjectService,
ManagedObjectViewmodel,
+ ManagedObjectEntityTransient,
_ManagedObjectEntityAbstract,
PackedManagedObject {
@@ -492,7 +493,7 @@ private static ManagedObject entityHybirdTransient(
final @Nullable Object pojo) {
return pojo != null
? new _ManagedObjectEntityHybrid(
- new _ManagedObjectEntityTransient(spec, pojo))
+ new ManagedObjectEntityTransient(spec, pojo))
: empty(spec);
}
/**
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityTransient.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjectEntityTransient.java
similarity index 54%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityTransient.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjectEntityTransient.java
index e9175614a7a..d45b03136d2 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityTransient.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjectEntityTransient.java
@@ -18,38 +18,45 @@
*/
package org.apache.causeway.core.metamodel.object;
+import java.util.Optional;
+
+import org.jspecify.annotations.NonNull;
+
import org.apache.causeway.applib.services.repository.EntityState;
import org.apache.causeway.commons.internal.assertions._Assert;
-import org.apache.causeway.core.metamodel.facets.object.entity.EntityFacet;
-import org.apache.causeway.core.metamodel.object.ManagedObject.Specialization;
+import org.apache.causeway.core.metamodel.objectmanager.memento.ObjectMemento;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-import lombok.Getter;
-import org.jspecify.annotations.NonNull;
-import lombok.experimental.Accessors;
-
/**
* (package private) specialization corresponding to a detached {@link Specialization#ENTITY}
* @see ManagedObject.Specialization#ENTITY
*/
-final class _ManagedObjectEntityTransient
-extends _ManagedObjectEntityAbstract
-implements Bookmarkable.NoBookmark, _Refetchable {
-
- @Getter(onMethod_ = {@Override}) @Accessors(makeFinal = true)
- private final @NonNull Object pojo;
+record ManagedObjectEntityTransient(
+ @NonNull ObjectSpecification objSpec,
+ @NonNull Object pojo)
+implements ManagedObject, Bookmarkable.NoBookmark, _Refetchable {
- _ManagedObjectEntityTransient(
- final ObjectSpecification spec,
+ ManagedObjectEntityTransient(
+ final ObjectSpecification objSpec,
final Object pojo) {
- super(ManagedObject.Specialization.ENTITY, spec);
- _Assert.assertTrue(spec.isEntity());
- this.pojo = assertCompliance(pojo);
+ _Assert.assertTrue(objSpec.isEntity());
+ this.objSpec = objSpec;
+ this.pojo = _Compliance.assertCompliance(objSpec, specialization(), pojo);
+ }
+
+ @Override
+ public Specialization specialization() {
+ return ManagedObject.Specialization.ENTITY;
}
@Override
public String getTitle() {
- return "detached entity object";
+ return "transient entity object";
+ }
+
+ @Override
+ public Object getPojo() {
+ return pojo;
}
@Override
@@ -59,14 +66,27 @@ public Object peekAtPojo() {
@Override
public @NonNull EntityState getEntityState() {
- var entityFacet = entityFacet();
- return entityFacet.getEntityState(pojo);
+ return objSpec().entityFacetElseFail().getEntityState(pojo);
}
- // -- HELPER
+ @Override
+ public Optional<ObjectMemento> getMemento() {
+ return Optional.ofNullable(ObjectMemento.singularOrEmpty(this));
+ }
- private EntityFacet entityFacet() {
- return objSpec().entityFacetElseFail();
+ @Override
+ public boolean equals(final Object obj) {
+ return _Compliance.equals(this, obj);
+ }
+
+ @Override
+ public int hashCode() {
+ return _Compliance.hashCode(this);
+ }
+
+ @Override
+ public String toString() {
+ return _Compliance.toString(this);
}
}
\ No newline at end of file
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityAbstract.java
index fcf6c661dc0..ab1a0782e3e 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityAbstract.java
@@ -19,8 +19,8 @@
package org.apache.causeway.core.metamodel.object;
import java.util.Optional;
+
import org.jspecify.annotations.NonNull;
-import org.jspecify.annotations.Nullable;
import org.apache.causeway.core.metamodel.facets.object.title.TitleRenderRequest;
import org.apache.causeway.core.metamodel.objectmanager.memento.ObjectMemento;
@@ -36,14 +36,10 @@ abstract non-sealed class _ManagedObjectEntityAbstract
implements ManagedObject {
@Getter(onMethod_ = {@Override}) @Accessors(fluent = true, makeFinal = true)
- private final @NonNull Specialization specialization;
+ protected final @NonNull Specialization specialization;
@Getter(onMethod_ = {@Override}) @Accessors(fluent = true, makeFinal = true)
- private final @NonNull ObjectSpecification objSpec;
-
- final <T> T assertCompliance(final @NonNull T pojo) {
- return _Compliance.assertCompliance(objSpec, specialization, pojo);
- }
+ protected final @NonNull ObjectSpecification objSpec;
@Override
public String getTitle() {
@@ -53,16 +49,7 @@ public String getTitle() {
@Override
public Optional<ObjectMemento> getMemento() {
- return Optional.ofNullable(mementoForScalar(this));
- }
-
- private ObjectMemento mementoForScalar(final @Nullable ManagedObject adapter) {
- MmAssertionUtils.assertPojoIsScalar(adapter);
- return ObjectMemento.singular(adapter)
- .orElseGet(()->
- ManagedObjects.isSpecified(adapter)
- ? ObjectMemento.empty(adapter.logicalType())
- : null);
+ return Optional.ofNullable(ObjectMemento.singularOrEmpty(this));
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityBookmarked.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityBookmarked.java
index e6ac5bfedc7..faf9175daf8 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityBookmarked.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityBookmarked.java
@@ -49,11 +49,11 @@ final class _ManagedObjectEntityBookmarked
private final @NonNull Bookmark bookmark;
_ManagedObjectEntityBookmarked(
- final ObjectSpecification spec,
+ final ObjectSpecification objSpec,
final Object pojo,
final @NonNull Optional<Bookmark> bookmarkIfKnown) {
- super(ManagedObject.Specialization.ENTITY, spec);
- this.pojo = assertCompliance(pojo);
+ super(ManagedObject.Specialization.ENTITY, objSpec);
+ this.pojo = _Compliance.assertCompliance(objSpec, specialization, pojo);
//sanity check bookmark
this.bookmark = entityFacet().validateBookmark(bookmarkIfKnown
.orElseGet(this::createBookmark));
@@ -99,7 +99,7 @@ public Object getPojo() {
var refetchedPojo = refetchPojo(entityState);
refetching = false;
- return this.pojo = assertCompliance(refetchedPojo);
+ return this.pojo = _Compliance.assertCompliance(objSpec, specialization, refetchedPojo);
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityHybrid.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityHybrid.java
index 167aac40f9e..780fd281bb6 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityHybrid.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityHybrid.java
@@ -74,7 +74,7 @@ static MorphState valueOf(final EntityState entityState) {
private MorphState morphState;
_ManagedObjectEntityHybrid(
- final @NonNull _ManagedObjectEntityTransient _transient) {
+ final @NonNull ManagedObjectEntityTransient _transient) {
super(ManagedObject.Specialization.ENTITY, _transient.objSpec());
this.variant = _transient;
this.morphState = MorphState.TRANSIENT;
@@ -161,7 +161,7 @@ private boolean isVariantBookmarked() {
}
private boolean isVariantTransient() {
- return variant instanceof _ManagedObjectEntityTransient;
+ return variant instanceof ManagedObjectEntityTransient;
}
private boolean isVariantRemoved() {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/memento/ObjectMemento.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/memento/ObjectMemento.java
index 13c8b701d82..b23f5d5a818 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/memento/ObjectMemento.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/memento/ObjectMemento.java
@@ -34,6 +34,7 @@
import org.apache.causeway.commons.internal.resources._Serializables;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.object.ManagedObjects;
+import org.apache.causeway.core.metamodel.object.MmAssertionUtils;
/**
* @since 2.0
@@ -67,6 +68,17 @@ static Optional<ObjectMemento> singular(final @Nullable ManagedObject adapter) {
? Optional.empty()
: Optional.of(ObjectMementoSingular.create(adapter));
}
+ /**
+ * returns null for null
+ */
+ @Nullable static ObjectMemento singularOrEmpty(final @Nullable ManagedObject adapter) {
+ MmAssertionUtils.assertPojoIsScalar(adapter);
+ return !ManagedObjects.isNullOrUnspecifiedOrEmpty(adapter)
+ ? ObjectMementoSingular.create(adapter)
+ : ManagedObjects.isSpecified(adapter)
+ ? ObjectMemento.empty(adapter.logicalType())
+ : null;
+ }
static ObjectMemento packed(
final LogicalType logicalType,
final ArrayList<ObjectMemento> listOfMementos) {