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 3b0de5970d ISIS-3202: entity state refactoring, yet no fix
3b0de5970d is described below
commit 3b0de5970dadb8ee74631ece3adccaa5c4b0c2c6
Author: Andi Huber <[email protected]>
AuthorDate: Sat Sep 3 20:52:38 2022 +0200
ISIS-3202: entity state refactoring, yet no fix
---
.../apache/isis/applib/services/bookmark/IdStringifier.java | 3 +--
.../apache/isis/applib/services/repository/EntityState.java | 13 ++++++-------
.../org/apache/isis/core/metamodel/object/MmEntityUtil.java | 13 ++++++++-----
.../apache/isis/core/metamodel/object/MmVisibilityUtil.java | 2 +-
.../core/metamodel/services/title/TitleServiceDefault.java | 4 ++--
.../executor/MemberExecutorServiceDefault.java | 3 ++-
.../changetracking/EntityChangeTrackerDefault.java | 4 ++--
.../JpaGeneratedLongIdEntityLifecycleTest.java | 9 ++-------
.../JpaNonGeneratedStringIdEntityLifecycleTest.java | 9 ++-------
9 files changed, 26 insertions(+), 34 deletions(-)
diff --git
a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
index 6344aec6ba..f5c7bd08d5 100644
---
a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
+++
b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
@@ -47,6 +47,7 @@ import lombok.val;
*
* @since 2.0 {@index}
*/
+@SuppressWarnings("javadoc")
public interface IdStringifier<T> {
public final static char SEPARATOR = '_';
@@ -86,8 +87,6 @@ public interface IdStringifier<T> {
}
}
- // Try.call(()->enstringWithCast(primaryKey)).isSuccess();
-
/**
* Entity agnostic variant of {@link IdStringifier}.
*/
diff --git
a/api/applib/src/main/java/org/apache/isis/applib/services/repository/EntityState.java
b/api/applib/src/main/java/org/apache/isis/applib/services/repository/EntityState.java
index a37868904a..f11740e106 100644
---
a/api/applib/src/main/java/org/apache/isis/applib/services/repository/EntityState.java
+++
b/api/applib/src/main/java/org/apache/isis/applib/services/repository/EntityState.java
@@ -86,18 +86,17 @@ public enum EntityState {
// -- SPECIAL STATES
- /**
- * @apiNote 'removed' is only supported by JDO.
- */
- public boolean isDetachedOrRemoved() {
- return isDetached()
- || isRemoved()
- || isSpecicalJpaDetachedWithOid();
+ public boolean isDetachedCannotReattach() {
+ return (isDetached()
+ || isRemoved())
+ && !isSpecicalJpaDetachedWithOid();
}
/**
* @apiNote 'removed' is only supported by JDO.
+ * @deprecated not supported by JPA
*/
+ @Deprecated
public boolean isAttachedOrRemoved() {
return isAttached()
|| isRemoved();
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmEntityUtil.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmEntityUtil.java
index 8aec1b4be1..d114d32764 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmEntityUtil.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmEntityUtil.java
@@ -136,13 +136,16 @@ public final class MmEntityUtil {
return MmEntityUtil.getEntityState(adapter).hasOid();
}
- public static boolean isDetachedOrRemoved(final @Nullable ManagedObject
adapter) {
- return MmEntityUtil.getEntityState(adapter).isDetachedOrRemoved();
+ public static boolean isDetachedCannotReattach(final @Nullable
ManagedObject adapter) {
+ return MmEntityUtil.getEntityState(adapter).isDetachedCannotReattach();
}
- /** only supported by JDO - always false with JPA */
- public static boolean isRemoved(final @Nullable ManagedObject adapter) {
- return MmEntityUtil.getEntityState(adapter).isRemoved();
+ /** TODO very strange logic */
+ public static boolean isDeleted(final @Nullable ManagedObject entity) {
+ val state = MmEntityUtil.getEntityState(entity);
+ return state.isDetached()
+ || state.isRemoved()
+ || state.isSpecicalJpaDetachedWithOid();
}
}
\ No newline at end of file
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmVisibilityUtil.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmVisibilityUtil.java
index aac795ed12..fb1a33dbe2 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmVisibilityUtil.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmVisibilityUtil.java
@@ -99,7 +99,7 @@ public final class MmVisibilityUtil {
}
val spec = adapter.getSpecification();
if(spec.isEntity()) {
- if(MmEntityUtil.isDetachedOrRemoved(adapter)) {
+ if(MmEntityUtil.isDetachedCannotReattach(adapter)) {
return false;
}
}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitleServiceDefault.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitleServiceDefault.java
index 7c2d56d266..81cf529d8d 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitleServiceDefault.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/title/TitleServiceDefault.java
@@ -30,8 +30,8 @@ import org.apache.isis.applib.services.title.TitleService;
import org.apache.isis.applib.services.wrapper.WrapperFactory;
import org.apache.isis.core.metamodel.IsisModuleCoreMetamodel;
import org.apache.isis.core.metamodel.facets.object.title.TitleRenderRequest;
-import org.apache.isis.core.metamodel.object.MmEntityUtil;
import org.apache.isis.core.metamodel.object.ManagedObjects;
+import org.apache.isis.core.metamodel.object.MmEntityUtil;
import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
import lombok.RequiredArgsConstructor;
@@ -61,7 +61,7 @@ public class TitleServiceDefault implements TitleService {
return "[UNSPECIFIED]";
}
- if(MmEntityUtil.isDetachedOrRemoved(objectAdapter)) {
+ if(MmEntityUtil.isDetachedCannotReattach(objectAdapter)) {
return "[DETACHED]";
} else {
return objectAdapter.getSpecification().getTitle(
diff --git
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/executor/MemberExecutorServiceDefault.java
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/executor/MemberExecutorServiceDefault.java
index dc1585f9d7..4d3606e525 100644
---
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/executor/MemberExecutorServiceDefault.java
+++
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/executor/MemberExecutorServiceDefault.java
@@ -273,7 +273,8 @@ implements MemberExecutorService {
if(!entityState.isPersistable()) {
return;
}
- if(entityState.isDetached()) {
+ if(entityState.isDetached()
+ || entityState.isSpecicalJpaDetachedWithOid()) {
// ensure that any still-to-be-persisted adapters get persisted to
DB.
getTransactionService().flushTransaction();
}
diff --git
a/persistence/commons/src/main/java/org/apache/isis/persistence/jpa/integration/changetracking/EntityChangeTrackerDefault.java
b/persistence/commons/src/main/java/org/apache/isis/persistence/jpa/integration/changetracking/EntityChangeTrackerDefault.java
index ca3bcb32b9..7713dcdfa7 100644
---
a/persistence/commons/src/main/java/org/apache/isis/persistence/jpa/integration/changetracking/EntityChangeTrackerDefault.java
+++
b/persistence/commons/src/main/java/org/apache/isis/persistence/jpa/integration/changetracking/EntityChangeTrackerDefault.java
@@ -157,8 +157,8 @@ implements
val records = enlistedPropertyChangeRecordsById.values().stream()
// set post values, which have been left empty up to now
.peek(rec -> {
- // assuming this check correctly detects deleted entities
(JDO)
- if(MmEntityUtil.isDetachedOrRemoved(rec.getEntity())) {
+ // assuming this check correctly detects deleted entities
+ if(MmEntityUtil.isDeleted(rec.getEntity())) {
rec.withPostValueSetToDeleted();
} else {
rec.withPostValueSetToCurrent();
diff --git
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/entitylifecycle/JpaGeneratedLongIdEntityLifecycleTest.java
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/entitylifecycle/JpaGeneratedLongIdEntityLifecycleTest.java
index 8dcb7af510..4fe475acd2 100644
---
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/entitylifecycle/JpaGeneratedLongIdEntityLifecycleTest.java
+++
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/entitylifecycle/JpaGeneratedLongIdEntityLifecycleTest.java
@@ -122,7 +122,7 @@ class JpaGeneratedLongIdEntityLifecycleTest {
repository.remove(entity.getPojo());
// expected post-condition (after removal)
- assertDetachedOrRemoved(entity);
+ assertTrue(MmEntityUtil.isDeleted(entity));
setEntityRef(entity);
}
@@ -132,7 +132,7 @@ class JpaGeneratedLongIdEntityLifecycleTest {
val entity = getEntityRef();
- assertDetachedOrRemoved(entity);
+ assertTrue(MmEntityUtil.isDeleted(entity));
assertEquals(0,
repository.allInstances(JpaEntityGeneratedLongId.class).size());
}
@@ -153,9 +153,4 @@ class JpaGeneratedLongIdEntityLifecycleTest {
return entity;
}
- static void assertDetachedOrRemoved(final ManagedObject entity) {
- val entityState = MmEntityUtil.getEntityState(entity);
- assertTrue(entityState.isDetachedOrRemoved());
- }
-
}
diff --git
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/entitylifecycle/JpaNonGeneratedStringIdEntityLifecycleTest.java
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/entitylifecycle/JpaNonGeneratedStringIdEntityLifecycleTest.java
index 67cc41be4d..5e1abed9bd 100644
---
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/entitylifecycle/JpaNonGeneratedStringIdEntityLifecycleTest.java
+++
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/entitylifecycle/JpaNonGeneratedStringIdEntityLifecycleTest.java
@@ -121,7 +121,7 @@ class JpaNonGeneratedStringIdEntityLifecycleTest {
repository.remove(entity.getPojo());
// expected post-condition (after removal)
- assertDetachedOrRemoved(entity);
+ assertTrue(MmEntityUtil.isDeleted(entity));
setEntityRef(entity);
}
@@ -131,7 +131,7 @@ class JpaNonGeneratedStringIdEntityLifecycleTest {
val entity = getEntityRef();
- assertDetachedOrRemoved(entity);
+ assertTrue(MmEntityUtil.isDeleted(entity));
assertEquals(0,
repository.allInstances(JpaEntityNonGeneratedStringId.class).size());
}
@@ -152,9 +152,4 @@ class JpaNonGeneratedStringIdEntityLifecycleTest {
return entity;
}
- static void assertDetachedOrRemoved(final ManagedObject entity) {
- val entityState = MmEntityUtil.getEntityState(entity);
- assertTrue(entityState.isDetachedOrRemoved());
- }
-
}