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());
-    }
-
 }

Reply via email to