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 2018/09/10 17:28:30 UTC
[isis] branch ISIS-1976-rethink-object-adapters updated: ISIS-1976:
introduce 'isRecognized' to PS API (Draft)
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/ISIS-1976-rethink-object-adapters by this push:
new a416a1a ISIS-1976: introduce 'isRecognized' to PS API (Draft)
a416a1a is described below
commit a416a1a37ba7ae62b7377bebc34d2879bb972fdd
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Sep 10 19:27:13 2018 +0200
ISIS-1976: introduce 'isRecognized' to PS API (Draft)
Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
.../system/persistence/PersistenceSession4.java | 11 +++++++++++
.../system/persistence/PersistenceSession5.java | 19 ++++++++++++-------
.../system/persistence/PersistenceSession.java | 4 ++++
.../persistence/adaptermanager/OidProviders.java | 4 ++--
4 files changed, 29 insertions(+), 9 deletions(-)
diff --git a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index 6869eab..b9b6ca9 100644
--- a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -1032,6 +1032,17 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
}
return false;
}
+
+ @Override
+ public boolean isRecognized(Object pojo) {
+ if (pojo!=null && pojo instanceof Persistable) {
+ final Object jdoOid = pm().getObjectId(pojo);
+ if(jdoOid!=null) {
+ return true;
+ }
+ }
+ return false;
+ }
@Override
public MementoRecreateObjectSupport mementoSupport() {
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
index d0f879c..4b8c6ab 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
@@ -51,7 +51,6 @@ import org.apache.isis.applib.query.Query;
import org.apache.isis.applib.services.command.Command;
import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
import org.apache.isis.applib.services.iactn.Interaction;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -855,12 +854,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
@Override
public String identifierFor(final Object pojo) {
- final Object jdoOid = getPersistenceManager().getObjectId(pojo);
- if(jdoOid==null) {
- _Exceptions.throwUnexpectedCodeReach();
- return UUID.randomUUID().toString(); //FIXME[ISIS-1976] should be guarded against somewhere else
- }
-
+ final Object jdoOid = pm().getObjectId(pojo);
requireNonNull(jdoOid,
()->String.format("Pojo of type '%s' is not recognized by JDO.",
pojo.getClass().getName()));
@@ -1034,6 +1028,17 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
}
return false;
}
+
+ @Override
+ public boolean isRecognized(Object pojo) {
+ if (pojo!=null && pojo instanceof Persistable) {
+ final Object jdoOid = pm().getObjectId(pojo);
+ if(jdoOid!=null) {
+ return true;
+ }
+ }
+ return false;
+ }
@Override
public MementoRecreateObjectSupport mementoSupport() {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index f26e3c3..c87c797 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -85,6 +85,9 @@ extends
boolean isRepresentingPersistent(Object pojo);
/**@since 2.0.0-M2*/
boolean isDestroyed(Object pojo);
+ /** whether pojo is recognized by the persistence layer, that is, it has an ObjectId
+ * @since 2.0.0-M2*/
+ boolean isRecognized(Object pojo);
/**@since 2.0.0-M2*/
Object fetchPersistentPojo(RootOid rootOid);
/**@since 2.0.0-M2*/
@@ -172,5 +175,6 @@ extends
// -- OTHERS
void execute(List<PersistenceCommand> persistenceCommandList);
+
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
index 833bf1d..58eef68 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
@@ -61,8 +61,8 @@ public class OidProviders {
@Override
public RootOid oidFor(Object pojo, ObjectSpecification spec) {
final PersistenceSession persistenceSession = IsisContext.getPersistenceSession().get();
- final boolean isPersistent = !persistenceSession.isTransient(pojo);
- if(isPersistent) {
+ final boolean isRecognized = persistenceSession.isRecognized(pojo);
+ if(isRecognized) {
final String identifier = persistenceSession.identifierFor(pojo);
return new RootOid(spec.getSpecId(), identifier, Oid.State.PERSISTENT);
} else {