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 2021/05/28 16:41:14 UTC
[isis] branch master updated: ISIS-2706: be indifferent on whether
detached or removed (if possible)
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 e19286f ISIS-2706: be indifferent on whether detached or removed (if possible)
e19286f is described below
commit e19286f46ca72fbbba391f641de52f3c76aa981d
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri May 28 18:41:00 2021 +0200
ISIS-2706: be indifferent on whether detached or removed (if possible)
---
.../applib/services/repository/EntityState.java | 19 +++++-
.../services/repository/RepositoryService.java | 69 +++++++++++-----------
.../services/title/TitleServiceDefault.java | 4 +-
.../isis/core/metamodel/spec/ManagedObjects.java | 11 ++--
.../repository/RepositoryServiceDefault.java | 4 +-
.../changetracking/_PropertyChangeRecord.java | 2 +-
.../entities/DnEntityStateProvider.java | 2 +-
.../applib/fixturescripts/FixtureScripts.java | 11 ++--
.../wicket/ui/panels/FormExecutorDefault.java | 6 +-
9 files changed, 73 insertions(+), 55 deletions(-)
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 8beccd0..03a23de 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
@@ -48,7 +48,7 @@ public enum EntityState {
* Object with this state is an entity that has been removed from the
* database. Objects in this state may no longer be interacted with.
*/
- PERSISTABLE_DESTROYED,
+ PERSISTABLE_REMOVED,
;
/**
@@ -76,9 +76,22 @@ public enum EntityState {
/**
* Object with this state is an entity that has been removed from the
* database. Objects in this state may no longer be interacted with.
+ * <p>
+ * Only supported by JDO. Will always return false with JPA.
*/
- public boolean isDestroyed() {
- return this == PERSISTABLE_DESTROYED;
+ public boolean isRemoved() {
+ return this == PERSISTABLE_REMOVED;
}
+ public boolean isDetachedOrRemoved() {
+ return this == PERSISTABLE_REMOVED
+ || this == PERSISTABLE_DETACHED;
+ }
+
+ public boolean isAttachedOrRemoved() {
+ return this == PERSISTABLE_REMOVED
+ || this == PERSISTABLE_REMOVED;
+ }
+
+
}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/repository/RepositoryService.java b/api/applib/src/main/java/org/apache/isis/applib/services/repository/RepositoryService.java
index e5fdc0f..58bc801 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/repository/RepositoryService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/repository/RepositoryService.java
@@ -30,7 +30,6 @@ import org.apache.isis.applib.query.QueryRange;
import lombok.NonNull;
import lombok.SneakyThrows;
-import lombok.val;
/**
* Collects together methods for creating, persisting and searching for
@@ -416,40 +415,40 @@ public interface RepositoryService {
return detachedEntity(ofType);
}
- /**
- * Determines if the specified object is persistent (that it is stored
- * permanently outside of the virtual machine
- * in the object store).
- *
- * <p>
- * This method can also return <code>true</code> if the object has been
- * {@link #isDeleted(Object) deleted} from the object store.
- * </p>
- *
- * @deprecated due to ambiguous semantic, use
- * {@link #getEntityState(Object)} instead
- *
- * @see #getEntityState(Object)
- */
- @Deprecated
- default boolean isPersistent(Object domainObject) {
- val entityState = getEntityState(domainObject);
- return entityState.isAttached() || entityState.isDestroyed();
- }
-
- /**
- * Determines if the specified object has been deleted from the object store.
- *
- * @deprecated due to ambiguous semantic, use
- * {@link #getEntityState(Object)} instead
- *
- * @see #getEntityState(Object)
- */
- @Deprecated
- default boolean isDeleted(Object domainObject) {
- val entityState = getEntityState(domainObject);
- return entityState.isDestroyed();
- }
+// /**
+// * Determines if the specified object is persistent (that it is stored
+// * permanently outside of the virtual machine
+// * in the object store).
+// *
+// * <p>
+// * This method can also return <code>true</code> if the object has been
+// * {@link #isDeleted(Object) deleted} from the object store.
+// * </p>
+// *
+// * @deprecated due to ambiguous semantic, use
+// * {@link #getEntityState(Object)} instead
+// *
+// * @see #getEntityState(Object)
+// */
+// @Deprecated
+// default boolean isPersistent(Object domainObject) {
+// val entityState = getEntityState(domainObject);
+// return entityState.isAttached() || entityState.isDestroyed();
+// }
+//
+// /**
+// * Determines if the specified object has been deleted from the object store.
+// *
+// * @deprecated due to ambiguous semantic, use
+// * {@link #getEntityState(Object)} instead
+// *
+// * @see #getEntityState(Object)
+// */
+// @Deprecated
+// default boolean isDeleted(Object domainObject) {
+// val entityState = getEntityState(domainObject);
+// return entityState.isDestroyed();
+// }
}
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 7e38207..900f7fc 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
@@ -63,8 +63,8 @@ public class TitleServiceDefault implements TitleService {
return "[UNSPECIFIED]";
}
- if(EntityUtil.isDestroyed(objectAdapter)) {
- return "[DELETED]";
+ if(EntityUtil.isDetachedOrRemoved(objectAdapter)) {
+ return "[DETACHED]";
} else {
return objectAdapter.getSpecification().getTitle(null, objectAdapter);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
index de9dbc2..a37d618 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
@@ -525,12 +525,13 @@ public final class ManagedObjects {
return EntityUtil.getEntityState(adapter).isAttached();
}
- public static boolean isDetached(@Nullable ManagedObject adapter) {
- return EntityUtil.getEntityState(adapter).isDetached();
+ public static boolean isDetachedOrRemoved(@Nullable ManagedObject adapter) {
+ return EntityUtil.getEntityState(adapter).isDetachedOrRemoved();
}
- public static boolean isDestroyed(@Nullable ManagedObject adapter) {
- return EntityUtil.getEntityState(adapter).isDestroyed();
+ /** only supported by JDO - always false with JPA */
+ public static boolean isRemoved(@Nullable ManagedObject adapter) {
+ return EntityUtil.getEntityState(adapter).isRemoved();
}
}
@@ -602,7 +603,7 @@ public final class ManagedObjects {
}
val spec = adapter.getSpecification();
if(spec.isEntity()) {
- if(EntityUtil.isDestroyed(adapter)) {
+ if(EntityUtil.isDetachedOrRemoved(adapter)) {
return false;
}
}
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java
index 9fb583c..22a3dea 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java
@@ -99,7 +99,9 @@ public class RepositoryServiceDefault implements RepositoryService {
throw new PersistFailedException("Object not known to framework (unable to create/obtain an adapter)");
}
// only persist detached entities, otherwise skip
- if(!EntityUtil.isDetached(adapter)) {
+ val entityState = EntityUtil.getEntityState(adapter);
+ if(!entityState.isPersistable()
+ || entityState.isAttached()) {
return domainObject;
}
EntityUtil.persistInCurrentTransaction(adapter);
diff --git a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/_PropertyChangeRecord.java b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/_PropertyChangeRecord.java
index 9373ee6..ddc6921 100644
--- a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/_PropertyChangeRecord.java
+++ b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/_PropertyChangeRecord.java
@@ -73,7 +73,7 @@ final class _PropertyChangeRecord {
}
void updatePostValue() {
- preAndPostValue = EntityUtil.isDestroyed(entity)
+ preAndPostValue = EntityUtil.isRemoved(entity)
// don't touch the object!!!
// JDO, for example, will complain otherwise...
? preAndPostValue.withPost(IsisTransactionPlaceholder.DELETED)
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/entities/DnEntityStateProvider.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/entities/DnEntityStateProvider.java
index ecce3de..2a78a7d 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/entities/DnEntityStateProvider.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/entities/DnEntityStateProvider.java
@@ -69,7 +69,7 @@ public class DnEntityStateProvider implements JdoFacetContext {
val persistable = (Persistable) pojo;
val isDeleted = persistable.dnIsDeleted();
if(isDeleted) {
- return EntityState.PERSISTABLE_DESTROYED;
+ return EntityState.PERSISTABLE_REMOVED;
}
val isPersistent = persistable.dnIsPersistent();
if(isPersistent) {
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java
index 2fc65c2..b87a79c 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java
@@ -79,8 +79,8 @@ public class FixtureScripts {
// @Inject private FactoryService factoryService;
@Inject private TitleService titleService;
@Inject private JaxbService jaxbService;
- // @Inject private BookmarkService bookmarkService;
- @Inject private ServiceRegistry serviceRegistry;
+ // @Inject private BookmarkService bookmarkService;
+ // @Inject private ServiceRegistry serviceRegistry;
@Inject private ServiceInjector serviceInjector;
@Inject private RepositoryService repositoryService;
@Inject private TransactionService transactionService;
@@ -205,7 +205,7 @@ public class FixtureScripts {
final ServiceRegistry serviceRegistry) {
this.specification = fixtureScriptsSpecificationProvider.orElse(() -> FixtureScriptsSpecification.builder(PACKAGE_PREFIX).build()).getSpecification();
- this.serviceRegistry = serviceRegistry;
+ // this.serviceRegistry = serviceRegistry;
val packagePrefix = specification.getPackagePrefix();
fixtureScriptByFriendlyName =
@@ -466,7 +466,9 @@ public class FixtureScripts {
if(object == null) {
return null;
}
- if (object instanceof ViewModel || repositoryService.isPersistent(object)) {
+
+ if (object instanceof ViewModel
+ || repositoryService.getEntityState(object).isAttachedOrRemoved()) {
// continue
} else {
switch(getNonPersistedObjectsStrategy()) {
@@ -513,6 +515,7 @@ public class FixtureScripts {
}
+
// -- DEPRECATIONS
/**
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
index d0c495a..2537eee 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
@@ -147,7 +147,7 @@ implements FormExecutor {
// should circuit the redirect check later on; there's no need to reset the adapter
// (this also provides a workaround for view models wrapping now-deleted entities)
targetAdapter = ManagedObject.empty(targetAdapter.getSpecification());
- } else if(EntityUtil.isDestroyed(targetAdapter)) {
+ } else if(EntityUtil.isDetachedOrRemoved(targetAdapter)) {
// if this was an entity delete action
// then we don't re-fetch / re-create the targetAdapter
targetAdapter = ManagedObject.empty(targetAdapter.getSpecification());
@@ -175,7 +175,7 @@ implements FormExecutor {
targetEntityModel.setObject(resultAdapter);
targetAdapter = targetEntityModel.getManagedObject();
}
- if(!EntityUtil.isDestroyed(targetAdapter)) {
+ if(!EntityUtil.isDetachedOrRemoved(targetAdapter)) {
targetEntityModel.resetPropertyModels();
}
@@ -284,7 +284,7 @@ implements FormExecutor {
}
private boolean isUnchanging(final IsisBlobOrClobPanelAbstract<?> object) {
- final ScalarModel scalarModel = (ScalarModel) object.getModel();
+ final ScalarModel scalarModel = object.getModel();
final UnchangingFacet unchangingFacet = scalarModel.getFacet(UnchangingFacet.class);
return unchangingFacet != null && unchangingFacet.value();
}