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 2020/01/14 20:30:31 UTC
[isis] branch 2263-Update_RO_spec updated: ISIS-2263: remove the
oid state (transient/viewmodel/persistent)
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch 2263-Update_RO_spec
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/2263-Update_RO_spec by this push:
new d95e012 ISIS-2263: remove the oid state (transient/viewmodel/persistent)
d95e012 is described below
commit d95e0125ceb5f18a4dfb8b93494bb9931e1202ab
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Jan 14 21:30:21 2020 +0100
ISIS-2263: remove the oid state (transient/viewmodel/persistent)
---
.../isis/applib/mixins/dto/DtoMappingHelper.java | 17 ----
.../isis/applib/services/bookmark/Bookmark.java | 66 +------------
.../isis/applib/services/hint/HintStore.java | 3 +-
.../org/apache/isis/schema/common/common-2.0.xsd | 14 +--
.../isis/core/metamodel/adapter/oid/Oid.java | 41 ++++----
.../core/metamodel/adapter/oid/Oid_Marshaller.java | 29 ++----
.../core/metamodel/adapter/oid/Oid_Parented.java | 17 +---
.../isis/core/metamodel/adapter/oid/Oid_Root.java | 41 ++------
.../isis/core/metamodel/adapter/oid/Oid_Value.java | 17 +---
.../isis/core/metamodel/adapter/oid/RootOid.java | 2 +
.../identify/ObjectIdentifier_builtinHandlers.java | 2 +-
.../isis/core/metamodel/spec/ManagedObject.java | 24 ++---
.../adapter/oid/OidMarshallerTest_marshall.java | 13 +--
.../adapter/oid/OidMarshallerTest_unmarshal.java | 5 -
.../core/metamodel/adapter/oid/OidVersionTest.java | 20 ++--
...dDefaultTest_valueSemantics_whenPersistent.java | 12 +--
...idDefaultTest_valueSemantics_whenTransient.java | 46 ---------
.../metamodel/adapter/oid/RootOidTest_create.java | 6 --
.../runtime/persistence/adapter/PojoAdapter.java | 20 +---
...ctAdapterContext_ObjectAdapterByIdProvider.java | 106 +++++++++++----------
.../transaction/PojoAdapterBuilder.java | 2 +-
21 files changed, 131 insertions(+), 372 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/DtoMappingHelper.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/DtoMappingHelper.java
index f0fbb7b..66dd803 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/DtoMappingHelper.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/DtoMappingHelper.java
@@ -29,8 +29,6 @@ import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.OrderPrecedence;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.bookmark.BookmarkService;
-import org.apache.isis.core.commons.internal.exceptions._Exceptions;
-import org.apache.isis.schema.common.v2.BookmarkObjectState;
import org.apache.isis.schema.common.v2.OidDto;
@Service
@@ -52,7 +50,6 @@ public class DtoMappingHelper {
if (reference != null) {
argValue = new OidDto();
argValue.setObjectType(reference.getObjectType());
- argValue.setObjectState(bookmarkObjectStateOf(reference));
argValue.setObjectIdentifier(reference.getIdentifier());
} else {
argValue = null;
@@ -60,19 +57,5 @@ public class DtoMappingHelper {
return argValue;
}
- private static BookmarkObjectState bookmarkObjectStateOf(final Bookmark bookmark) {
- switch (bookmark.getObjectState()) {
- case PERSISTENT:
- return BookmarkObjectState.PERSISTENT;
- case TRANSIENT:
- return BookmarkObjectState.TRANSIENT;
- case VIEW_MODEL:
- return BookmarkObjectState.VIEW_MODEL;
- default:
- throw _Exceptions.illegalArgument("objectState '%s' not recognized", bookmark.getObjectState());
- }
-
- }
-
}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
index df9ebff..cc31cbc 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
@@ -24,8 +24,6 @@ import java.util.Objects;
import org.apache.isis.applib.annotation.Value;
import org.apache.isis.core.commons.internal.base._Strings;
-import org.apache.isis.core.commons.internal.exceptions._Exceptions;
-import org.apache.isis.schema.common.v2.BookmarkObjectState;
import org.apache.isis.schema.common.v2.OidDto;
import lombok.Getter;
@@ -46,58 +44,7 @@ public class Bookmark implements Serializable {
@Getter private final String objectType;
@Getter private final String identifier;
-
- @Getter private final ObjectState objectState;
-
- /**
- * @deprecated since 2.0, only kept for compatibility with common schema v1.1
- */
- @Deprecated
- public enum ObjectState {
- PERSISTENT("", BookmarkObjectState.PERSISTENT),
- TRANSIENT("!", BookmarkObjectState.TRANSIENT), // same as OidMarshaller
- VIEW_MODEL("*", BookmarkObjectState.VIEW_MODEL); // same as OidMarshaller
-
- @Getter private final String code;
-
- private final BookmarkObjectState bookmarkObjectState;
-
-
- ObjectState(
- final String code,
- final BookmarkObjectState bookmarkObjectState) {
- this.code = code;
- this.bookmarkObjectState = bookmarkObjectState;
- }
-
- public static ObjectState from(final String objectType) {
- if(objectType.startsWith(TRANSIENT.code)) return TRANSIENT;
- if(objectType.startsWith(VIEW_MODEL.code)) return VIEW_MODEL;
- return PERSISTENT;
- }
-
- public static ObjectState from(final BookmarkObjectState objectState) {
- if(objectState == null) {
- // persistent is assumed if not specified
- return ObjectState.PERSISTENT;
- }
- switch (objectState) {
- case TRANSIENT:
- return ObjectState.TRANSIENT;
- case VIEW_MODEL:
- return ObjectState.VIEW_MODEL;
- case PERSISTENT:
- return ObjectState.PERSISTENT;
- default:
- throw _Exceptions.unmatchedCase(objectState);
- }
- }
- @Deprecated
- public BookmarkObjectState toBookmarkState() {
- return bookmarkObjectState;
- }
- }
public static Bookmark create(String str) {
return str != null? new Bookmark(str): null;
@@ -109,19 +56,13 @@ public class Bookmark implements Serializable {
oidDto.setType(getObjectType());
oidDto.setId(getIdentifier());
- // persistent is assumed if not specified...
- final BookmarkObjectState bookmarkState = getObjectState().toBookmarkState();
- oidDto.setObjectState(bookmarkState != BookmarkObjectState.PERSISTENT ? bookmarkState : null);
-
return oidDto;
}
public static Bookmark from(OidDto oidDto) {
- val bookmarkObjectState = oidDto.getObjectState();
- val objectState = ObjectState.from(bookmarkObjectState);
val objectType = coalesce(oidDto.getType(), oidDto.getObjectType());
val objectId = coalesce(oidDto.getId(), oidDto.getObjectIdentifier());
- val bookmark = new Bookmark(objectState.getCode() + objectType, objectId);
+ val bookmark = new Bookmark(objectType, objectId);
return bookmark;
}
@@ -137,8 +78,7 @@ public class Bookmark implements Serializable {
}
public Bookmark(final String objectType, final String identifier) {
- this.objectState = ObjectState.from(objectType);
- this.objectType = objectState != ObjectState.PERSISTENT ? objectType.substring(1): objectType;
+ this.objectType = objectType;
this.identifier = identifier;
}
@@ -173,7 +113,7 @@ public class Bookmark implements Serializable {
*/
@Override
public String toString() {
- return objectState.getCode() + objectType + SEPARATOR + identifier;
+ return objectType + SEPARATOR + identifier;
}
// -- HELPER
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java b/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java
index bee96bb..728e7d4 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java
@@ -43,8 +43,7 @@ public interface HintStore {
* Similar to {@link #toString()}, but using {@link #hintId} rather than {@link #identifier}.
*/
public String toStringUsingHintId() {
- return super.getObjectState().getCode()
- + super.getObjectType()
+ return super.getObjectType()
+ SEPARATOR
+ hintId;
}
diff --git a/api/schema/src/main/resources/org/apache/isis/schema/common/common-2.0.xsd b/api/schema/src/main/resources/org/apache/isis/schema/common/common-2.0.xsd
index 1eeb6a6..d36a0ba 100644
--- a/api/schema/src/main/resources/org/apache/isis/schema/common/common-2.0.xsd
+++ b/api/schema/src/main/resources/org/apache/isis/schema/common/common-2.0.xsd
@@ -69,12 +69,7 @@
<xs:documentation>Deprecated, use the 'id' attribute instead.</xs:documentation>
</xs:annotation>
</xs:element>
- </xs:sequence>
- <xs:attribute name="objectState" type="bookmarkObjectState">
- <xs:annotation>
- <xs:documentation>In previous versions of this schema the 'objectState' attribute was defaulted, but is now assumed to be 'persistent'</xs:documentation>
- </xs:annotation>
- </xs:attribute>
+ </xs:sequence>
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="id" type="xs:string"/>
</xs:complexType>
@@ -132,13 +127,6 @@
</xs:sequence>
</xs:complexType>
- <xs:simpleType name="bookmarkObjectState">
- <xs:restriction base="xs:string">
- <xs:enumeration value="persistent"/>
- <xs:enumeration value="transient"/>
- <xs:enumeration value="viewModel"/>
- </xs:restriction>
- </xs:simpleType>
<xs:simpleType name="valueType">
<xs:restriction base="xs:string">
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
index 4e53f3f..bd53147 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
@@ -41,24 +41,16 @@ public interface Oid extends Serializable {
*/
String enString();
- /**
- * Flags whether this OID is for a transient (not-yet-persisted) object,
- * or a view model object, or for a persistent object.
- *
- * <p>
- * In the case of an {@link ParentedOid}, is determined by the state
- * of its {@link ParentedOid#getParentOid() root}'s {@link RootOid#isTransient() state}.
- */
- boolean isTransient();
-
- boolean isViewModel();
-
- boolean isPersistent();
-
default boolean isValue() {
return false; // default, only overridden by Oid_Value
}
+ @Deprecated
+ default boolean isTransient() {
+ return false;
+ }
+
+
/**
* {@link ObjectSpecId} of the domain object this instance is representing, or when parented,
* the ObjectSpecId of the parent domain object. When representing a value returns {@code null}.
@@ -109,22 +101,23 @@ public interface Oid extends Serializable {
public static RootOid ofBookmark(Bookmark bookmark) {
return Oid_Root.of(
ObjectSpecId.of(bookmark.getObjectType()),
- bookmark.getIdentifier(),
- bookmark.getObjectState());
+ bookmark.getIdentifier());
}
- public static RootOid viewmodelOf(ObjectSpecId objectSpecId, String mementoStr) {
- return Oid_Root.of(objectSpecId, mementoStr, Bookmark.ObjectState.VIEW_MODEL);
+ public static RootOid of(ObjectSpecId objectSpecId, String mementoStr) {
+ return Oid_Root.of(objectSpecId, mementoStr);
}
-
- public static RootOid transientOf(ObjectSpecId objectSpecId, String identifier) {
- return Oid_Root.of(objectSpecId, identifier, Bookmark.ObjectState.TRANSIENT);
+
+ @Deprecated
+ public static RootOid persistentOf(ObjectSpecId objectSpecId, String mementoStr) {
+ return of(objectSpecId, mementoStr);
}
- public static RootOid persistentOf(ObjectSpecId objectSpecId, String identifier) {
- return Oid_Root.of(objectSpecId, identifier, Bookmark.ObjectState.PERSISTENT);
+ @Deprecated
+ public static RootOid transientOf(ObjectSpecId objectSpecId, String identifier) {
+ return of(objectSpecId, identifier);
}
-
+
// -- PARENTED COLLECTIONS
public static ParentedOid parentedOfOneToMany(RootOid parentRootOid, OneToManyAssociation oneToMany) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
index d7512f5..f76e451 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
@@ -24,7 +24,6 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;
-import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.core.commons.internal.assertions._Assert;
import org.apache.isis.core.commons.internal.base._Casts;
import org.apache.isis.core.commons.internal.base._Strings;
@@ -88,14 +87,10 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
private Oid_Marshaller(){}
- // -- public constants
- public static final String VIEWMODEL_INDICATOR =
- Bookmark.ObjectState.VIEW_MODEL.getCode(); // "*"
-
-
- // -- private constants
- private static final String TRANSIENT_INDICATOR =
- Bookmark.ObjectState.TRANSIENT.getCode() ; // "!"
+ @Deprecated
+ private static final String VIEWMODEL_INDICATOR = "*";
+ @Deprecated
+ private static final String TRANSIENT_INDICATOR = "!";
private static final String SEPARATOR = ":";
private static final String SEPARATOR_NESTING = "~";
@@ -147,15 +142,7 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
throw _Exceptions.illegalArgument("Could not parse OID '" + oidStr + "'; should match pattern: " + OIDSTR_PATTERN.pattern());
}
- final String isTransientOrViewModelStr = getGroup(matcher, 3);
- final Bookmark.ObjectState state;
- if("!".equals(isTransientOrViewModelStr)) {
- state = Bookmark.ObjectState.TRANSIENT;
- } else if("*".equals(isTransientOrViewModelStr)) {
- state = Bookmark.ObjectState.VIEW_MODEL;
- } else {
- state = Bookmark.ObjectState.PERSISTENT;
- }
+ final String isTransientOrViewModelStr = getGroup(matcher, 3); // deprecated
final String rootObjectType = getGroup(matcher, 4);
final String rootIdentifier = getGroup(matcher, 5);
@@ -184,7 +171,7 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
if(aggregateOidParts.isEmpty()) {
ensureCorrectType(oidStr, requestedType, RootOid.class);
return _Casts.uncheckedCast(
- Oid_Root.of(ObjectSpecId.of(rootObjectType), rootIdentifier, state));
+ Oid_Root.of(ObjectSpecId.of(rootObjectType), rootIdentifier));
} else {
throw _Exceptions.illegalArgument("Aggregated Oids are no longer supported");
}
@@ -240,9 +227,7 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
@Override
public final String marshal(RootOid rootOid) {
_Assert.assertFalse("can not marshal values", rootOid.isValue());
- final String transientIndicator = rootOid.isTransient()? TRANSIENT_INDICATOR : "";
- final String viewModelIndicator = rootOid.isViewModel()? VIEWMODEL_INDICATOR : "";
- return transientIndicator + viewModelIndicator + rootOid.getObjectSpecId() + SEPARATOR + rootOid.getIdentifier();
+ return rootOid.getObjectSpecId() + SEPARATOR + rootOid.getIdentifier();
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Parented.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Parented.java
index dc1996a..51fe71b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Parented.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Parented.java
@@ -30,7 +30,7 @@ import static org.apache.isis.core.metamodel.adapter.oid.Oid.unmarshaller;
final class Oid_Parented implements ParentedOid {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 2L;
private final String oneToManyId;
private final int hashCode;
@@ -58,21 +58,6 @@ final class Oid_Parented implements ParentedOid {
return getParentOid().getObjectSpecId();
}
- @Override
- public boolean isTransient() {
- return getParentOid().isTransient();
- }
-
- @Override
- public boolean isViewModel() {
- return getParentOid().isViewModel();
- }
-
- @Override
- public boolean isPersistent() {
- return getParentOid().isPersistent();
- }
-
public static Oid_Parented deString(String oidStr) {
return unmarshaller().unmarshal(oidStr, Oid_Parented.class);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java
index e07a522..42036f7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java
@@ -24,7 +24,6 @@ import java.util.Objects;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.core.commons.internal.url.UrlDecoderUtil;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.schema.common.v2.BookmarkObjectState;
import org.apache.isis.schema.common.v2.OidDto;
import static org.apache.isis.core.commons.internal.base._With.requires;
@@ -33,30 +32,26 @@ import lombok.val;
final class Oid_Root implements RootOid {
- private final static long serialVersionUID = 2L;
+ private final static long serialVersionUID = 3L;
private final ObjectSpecId objectSpecId;
private final String identifier;
- private final Bookmark.ObjectState state;
private final int hashCode;
public static Oid_Root of(
ObjectSpecId objectSpecId,
- String identifier,
- Bookmark.ObjectState state) {
+ String identifier) {
- return new Oid_Root(objectSpecId, identifier, state);
+ return new Oid_Root(objectSpecId, identifier);
}
- private Oid_Root(ObjectSpecId objectSpecId, String identifier, Bookmark.ObjectState state) {
+ private Oid_Root(ObjectSpecId objectSpecId, String identifier) {
requires(objectSpecId, "objectSpecId");
requires(identifier, "identifier");
- requires(state, "state");
this.objectSpecId = objectSpecId;
this.identifier = identifier;
- this.state = state;
this.hashCode = calculateHash();
}
@@ -88,23 +83,8 @@ final class Oid_Root implements RootOid {
}
@Override
- public boolean isTransient() {
- return state == Bookmark.ObjectState.TRANSIENT;
- }
-
- @Override
- public boolean isViewModel() {
- return state == Bookmark.ObjectState.VIEW_MODEL;
- }
-
- @Override
- public boolean isPersistent() {
- return state == Bookmark.ObjectState.PERSISTENT;
- }
-
- @Override
public Bookmark asBookmark() {
- val objectType = state.getCode() + getObjectSpecId().asString();
+ val objectType = getObjectSpecId().asString();
val identifier = getIdentifier();
return new Bookmark(objectType, identifier);
}
@@ -117,12 +97,6 @@ final class Oid_Root implements RootOid {
oidDto.setType(getObjectSpecId().asString());
oidDto.setId(getIdentifier());
- val bookmarkState = state.toBookmarkState();
- oidDto.setObjectState(
- bookmarkState != BookmarkObjectState.PERSISTENT
- ? bookmarkState
- : null); // persistent is assumed if not specified...
-
return oidDto;
}
@@ -143,8 +117,7 @@ final class Oid_Root implements RootOid {
public boolean equals(final Oid_Root other) {
return Objects.equals(objectSpecId, other.getObjectSpecId())
- && Objects.equals(identifier, other.getIdentifier())
- && Objects.equals(state, other.state);
+ && Objects.equals(identifier, other.getIdentifier());
}
@Override
@@ -160,7 +133,7 @@ final class Oid_Root implements RootOid {
// -- HELPER
private int calculateHash() {
- return Objects.hash(objectSpecId, identifier, state);
+ return Objects.hash(objectSpecId, identifier);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java
index 2e4bcc8..18a820d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java
@@ -25,7 +25,7 @@ import org.apache.isis.schema.common.v2.OidDto;
final class Oid_Value implements RootOid {
- private final static long serialVersionUID = 1L;
+ private final static long serialVersionUID = 2L;
static final Oid_Value INSTANCE = new Oid_Value();
@@ -40,21 +40,6 @@ final class Oid_Value implements RootOid {
}
@Override
- public boolean isTransient() {
- return false;
- }
-
- @Override
- public boolean isViewModel() {
- return false;
- }
-
- @Override
- public boolean isPersistent() {
- return false;
- }
-
- @Override
public ObjectSpecId getObjectSpecId() {
return null;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
index 72eccd1..4ac4b8d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
@@ -42,5 +42,7 @@ public interface RootOid extends Oid {
return Oid.unmarshaller().unmarshal(oidStr, RootOid.class);
}
+
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/identify/ObjectIdentifier_builtinHandlers.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/identify/ObjectIdentifier_builtinHandlers.java
index 104cf7b..28781e7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/identify/ObjectIdentifier_builtinHandlers.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/identify/ObjectIdentifier_builtinHandlers.java
@@ -114,7 +114,7 @@ class ObjectIdentifier_builtinHandlers {
val spec = managedObject.getSpecification();
val recreatableObjectFacet = spec.getFacet(ViewModelFacet.class);
val identifier = recreatableObjectFacet.memento(managedObject.getPojo());
- return Oid.Factory.viewmodelOf(spec.getSpecId(), identifier);
+ return Oid.Factory.of(spec.getSpecId(), identifier);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
index 1c86790..e1195dd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
@@ -563,13 +563,15 @@ public interface ManagedObject {
}
static EntityState _entityState(ManagedObject adapter) {
-
- if(adapter==null || adapter.getPojo()==null) {
- return null;
+ if(adapter==null) {
+ return EntityState.not_Persistable;
}
+ return _entityState(adapter.getSpecification(), adapter.getPojo());
+ }
+
+ static EntityState _entityState(ObjectSpecification spec, Object pojo) {
- val spec = adapter.getSpecification();
- if(!spec.isEntity()) {
+ if(spec==null || pojo==null || !spec.isEntity()) {
return EntityState.not_Persistable;
}
@@ -578,8 +580,9 @@ public interface ManagedObject {
throw _Exceptions.unrecoverable("Entity types must have an EntityFacet");
}
- return entityFacet.getEntityState(adapter.getPojo());
+ return entityFacet.getEntityState(pojo);
}
+
static boolean _isDestroyed(ManagedObject adapter) {
return _entityState(adapter) == EntityState.persistable_Destroyed;
@@ -598,17 +601,14 @@ public interface ManagedObject {
return;
}
- val oid = ManagedObject._identify(second);
-
- if(oid.isTransient()) {
-
- // TODO: I've never seen this exception, and in any case DataNucleus supports persistence-by-reachability; so probably not required
+ val entityState = _entityState(second);
+ if(entityState != EntityState.persistable_Attached) {
throw _Exceptions.illegalArgument(
"can't set a reference to a transient object [%s] from a persistent one [%s]",
second,
first.titleString(null));
}
-
+
}
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshall.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshall.java
index cded897..b7bd6e8 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshall.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshall.java
@@ -37,14 +37,15 @@ public class OidMarshallerTest_marshall {
@Test
public void rootOid() {
- final String marshal = oidMarshaller.marshal(Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "123"));
+ final String marshal = oidMarshaller.marshal(Oid.Factory.of(ObjectSpecId.of("CUS"), "123"));
assertThat(marshal, equalTo("CUS:123"));
}
- @Test
- public void rootOid_transient() {
- final String marshal = oidMarshaller.marshal(Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "123"));
- assertThat(marshal, equalTo("!CUS:123"));
- }
+//deprecated
+// @Test
+// public void rootOid_transient() {
+// final String marshal = oidMarshaller.marshal(Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "123"));
+// assertThat(marshal, equalTo("!CUS:123"));
+// }
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
index 2201d47..5124762 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
@@ -69,7 +69,6 @@ public class OidMarshallerTest_unmarshal {
final String oidStr = "CUS:123";
final RootOid rootOid = oidMarshaller.unmarshal(oidStr, RootOid.class);
- assertThat(rootOid.isTransient(), is(false));
assertThat(rootOid.getObjectSpecId(), is(ObjectSpecId.of("CUS")));
assertThat(rootOid.getIdentifier(), is("123"));
@@ -82,7 +81,6 @@ public class OidMarshallerTest_unmarshal {
final String oidStr = "com.planchase.ClassName:8";
final RootOid rootOid = oidMarshaller.unmarshal(oidStr, RootOid.class);
- assertThat(rootOid.isTransient(), is(false));
assertThat(rootOid.getObjectSpecId(), is(ObjectSpecId.of("com.planchase.ClassName")));
assertThat(rootOid.getIdentifier(), is("8"));
@@ -104,7 +102,6 @@ public class OidMarshallerTest_unmarshal {
final String oidStr = "!CUS:123";
final RootOid rootOid = oidMarshaller.unmarshal(oidStr, RootOid.class);
- assertThat(rootOid.isTransient(), is(true));
assertThat(rootOid.getObjectSpecId(), is(ObjectSpecId.of("CUS")));
assertThat(rootOid.getIdentifier(), is("123"));
@@ -117,7 +114,6 @@ public class OidMarshallerTest_unmarshal {
final String oidStr = "CUS:123$items";
final ParentedOid collectionOid = oidMarshaller.unmarshal(oidStr, ParentedOid.class);
- assertThat(collectionOid.isTransient(), is(false));
assertThat(collectionOid.getParentOid(), is(oidMarshaller.unmarshal("CUS:123", RootOid.class)));
assertThat(collectionOid.getName(), is("items"));
@@ -130,7 +126,6 @@ public class OidMarshallerTest_unmarshal {
final String oidStr = "!CUS:123$items";
final ParentedOid collectionOid = oidMarshaller.unmarshal(oidStr, ParentedOid.class);
- assertThat(collectionOid.isTransient(), is(true));
assertThat(collectionOid.getParentOid(), is(oidMarshaller.unmarshal("!CUS:123", RootOid.class)));
assertThat(collectionOid.getName(), is("items"));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidVersionTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidVersionTest.java
index fd2377a..fda7726 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidVersionTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidVersionTest.java
@@ -36,32 +36,24 @@ public class OidVersionTest {
@Test
public void whenEquivalent() throws Exception {
- oid1 = Oid.Factory.persistentOf(cusObjectSpecId, "123");
- oid2 = Oid.Factory.persistentOf(cusObjectSpecId, "123");
+ oid1 = Oid.Factory.of(cusObjectSpecId, "123");
+ oid2 = Oid.Factory.of(cusObjectSpecId, "123");
assertThat(oid1, is(equalTo(oid2)));
}
@Test
public void whenNotEquivalentById() throws Exception {
- oid1 = Oid.Factory.persistentOf(cusObjectSpecId, "123");
- oid2 = Oid.Factory.persistentOf(cusObjectSpecId, "124");
+ oid1 = Oid.Factory.of(cusObjectSpecId, "123");
+ oid2 = Oid.Factory.of(cusObjectSpecId, "124");
assertThat(oid1, is(not(equalTo(oid2))));
}
@Test
public void whenNotEquivalentByObjectSpecId() throws Exception {
- oid1 = Oid.Factory.persistentOf(cusObjectSpecId, "123");
- oid2 = Oid.Factory.persistentOf(ordObjectSpecId, "123");
-
- assertThat(oid1, is(not(equalTo(oid2))));
- }
-
- @Test
- public void whenNotEquivalentByState() throws Exception {
- oid1 = Oid.Factory.persistentOf(cusObjectSpecId, "123");
- oid2 = Oid.Factory.transientOf(cusObjectSpecId, "123");
+ oid1 = Oid.Factory.of(cusObjectSpecId, "123");
+ oid2 = Oid.Factory.of(ordObjectSpecId, "123");
assertThat(oid1, is(not(equalTo(oid2))));
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java
index 7fd4921..d2f1fd3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java
@@ -29,17 +29,17 @@ public class RootOidDefaultTest_valueSemantics_whenPersistent extends ValueTypeC
@Override
protected List<RootOid> getObjectsWithSameValue() {
return Arrays.asList(
- Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "123"),
- Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "123"),
- Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "123"));
+ Oid.Factory.of(ObjectSpecId.of("CUS"), "123"),
+ Oid.Factory.of(ObjectSpecId.of("CUS"), "123"),
+ Oid.Factory.of(ObjectSpecId.of("CUS"), "123"));
}
@Override
protected List<RootOid> getObjectsWithDifferentValue() {
return Arrays.asList(
- Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "123"),
- Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "124"),
- Oid.Factory.persistentOf(ObjectSpecId.of("CUX"), "123"));
+ //Oid.Factory.of(ObjectSpecId.of("CUS"), "123"),
+ Oid.Factory.of(ObjectSpecId.of("CUS"), "124"),
+ Oid.Factory.of(ObjectSpecId.of("CUX"), "123"));
}
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java
deleted file mode 100644
index 327d03c..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.isis.core.metamodel.adapter.oid;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.unittestsupport.value.ValueTypeContractTestAbstract;
-
-public class RootOidDefaultTest_valueSemantics_whenTransient extends ValueTypeContractTestAbstract<RootOid> {
-
- @Override
- protected List<RootOid> getObjectsWithSameValue() {
- return Arrays.asList(
- Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "123"),
- Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "123"),
- Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "123")
- );
- }
-
- @Override
- protected List<RootOid> getObjectsWithDifferentValue() {
- return Arrays.asList(
- Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "123"),
- Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "124"),
- Oid.Factory.transientOf(ObjectSpecId.of("CUX"), "123"));
- }
-
-}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidTest_create.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidTest_create.java
index 50be4c8..3e0d916 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidTest_create.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidTest_create.java
@@ -34,8 +34,6 @@ public class RootOidTest_create {
RootOid oid = Oid.Factory.persistentOf(objectSpecId, "123");
assertThat(oid.getObjectSpecId(), is(objectSpecId));
assertThat(oid.getIdentifier(), is("123"));
-
- assertThat(oid.isTransient(), is(false));
}
@Test
@@ -44,8 +42,6 @@ public class RootOidTest_create {
RootOid oid = Oid.Factory.transientOf(objectSpecId, "123");
assertThat(oid.getObjectSpecId(), is(objectSpecId));
assertThat(oid.getIdentifier(), is("123"));
-
- assertThat(oid.isTransient(), is(true));
}
@@ -55,8 +51,6 @@ public class RootOidTest_create {
RootOid oid = Oid.Factory.persistentOf(objectSpecId, "123");
assertThat(oid.getObjectSpecId(), is(objectSpecId));
assertThat(oid.getIdentifier(), is("123"));
-
- assertThat(oid.isTransient(), is(false));
}
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index 27bb912..8db11de 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -116,19 +116,6 @@ public final class PojoAdapter implements ObjectAdapter {
return specification;
}
- // -- getAggregateRoot
-
-// @Override
-// public ObjectAdapter getAggregateRoot() {
-// if(!isParentedCollection()) {
-// return this;
-// }
-// val collectionOid = (ParentedOid) oid;
-// val rootOid = collectionOid.getParentOid();
-// val rootAdapter = persistenceSession.adapterFor(rootOid);
-// return rootAdapter;
-// }
-
@Override
public String toString() {
final ToString str = new ToString(this);
@@ -165,9 +152,10 @@ public final class PojoAdapter implements ObjectAdapter {
// this is an approximate re-implementation...
final Oid oid = getOid();
if(oid != null) {
- if(oid.isPersistent()) return "P";
- if(oid.isTransient()) return "T";
- if(oid.isViewModel()) return "V";
+ return "B"; // bookmark-able
+// if(oid.isPersistent()) return "P";
+// if(oid.isTransient()) return "T";
+// if(oid.isViewModel()) return "V";
}
return "S"; // standalone adapter (value)
}
diff --git a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java
index f830ce3..ad60571 100644
--- a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java
+++ b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java
@@ -32,6 +32,7 @@ import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.adapter.oid.PojoRecreationException;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.runtime.context.session.RuntimeContext;
@@ -84,7 +85,8 @@ class ObjectAdapterContext_ObjectAdapterByIdProvider {
* If the version differs, then a {@link ConcurrencyException} is thrown.
*
* <p>
- * ALSO, even if a {@link ConcurrencyException}, then the provided {@link RootOid oid}'s {@link Version version}
+ * ALSO, even if a {@link ConcurrencyException}, then the provided {@link RootOid oid}'s
+ * {@link Version version}
* will be {@link RootOid#setVersion(Version) set} to the current
* value. This allows the client to retry if they wish.
*
@@ -121,10 +123,10 @@ class ObjectAdapterContext_ObjectAdapterByIdProvider {
// else recreate
try {
final Object pojo;
- if(rootOid.isTransient() || rootOid.isViewModel()) {
- pojo = recreatePojoTransientOrViewModel(rootOid);
- } else {
+ if(spec.isEntity()) {
pojo = persistenceSession.fetchPersistentPojo(rootOid);
+ } else {
+ pojo = recreatePojoTransientOrViewModel(rootOid);
}
adapter = objectAdapterContext.recreatePojo(rootOid, pojo);
} catch(ObjectNotFoundException ex) {
@@ -138,51 +140,51 @@ class ObjectAdapterContext_ObjectAdapterByIdProvider {
}
- public Map<RootOid,ObjectAdapter> adaptersFor(final Stream<RootOid> rootOids) {
-
- final Map<RootOid, ObjectAdapter> adapterByOid = _Maps.newLinkedHashMap();
-
- List<RootOid> notYetLoadedOids = _Lists.newArrayList();
-
- rootOids.forEach(rootOid->{
- // attempt to locate adapter for the Oid
- ObjectAdapter adapter = null;
- // handle view models or transient
- if (rootOid.isTransient() || rootOid.isViewModel()) {
- final Object pojo = recreatePojoTransientOrViewModel(rootOid);
- adapter = objectAdapterContext.recreatePojo(rootOid, pojo);
- }
- if (adapter != null) {
- adapterByOid.put(rootOid, adapter);
- } else {
- // persistent oid, to load in bulk
- notYetLoadedOids.add(rootOid);
- }
- });
-
- // recreate, in bulk, all those not yet loaded
- final Map<RootOid, Object> pojoByOid = persistenceSession.fetchPersistentPojos(notYetLoadedOids);
- for (Map.Entry<RootOid, Object> entry : pojoByOid.entrySet()) {
- final RootOid rootOid = entry.getKey();
- final Object pojo = entry.getValue();
- if(pojo != null) {
- ObjectAdapter adapter;
- try {
- adapter = objectAdapterContext.recreatePojo(rootOid, pojo);
- adapterByOid.put(rootOid, adapter);
- } catch(ObjectNotFoundException ex) {
- throw ex; // just rethrow
- } catch(RuntimeException ex) {
- throw new PojoRecreationException(rootOid, ex);
- }
- } else {
- // null indicates it couldn't be loaded
- // do nothing here...
- }
- }
-
- return adapterByOid;
- }
+// public Map<RootOid,ObjectAdapter> adaptersFor(final Stream<RootOid> rootOids) {
+//
+// final Map<RootOid, ObjectAdapter> adapterByOid = _Maps.newLinkedHashMap();
+//
+// List<RootOid> notYetLoadedOids = _Lists.newArrayList();
+//
+// rootOids.forEach(rootOid->{
+// // attempt to locate adapter for the Oid
+// ObjectAdapter adapter = null;
+// // handle view models or transient
+// if (rootOid.isTransient() || rootOid.isViewModel()) {
+// final Object pojo = recreatePojoTransientOrViewModel(rootOid);
+// adapter = objectAdapterContext.recreatePojo(rootOid, pojo);
+// }
+// if (adapter != null) {
+// adapterByOid.put(rootOid, adapter);
+// } else {
+// // persistent oid, to load in bulk
+// notYetLoadedOids.add(rootOid);
+// }
+// });
+//
+// // recreate, in bulk, all those not yet loaded
+// final Map<RootOid, Object> pojoByOid = persistenceSession.fetchPersistentPojos(notYetLoadedOids);
+// for (Map.Entry<RootOid, Object> entry : pojoByOid.entrySet()) {
+// final RootOid rootOid = entry.getKey();
+// final Object pojo = entry.getValue();
+// if(pojo != null) {
+// ObjectAdapter adapter;
+// try {
+// adapter = objectAdapterContext.recreatePojo(rootOid, pojo);
+// adapterByOid.put(rootOid, adapter);
+// } catch(ObjectNotFoundException ex) {
+// throw ex; // just rethrow
+// } catch(RuntimeException ex) {
+// throw new PojoRecreationException(rootOid, ex);
+// }
+// } else {
+// // null indicates it couldn't be loaded
+// // do nothing here...
+// }
+// }
+//
+// return adapterByOid;
+// }
// -- HELPER
@@ -190,11 +192,11 @@ class ObjectAdapterContext_ObjectAdapterByIdProvider {
final ObjectSpecification spec =
specificationLoader.lookupBySpecIdElseLoad(rootOid.getObjectSpecId());
final Object pojo;
- if(rootOid.isViewModel()) {
+ if(rootOid.isTransient()) {
+ pojo = objectAdapterContext.instantiateAndInjectServices(spec);
+ } else {
final String memento = rootOid.getIdentifier();
pojo = recreateViewModel(spec, memento);
- } else {
- pojo = objectAdapterContext.instantiateAndInjectServices(spec);
}
_Assert.assertFalse("Pojo most likely should not be an Oid", (pojo instanceof Oid));
diff --git a/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java b/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
index 4f2ee90..79bd702 100644
--- a/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
+++ b/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
@@ -58,7 +58,7 @@ public class PojoAdapterBuilder {
PERSISTENT {
@Override
RootOid createOid(ObjectSpecId objectSpecId, String identifier) {
- return Factory.persistentOf(objectSpecId, identifier);
+ return Factory.of(objectSpecId, identifier);
}
},
VALUE {