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 2019/02/11 09:34:45 UTC
[isis] branch 2033-IoC updated: ISIS-2033: lets UniversalOid no
longer inherit from RootOid
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch 2033-IoC
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/2033-IoC by this push:
new f7d8e1a ISIS-2033: lets UniversalOid no longer inherit from RootOid
f7d8e1a is described below
commit f7d8e1a8cb137129623329e39aa320a3cd6889fb
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Feb 11 10:34:34 2019 +0100
ISIS-2033: lets UniversalOid no longer inherit from RootOid
Task-Url: https://issues.apache.org/jira/browse/ISIS-2033
---
.../core/metamodel/adapter/oid/Oid_Universal.java | 118 ++++++++++---------
.../core/metamodel/adapter/oid/UniversalOid.java | 39 +++----
.../context/managers}/AuthorityDescriptor.java | 2 +-
.../context/managers}/ContextHandler.java | 8 +-
.../context/managers}/ContextManager.java | 2 +-
.../system/context/managers/Converters.java | 79 +++++++++++++
.../managers/Converters_Implementations.java | 128 +++++++++++++++++++++
.../context/managers}/ManagedObjectResolver.java | 11 +-
.../context/managers}/UniversalContextManager.java | 6 +-
.../managers}/UniversalObjectManager.java | 114 +++---------------
.../persistence/IsisLegacyJdoContextHandler.java | 6 +-
.../adaptermanager/ObjectAdapterContext.java | 2 +-
...ctAdapterContext_ObjectAdapterByIdProvider.java | 31 ++---
...ObjectAdapterContext_ObjectAdapterProvider.java | 2 +-
.../ObjectAdapterContext_OidProviders.java | 77 +++++++------
.../wicket/ConverterForObjectAdapter.java | 20 ++--
.../model/mementos/ObjectAdapterMemento.java | 55 +++++----
.../wicket/model/models/EntityCollectionModel.java | 13 ++-
.../modules/spring/SpringDataJPADemoHandler.java | 6 +-
19 files changed, 433 insertions(+), 286 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Universal.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Universal.java
index 4f33110..2bbd783 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Universal.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Universal.java
@@ -19,37 +19,48 @@
package org.apache.isis.core.metamodel.adapter.oid;
-import java.io.IOException;
import java.net.URI;
+import java.util.ArrayList;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.commons.internal.debug._Probe;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.commons.internal.uri._URI;
-import org.apache.isis.core.commons.encoding.DataOutputExtended;
import org.apache.isis.core.metamodel.adapter.version.Version;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.schema.common.v1.OidDto;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
-import lombok.Setter;
import lombok.val;
@RequiredArgsConstructor(staticName="of")
final class Oid_Universal implements UniversalOid {
- private final static long serialVersionUID = 1L;
- private final static _Probe probe = _Probe.unlimited().label("Oid_Universal");
+ //private final static long serialVersionUID = 1L;
+ //private final static _Probe probe = _Probe.unlimited().label("Oid_Universal");
- private final URI universalId;
- @Getter @Setter private Version version;
+ @Getter(onMethod=@__({@Override})) private final URI objectUri;
+
+ @Getter(lazy=true, onMethod=@__({@Override}))
+ private final Version version = parseVersion();
+
+ @Getter(lazy=true, onMethod=@__({@Override}))
+ private final ObjectSpecId objectSpecId = parseObjectSpecId();
+
+ @Override
+ public String getIdentifier() {
+ return getObjectUri().getQuery();
+ }
@Override
- public ObjectSpecId getObjectSpecId() {
+ public String toString() {
+ return enString();
+ }
+
+ // -- HELPER
+
+ private ObjectSpecId parseObjectSpecId() {
- val path = universalId().getPath();
+ val path = getObjectUri().getPath();
val firstPathEntry = _Strings.splitThenStream(path, "/")
.filter(_Strings::isNotEmpty)
@@ -58,83 +69,78 @@ final class Oid_Universal implements UniversalOid {
return ObjectSpecId.of(firstPathEntry);
}
-
- @Override
- public String getIdentifier() {
- return universalId().getQuery();
+
+ private Version parseVersion() {
+ val versionEncoded = getObjectUri().getFragment();
+ if(_Strings.isEmpty(versionEncoded)) {
+ return null;
+ }
+
+ val parts = new ArrayList<String>(3);
+ _Strings.splitThenStream(versionEncoded, ":") // see org.apache.isis.core.metamodel.adapter.oid.Oid_Marshaller.SEPARATOR
+ .forEach(parts::add);
+
+ final String versionSequence = parts.get(0);
+ final String versionUser = parts.get(1);
+ final String versionUtcTimestamp = parts.get(2);
+ final Version version = Version.Factory.parse(versionSequence, versionUser, versionUtcTimestamp);
+ return version;
}
+
- @Override
- public Bookmark asBookmark() {
+ //@Override
+ private Bookmark asBookmark() {
//TODO [2033] bad place to do this here, change API ?
//probe.println("NOT IMPLEMENTED: 'asBookmark()'");
final String objectType = getObjectSpecId().asString();
//asBookmarkObjectState().getCode() + rootOid.getObjectSpecId().asString();
- final String identifier = universalId().getQuery();
+ final String identifier = getObjectUri().getQuery();
//rootOid.getIdentifier();
return new Bookmark(objectType, identifier);
}
- @Override
- public OidDto asOidDto() {
- _Exceptions.throwNotImplemented();
-
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public String enString() {
- if(version==null) {
+ //@Override
+ private String enString() {
+ val version = getVersion();
+ if(Version.isEmpty(version)) {
return enStringNoVersion();
}
- return _URI.uriBuilder(universalId)
+ val plain = _URI.uriBuilder(objectUri)
.fragment(version.enString())
.build()
.toURI()
.toString();
+
+ return plain;
}
- @Override
- public String enStringNoVersion() {
- return universalId.toString();
+ //@Override
+ private String enStringNoVersion() {
+ return objectUri.toString();
}
- @Override
- public boolean isTransient() {
+ //@Override
+ private boolean isTransient() {
return false;
}
- @Override
- public boolean isViewModel() {
+ //@Override
+ private boolean isViewModel() {
return false;
}
- @Override
- public boolean isPersistent() {
+ //@Override
+ private boolean isPersistent() {
return true;
}
- @Override
- public Oid copy() {
- return of(universalId());
- }
-
- @Override
- public void encode(DataOutputExtended outputStream) throws IOException {
- _Exceptions.throwNotImplemented();
-
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public URI universalId() {
- return universalId;
+ //@Override
+ private UniversalOid copy() {
+ return of(getObjectUri());
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/UniversalOid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/UniversalOid.java
index 85cadb3..baf82cb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/UniversalOid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/UniversalOid.java
@@ -1,35 +1,24 @@
package org.apache.isis.core.metamodel.adapter.oid;
import java.net.URI;
-import java.net.URISyntaxException;
-import org.apache.isis.commons.internal.base._Either;
-import org.apache.isis.commons.internal.uri._URI;
+import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import lombok.val;
+public interface UniversalOid /*extends RootOid*/ {
-public interface UniversalOid extends RootOid {
+ URI getObjectUri();
- URI universalId();
-
- static _Either<UniversalOid, URISyntaxException> parseUri(String uriString) {
-
- if(!_URI.isUoid(uriString)) {
-
- val ex = new URISyntaxException(uriString, "Does not match _URI#isUoid.");
- return _Either.right(ex);
- }
-
- try {
- val uri = new URI(uriString);
-
- return _Either.left(Oid.Factory.universal(uri));
-
- } catch (URISyntaxException ex) {
-
- return _Either.right(ex);
- }
-
+ // -- FROM (ROOT) OID
+
+ ObjectSpecId getObjectSpecId();
+ String getIdentifier();
+ Version getVersion();
+
+ // -- FACTORIES
+
+ static UniversalOid of(URI uri) {
+ return Oid.Factory.universal(uri);
}
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/AuthorityDescriptor.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/AuthorityDescriptor.java
similarity index 93%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/AuthorityDescriptor.java
rename to core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/AuthorityDescriptor.java
index 39fc8a4..c36203c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/AuthorityDescriptor.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/AuthorityDescriptor.java
@@ -1,4 +1,4 @@
-package org.apache.isis.core.runtime.contextmanger;
+package org.apache.isis.core.runtime.system.context.managers;
import org.apache.isis.commons.internal.uri._URI;
import org.apache.isis.commons.internal.uri._URI.ContainerType;
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/ContextHandler.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/ContextHandler.java
similarity index 76%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/ContextHandler.java
rename to core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/ContextHandler.java
index 29defff..719b946 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/ContextHandler.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/ContextHandler.java
@@ -1,4 +1,4 @@
-package org.apache.isis.core.runtime.contextmanger;
+package org.apache.isis.core.runtime.system.context.managers;
import java.net.URI;
@@ -18,10 +18,10 @@ public interface ContextHandler extends ManagedObjectResolver {
/**
* To support chain-of-responsibility pattern.
- * @param uri
- * @return whether this manager sees itself responsible to manage objects represented by given uri
+ * @param objectUri
+ * @return whether this manager sees itself responsible to manage objects represented by given objectUri
*/
- boolean recognizes(URI uri);
+ boolean recognizes(URI objectUri);
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/ContextManager.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/ContextManager.java
similarity index 86%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/ContextManager.java
rename to core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/ContextManager.java
index 0e48200..ec788ca 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/ContextManager.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/ContextManager.java
@@ -1,4 +1,4 @@
-package org.apache.isis.core.runtime.contextmanger;
+package org.apache.isis.core.runtime.system.context.managers;
import java.util.Optional;
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/Converters.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/Converters.java
new file mode 100644
index 0000000..244c8f1
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/Converters.java
@@ -0,0 +1,79 @@
+package org.apache.isis.core.runtime.system.context.managers;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.annotation.Nullable;
+
+import org.apache.isis.commons.internal.base._Either;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+
+import lombok.val;
+
+/**
+ *
+ * @since 2.0.0-M3
+ *
+ */
+public final class Converters {
+
+ public static FromUriConverter fromUriConverter() {
+ return Converters_Implementations.fromUriConverter;
+ }
+
+ public static ToUriConverter toUriConverter() {
+ return Converters_Implementations.toUriConverter;
+ }
+
+ // -- FROM URI CONVERTER
+
+ public static interface FromUriConverter {
+ String encodeToString(@Nullable URI objectUri);
+ String encodeToBase64(URI objectUri);
+ RootOid toRootOid(@Nullable URI objectUri);
+ }
+
+ // -- TO URI CONVERTER
+
+ public static interface ToUriConverter {
+
+ _Either<URI, URISyntaxException> decodeFromString(String uriString);
+ _Either<URI, URISyntaxException> decodeFromBase64(String base64EncodedUriString);
+
+ default URI decodeFromStringElseFail(String encoded) {
+ val uriOrError = decodeFromString(encoded);
+ if(uriOrError.isRight()) {
+
+ // TODO [2033] legacy support if required could be ...
+ // final RootOid rootOid = RootOid.deStringEncoded(value);
+
+ throw _Exceptions.unrecoverable("Object-URI decoding failed.", uriOrError.rightIfAny());
+ }
+ return uriOrError.leftIfAny();
+ }
+
+ default URI toURI(ObjectSpecId specId, String identifier) {
+ val objectManager = UniversalObjectManager.current();
+ val authority = objectManager.authorityForElseFail(specId);
+ val uri = authority.toUoidDtoBuilder(specId)
+ .query(identifier)
+ .build()
+ .toURI();
+
+ return uri;
+ }
+
+ URI toURI(RootOid rootOid);
+
+
+
+ }
+
+ // --
+
+
+
+
+}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/Converters_Implementations.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/Converters_Implementations.java
new file mode 100644
index 0000000..47bfa08
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/Converters_Implementations.java
@@ -0,0 +1,128 @@
+package org.apache.isis.core.runtime.system.context.managers;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.apache.isis.commons.internal.base._Bytes;
+import org.apache.isis.commons.internal.base._Either;
+import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.commons.internal.uri._URI;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.adapter.oid.UniversalOid;
+import org.apache.isis.core.runtime.system.context.managers.Converters.FromUriConverter;
+import org.apache.isis.core.runtime.system.context.managers.Converters.ToUriConverter;
+
+import lombok.val;
+
+/**
+ *
+ * @since 2.0.0-M3
+ *
+ */
+final class Converters_Implementations {
+
+ private static class FromUriConverterDefault implements FromUriConverter {
+
+ @Override
+ public String encodeToString(URI objectUri) {
+ if (objectUri == null) {
+ return null;
+ }
+ return objectUri.toString();
+ }
+
+ @Override
+ public String encodeToBase64(URI objectUri) {
+ if (objectUri == null) {
+ return null;
+ }
+
+ val raw = _Strings.toBytes(encodeToString(objectUri), UTF_8);
+ val encoded = _Bytes.asUrlBase64.apply(raw);
+ return _Strings.ofBytes(encoded, UTF_8);
+ }
+
+
+ @Override
+ public RootOid toRootOid(URI objectUri) {
+ if (objectUri == null) {
+ return null;
+ }
+
+ val uoid = UniversalOid.of(objectUri);
+ val specId = uoid.getObjectSpecId();
+ val identifier = uoid.getIdentifier();
+ val versionEncoded = uoid.getVersion();
+
+ //FIXME [2033] no version support
+ return Oid.Factory.persistentOf(specId, identifier);
+ }
+
+ }
+
+ private static class ToUriConverterDefault implements ToUriConverter {
+
+ @Override
+ public _Either<URI, URISyntaxException> decodeFromString(String uriString) {
+
+ if(!_URI.isUoid(uriString)) {
+
+ val ex = new URISyntaxException(uriString, "Does not match _URI#isUoid.");
+ return _Either.right(ex);
+ }
+
+ try {
+ val uri = new URI(uriString);
+
+ return _Either.left(uri);
+
+ } catch (URISyntaxException ex) {
+
+ return _Either.right(ex);
+ }
+
+ }
+
+ @Override
+ public _Either<URI, URISyntaxException> decodeFromBase64(String base64) {
+
+ val base64Bytes = _Strings.toBytes(base64, UTF_8);
+ val plainBytes = _Bytes.ofUrlBase64.apply(base64Bytes);
+ val plain = _Strings.ofBytes(plainBytes, UTF_8);
+
+ return decodeFromString(plain);
+ }
+
+ @Override
+ public URI toURI(RootOid rootOid) {
+
+ val specId = rootOid.getObjectSpecId();
+ val identifier = rootOid.getIdentifier();
+ val version = rootOid.getVersion();
+
+ val objectManager = UniversalObjectManager.current();
+ val authority = objectManager.authorityForElseFail(specId);
+
+ val uriBuilder = authority.toUoidDtoBuilder(specId)
+ .query(identifier);
+
+ if(version!=null) {
+ uriBuilder.fragment(version.enString());
+ }
+
+ return uriBuilder
+ .build()
+ .toURI();
+ }
+
+ }
+
+ // -- STATIC INSTANCES
+
+ final static FromUriConverter fromUriConverter = new FromUriConverterDefault();
+ final static ToUriConverter toUriConverter = new ToUriConverterDefault();
+
+}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/ManagedObjectResolver.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/ManagedObjectResolver.java
similarity index 83%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/ManagedObjectResolver.java
rename to core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/ManagedObjectResolver.java
index 5ba8694..89ffdfc 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/ManagedObjectResolver.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/ManagedObjectResolver.java
@@ -1,4 +1,4 @@
-package org.apache.isis.core.runtime.contextmanger;
+package org.apache.isis.core.runtime.system.context.managers;
import java.net.URI;
import java.util.Optional;
@@ -24,16 +24,15 @@ public interface ManagedObjectResolver {
* @param managedObject
* @return identifier
*/
- URI identifierOf(ManagedObject managedObject);
-
+ URI uriOf(ManagedObject managedObject);
/**
* Retrieve a reference to the ManagedObject as identified by the identifier.
* @param specId
- * @param identifier
+ * @param uri
* @return
*/
- Instance<ManagedObject> resolve(ObjectSpecId specId, URI identifier);
+ Instance<ManagedObject> resolve(ObjectSpecId specId, URI uri);
/**
@@ -44,7 +43,7 @@ public interface ManagedObjectResolver {
*/
default Instance<ManagedObject> resolve(UniversalOid universalOid) {
val spec = universalOid.getObjectSpecId();
- return resolve(spec, universalOid.universalId());
+ return resolve(spec, universalOid.getObjectUri());
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/UniversalContextManager.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/UniversalContextManager.java
similarity index 92%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/UniversalContextManager.java
rename to core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/UniversalContextManager.java
index 4972e78..e76359c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/contextmanger/UniversalContextManager.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/UniversalContextManager.java
@@ -1,4 +1,4 @@
-package org.apache.isis.core.runtime.contextmanger;
+package org.apache.isis.core.runtime.system.context.managers;
import static org.apache.isis.commons.internal.base._With.requires;
@@ -22,7 +22,7 @@ public class UniversalContextManager implements ContextManager {
@Inject Instance<ContextHandler> contextHandlers;
@Override
- public URI identifierOf(ManagedObject managedObject) {
+ public URI uriOf(ManagedObject managedObject) {
requires(managedObject, "managedObject");
@@ -33,7 +33,7 @@ public class UniversalContextManager implements ContextManager {
throw _Exceptions.unrecoverable(msg);
}
- val uri = resolver.identifierOf(managedObject);
+ val uri = resolver.uriOf(managedObject);
return uri;
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/UniversalObjectManager.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/UniversalObjectManager.java
similarity index 52%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/UniversalObjectManager.java
rename to core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/UniversalObjectManager.java
index 25d4094..af72db0 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/UniversalObjectManager.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/managers/UniversalObjectManager.java
@@ -1,24 +1,18 @@
-package org.apache.isis.core.runtime.system.persistence;
+package org.apache.isis.core.runtime.system.context.managers;
import static org.apache.isis.commons.internal.base._NullSafe.stream;
-import java.net.URISyntaxException;
+import java.net.URI;
import java.util.stream.Stream;
-import javax.annotation.Nullable;
-
-import org.apache.isis.commons.internal.base._Either;
import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.debug._Probe;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.adapter.oid.UniversalOid;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.runtime.contextmanger.AuthorityDescriptor;
-import org.apache.isis.core.runtime.contextmanger.ContextManager;
import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.session.IsisSession;
@@ -39,91 +33,31 @@ public interface UniversalObjectManager {
// -- INTERFACE
- OidEncoder getOidEncoder();
- OidDecoder getOidDecoder();
-
AuthorityDescriptor authorityForElseFail(ObjectSpecId specId);
- Stream<ObjectAdapter> resolve(Stream<UniversalOid> uoids);
- ObjectAdapter resolve(UniversalOid uoid);
+ Stream<ObjectAdapter> resolve(Stream<URI> objectUris);
+ ObjectAdapter resolve(URI objectUri);
// -- RESULT CONTAINER
@Value(staticConstructor="of")
static final class ResolveResult {
- @Getter private final UniversalOid uoid;
+ @Getter private final URI objectUri;
@Getter private final ManagedObject managedObject;
public ObjectAdapter toObjectAdapter(IsisSession isisSession) {
val pojo = managedObject.getPojo();
- return pojo!=null
- ? PojoAdapter.of(pojo, uoid, isisSession)
- : null;
- }
-
- }
-
- // -- OID ENCODER / DECODER
-
- static interface OidEncoder {
- String encodeToString(@Nullable UniversalOid oid);
-
- default String encodeToStringWithLegacySupport(@Nullable Oid oid) {
- if (oid == null) {
- return null;
- }
- if(oid instanceof UniversalOid) {
- return encodeToString((UniversalOid) oid);
+ if(pojo==null) {
+ return null;
}
- // legacy support ...
- _Probe.warnNotImplementedYet("instead we should convert a concrete RootOid to a UniversalOid");
- // FIXME [2033] instead we should convert a concrete RootOid to a UniversalOid
- return oid.enString();
+ val converter = Converters.fromUriConverter();
+ val rootOid = converter.toRootOid(objectUri);
+ return PojoAdapter.of(pojo, rootOid, isisSession);
}
- }
-
- static interface OidDecoder {
- _Either<UniversalOid, URISyntaxException> decodeFromString(String encoded);
- default UniversalOid decodeFromStringElseFail(String encoded) {
- val uoidOrError = decodeFromString(encoded);
- if(uoidOrError.isRight()) {
-
- // TODO [2033] legacy support if required could be ...
- // final RootOid rootOid = RootOid.deStringEncoded(value);
-
- throw _Exceptions.unrecoverable("Oid decoding failed.", uoidOrError.rightIfAny());
- }
- return uoidOrError.leftIfAny();
- }
}
- // --
- static class Codecs {
-
- private static class UniversalOidEncoder implements OidEncoder {
-
- @Override
- public String encodeToString(@Nullable UniversalOid oid) {
- if (oid == null) {
- return null;
- }
- return oid.enString();
- }
-
- }
-
- private static class UniversalOidDecoder implements OidDecoder {
-
- @Override
- public _Either<UniversalOid, URISyntaxException> decodeFromString(String encoded) {
- return UniversalOid.parseUri(encoded);
- }
-
- }
-
- }
// -- SAMPLE - TODO [2033] just for proof of concept, needs refinement
@@ -138,20 +72,20 @@ public interface UniversalObjectManager {
@Override
- public Stream<ObjectAdapter> resolve(Stream<UniversalOid> uoids) {
+ public Stream<ObjectAdapter> resolve(Stream<URI> objectUris) {
val contextManager = this.contextManager.get();
val isisSession = IsisSession.currentIfAny();
probe.println("resolve multiple ...");
- return stream(uoids)
- .flatMap(uoid->{
+ return stream(objectUris)
+ .flatMap(objectUri->{
- probe.println(1, "resolving %s", uoid.enString());
+ probe.println(1, "resolving %s", objectUri);
- val instance = contextManager.resolve(uoid);
+ val instance = contextManager.resolve(UniversalOid.of(objectUri));
return instance.stream()
- .map(managedObject->ResolveResult.of(uoid, managedObject)
+ .map(managedObject->ResolveResult.of(objectUri, managedObject)
.toObjectAdapter(isisSession))
.filter(_NullSafe::isPresent);
})
@@ -159,15 +93,15 @@ public interface UniversalObjectManager {
}
@Override
- public ObjectAdapter resolve(UniversalOid uoid) {
+ public ObjectAdapter resolve(URI objectUri) {
val contextManager = this.contextManager.get();
- val instance = contextManager.resolve(uoid);
+ val instance = contextManager.resolve(UniversalOid.of(objectUri));
if(instance.isResolvable()) {
val managedObject = instance.get();
val isisSession = IsisSession.currentIfAny();
- return ResolveResult.of(uoid, managedObject).toObjectAdapter(isisSession);
+ return ResolveResult.of(objectUri, managedObject).toObjectAdapter(isisSession);
} else if(instance.isAmbiguous()) {
@@ -183,16 +117,6 @@ public interface UniversalObjectManager {
}
@Override
- public OidEncoder getOidEncoder() {
- return new Codecs.UniversalOidEncoder();
- }
-
- @Override
- public OidDecoder getOidDecoder() {
- return new Codecs.UniversalOidDecoder();
- }
-
- @Override
public AuthorityDescriptor authorityForElseFail(ObjectSpecId specId) {
// given the specId, try to resolve 'containerType', 'contextType' and 'contextId'
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLegacyJdoContextHandler.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLegacyJdoContextHandler.java
index 7fa8ab3..b4ddf30 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLegacyJdoContextHandler.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/IsisLegacyJdoContextHandler.java
@@ -22,9 +22,9 @@ import org.apache.isis.core.metamodel.spec.ManagedObject.SimpleManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.runtime.contextmanger.AuthorityDescriptor;
-import org.apache.isis.core.runtime.contextmanger.ContextHandler;
import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.context.managers.AuthorityDescriptor;
+import org.apache.isis.core.runtime.system.context.managers.ContextHandler;
import org.apache.isis.core.runtime.system.session.IsisSession;
import lombok.val;
@@ -49,7 +49,7 @@ public class IsisLegacyJdoContextHandler implements ContextHandler {
}
@Override
- public URI identifierOf(ManagedObject managedObject) {
+ public URI uriOf(ManagedObject managedObject) {
try {
return identifierForPersistable(managedObject.getPojo(), managedObject.getSpecification());
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 42c9245..1ecedc8 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -40,9 +40,9 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.runtime.contextmanger.ContextManager;
import org.apache.isis.core.runtime.memento.Data;
import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.context.managers.ContextManager;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.core.runtime.system.session.IsisSession;
import org.apache.isis.core.security.authentication.AuthenticationSession;
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterByIdProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterByIdProvider.java
index e55101d..e70e769 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterByIdProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterByIdProvider.java
@@ -38,11 +38,11 @@ import org.apache.isis.core.metamodel.adapter.version.Version;
import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.runtime.contextmanger.ContextManager;
import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
import org.apache.isis.core.runtime.persistence.PojoRecreationException;
+import org.apache.isis.core.runtime.system.context.managers.ContextManager;
+import org.apache.isis.core.runtime.system.context.managers.UniversalObjectManager;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.core.runtime.system.persistence.UniversalObjectManager;
import org.apache.isis.core.security.authentication.AuthenticationSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -118,7 +118,7 @@ class ObjectAdapterContext_ObjectAdapterByIdProvider implements ObjectAdapterByI
final RootOid rootOid,
final ConcurrencyChecking concurrencyChecking) {
- /* FIXME [ISIS-1976] SPI for adapterFor(RootOid)
+ /* FIXME [2033] SPI for adapterFor(RootOid)
* https://github.com/apache/isis/pull/121#discussion_r215889748
*
* Eventually I'm hoping that this code will simplify and then become pluggable.
@@ -136,18 +136,23 @@ class ObjectAdapterContext_ObjectAdapterByIdProvider implements ObjectAdapterByI
* generalization of that concept).
*/
-
- if(rootOid instanceof UniversalOid) {
-
- Objects.requireNonNull(rootOid);
-
- val universalOid = (UniversalOid) rootOid;
- val objectManager = UniversalObjectManager.current();
-
- return objectManager.resolve(universalOid);
+ // this should never be called to resolve for other then legacy JDO
+ //FIXME [2033] remove guard
+ if(!rootOid.enStringNoVersion().contains("SimpleObject")) {
+ throw _Exceptions.unexpectedCodeReach();
}
- //FIXME [ISIS-1976] remove guard
+// if(rootOid instanceof UniversalOid) {
+//
+// Objects.requireNonNull(rootOid);
+//
+// val universalOid = (UniversalOid) rootOid;
+// val objectManager = UniversalObjectManager.current();
+//
+// return objectManager.resolve(universalOid);
+// }
+
+ //FIXME [2033] remove guard
final ObjectAdapter serviceAdapter = objectAdapterContext.lookupServiceAdapterFor(rootOid);
if (serviceAdapter != null) {
//throw _Exceptions.unexpectedCodeReach();
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index 0653f12..6d97c68 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -77,7 +77,7 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
.add(new ObjectAdapterContext_OidProviders.OidForServices())
.add(new ObjectAdapterContext_OidProviders.OidForValues())
.add(new ObjectAdapterContext_OidProviders.OidForViewModels())
- .add(new ObjectAdapterContext_OidProviders.OidForPersistent())
+// .add(new ObjectAdapterContext_OidProviders.OidForPersistent())
.add(new ObjectAdapterContext_OidProviders.OidForOthers())
.build();
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java
index 12e949d..96f59fe 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java
@@ -23,17 +23,17 @@ import java.util.UUID;
import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.commons.internal.base._Tuples;
-import org.apache.isis.core.metamodel.IsisJdoMetamodelPlugin;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.runtime.contextmanger.ContextManager;
-import org.apache.isis.core.runtime.contextmanger.ManagedObjectResolver;
import org.apache.isis.core.runtime.system.SystemConstants;
import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.core.runtime.system.context.managers.ContextManager;
+import org.apache.isis.core.runtime.system.context.managers.Converters;
+import org.apache.isis.core.runtime.system.context.managers.Converters.FromUriConverter;
+import org.apache.isis.core.runtime.system.context.managers.ManagedObjectResolver;
import org.apache.isis.core.runtime.system.persistence.adaptermanager.factories.OidFactory.OidProvider;
import lombok.val;
@@ -71,41 +71,44 @@ class ObjectAdapterContext_OidProviders {
}
}
-
- static class OidForPersistent implements OidProvider {
-
- private final IsisJdoMetamodelPlugin isisJdoMetamodelPlugin = IsisJdoMetamodelPlugin.get();
-
- @Override
- public boolean isHandling(ManagedObject managedObject) {
- // equivalent to 'isInstanceOfPersistable = pojo instanceof Persistable'
- final boolean isInstanceOfPersistable = isisJdoMetamodelPlugin
- .isPersistenceEnhanced(managedObject.getPojo().getClass());
- return isInstanceOfPersistable;
- }
-
- @Override
- public RootOid oidFor(ManagedObject managedObject) {
- val pojo = managedObject.getPojo();
- val spec = managedObject.getSpecification();
-
- final PersistenceSession persistenceSession = IsisContext.getPersistenceSession().get();
- final boolean isRecognized = persistenceSession.isRecognized(pojo);
- if(isRecognized) {
- final String identifier = persistenceSession.identifierFor(pojo);
- return Oid.Factory.persistentOf(spec.getSpecId(), identifier);
- } else {
- final String identifier = UUID.randomUUID().toString();
- return Oid.Factory.transientOf(spec.getSpecId(), identifier);
- }
- }
-
- }
+
+//TODO [2033] is now handled through OidForManagedContexts
+//
+// static class OidForPersistent implements OidProvider {
+//
+// private final IsisJdoMetamodelPlugin isisJdoMetamodelPlugin = IsisJdoMetamodelPlugin.get();
+//
+// @Override
+// public boolean isHandling(ManagedObject managedObject) {
+// // equivalent to 'isInstanceOfPersistable = pojo instanceof Persistable'
+// final boolean isInstanceOfPersistable = isisJdoMetamodelPlugin
+// .isPersistenceEnhanced(managedObject.getPojo().getClass());
+// return isInstanceOfPersistable;
+// }
+//
+// @Override
+// public RootOid oidFor(ManagedObject managedObject) {
+// val pojo = managedObject.getPojo();
+// val spec = managedObject.getSpecification();
+//
+// final PersistenceSession persistenceSession = IsisContext.getPersistenceSession().get();
+// final boolean isRecognized = persistenceSession.isRecognized(pojo);
+// if(isRecognized) {
+// final String identifier = persistenceSession.identifierFor(pojo);
+// return Oid.Factory.persistentOf(spec.getSpecId(), identifier);
+// } else {
+// final String identifier = UUID.randomUUID().toString();
+// return Oid.Factory.transientOf(spec.getSpecId(), identifier);
+// }
+// }
+//
+// }
static class OidForManagedContexts implements OidProvider {
final _Lazy<ContextManager> contextManager = _Lazy.of(()->
IsisContext.getServiceRegistry().lookupServiceElseFail(ContextManager.class));
+ final FromUriConverter converter = Converters.fromUriConverter();
private _Tuples.Tuple2<Object, ManagedObjectResolver> latestLookup; // acts as a cache
@@ -133,9 +136,9 @@ class ObjectAdapterContext_OidProviders {
Objects.equals(pojo, latestLookup.get_1()))
? latestLookup.get_2() // use cache
: contextManager.get().resolverForIfAny(spec);
-
- val objectIdUri = managedObjectResolver.identifierOf(managedObject);
- return Oid.Factory.universal(objectIdUri);
+
+ val objectUri = managedObjectResolver.uriOf(managedObject);
+ return converter.toRootOid(objectUri);
}
}
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapter.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapter.java
index 61352a6..2410124 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapter.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapter.java
@@ -23,7 +23,9 @@ import java.util.Locale;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.runtime.system.persistence.UniversalObjectManager;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.runtime.system.context.managers.Converters;
+import org.apache.isis.core.runtime.system.context.managers.UniversalObjectManager;
import org.apache.wicket.util.convert.IConverter;
import lombok.val;
@@ -44,10 +46,10 @@ public class ConverterForObjectAdapter implements IConverter<ObjectAdapter> {
public ObjectAdapter convertToObject(final String value, final Locale locale) {
val objectManager = UniversalObjectManager.current();
- val decoder = objectManager.getOidDecoder();
- val uoid = decoder.decodeFromStringElseFail(value);
+ val decoder = Converters.toUriConverter();
+ val objectUri = decoder.decodeFromStringElseFail(value);
- return objectManager.resolve(uoid);
+ return objectManager.resolve(objectUri);
}
/**
@@ -55,12 +57,12 @@ public class ConverterForObjectAdapter implements IConverter<ObjectAdapter> {
*/
@Override
public String convertToString(final ObjectAdapter adapter, final Locale locale) {
+ val rootOid = (RootOid) adapter.getOid();
+ val toUriConverter = Converters.toUriConverter();
+ val encoder = Converters.fromUriConverter();
- val oid = adapter.getOid();
- val objectManager = UniversalObjectManager.current();
- val encoder = objectManager.getOidEncoder();
-
- return encoder.encodeToStringWithLegacySupport(oid);
+ val objectUri = toUriConverter.toURI(rootOid);
+ return encoder.encodeToString(objectUri);
}
}
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
index 0651202..eb7f1b9 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
@@ -37,7 +37,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.adapter.oid.UniversalOid;
import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -46,8 +45,9 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.runtime.memento.Memento;
import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
+import org.apache.isis.core.runtime.system.context.managers.Converters;
+import org.apache.isis.core.runtime.system.context.managers.UniversalObjectManager;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.core.runtime.system.persistence.UniversalObjectManager;
import lombok.val;
@@ -79,12 +79,14 @@ public class ObjectAdapterMemento implements Serializable {
public static ObjectAdapterMemento createForList(
final ArrayList<ObjectAdapterMemento> list,
final ObjectSpecId objectSpecId) {
+
return new ObjectAdapterMemento(list, objectSpecId);
}
public static ObjectAdapterMemento createForList(
final Collection<ObjectAdapterMemento> list,
final ObjectSpecId objectSpecId) {
+
return list != null ? createForList(_Lists.newArrayList(list), objectSpecId) : null;
}
@@ -100,6 +102,7 @@ public class ObjectAdapterMemento implements Serializable {
final ConcurrencyChecking concurrencyChecking,
final PersistenceSession persistenceSession,
final SpecificationLoader specificationLoader) {
+
return oam.type.getAdapter(oam, concurrencyChecking, persistenceSession, specificationLoader);
}
@@ -133,8 +136,10 @@ public class ObjectAdapterMemento implements Serializable {
@Override
public ObjectAdapter asAdapter(
final ObjectAdapterMemento oam,
- final ConcurrencyChecking concurrencyChecking, final PersistenceSession persistenceSession,
+ final ConcurrencyChecking concurrencyChecking,
+ final PersistenceSession persistenceSession,
final SpecificationLoader specificationLoader) {
+
final List<Object> listOfPojos =
_Lists.map(oam.list, Functions.toPojo(persistenceSession, specificationLoader));
@@ -173,7 +178,8 @@ public class ObjectAdapterMemento implements Serializable {
public abstract ObjectAdapter asAdapter(
final ObjectAdapterMemento oam,
- final ConcurrencyChecking concurrencyChecking, final PersistenceSession persistenceSession,
+ final ConcurrencyChecking concurrencyChecking,
+ final PersistenceSession persistenceSession,
final SpecificationLoader specificationLoader);
public abstract int hashCode(final ObjectAdapterMemento oam);
@@ -196,6 +202,7 @@ public class ObjectAdapterMemento implements Serializable {
final ConcurrencyChecking concurrencyChecking,
final PersistenceSession persistenceSession,
final SpecificationLoader specificationLoader) {
+
ObjectSpecId objectSpecId = oam.objectSpecId;
ObjectSpecification objectSpec = SpecUtils.getSpecificationFor(objectSpecId, specificationLoader);
final EncodableFacet encodableFacet = objectSpec.getFacet(EncodableFacet.class);
@@ -220,7 +227,8 @@ public class ObjectAdapterMemento implements Serializable {
@Override
public void resetVersion(
ObjectAdapterMemento objectAdapterMemento,
- final PersistenceSession persistenceSession, final SpecificationLoader specificationLoader) {
+ final PersistenceSession persistenceSession,
+ final SpecificationLoader specificationLoader) {
}
},
/**
@@ -232,13 +240,16 @@ public class ObjectAdapterMemento implements Serializable {
ObjectAdapter recreateAdapter(
final ObjectAdapterMemento oam,
ConcurrencyChecking concurrencyChecking,
- final PersistenceSession persistenceSession, final SpecificationLoader specificationLoader) {
+ final PersistenceSession persistenceSession,
+ final SpecificationLoader specificationLoader) {
if(_URI.isUoid(oam.persistentOidStr)) {
- val uri = URI.create(oam.persistentOidStr);
- val oid = Oid.Factory.universal(uri);
- val objAdapter = persistenceSession.adapterFor(oid, concurrencyChecking);
- return objAdapter;
+
+ val objectManager = UniversalObjectManager.current();
+ val decoder = Converters.toUriConverter();
+ val objectUri = decoder.decodeFromStringElseFail(oam.persistentOidStr);
+
+ return objectManager.resolve(objectUri);
}
RootOid oid = Oid.unmarshaller().unmarshal(oam.persistentOidStr, RootOid.class);
@@ -296,7 +307,9 @@ public class ObjectAdapterMemento implements Serializable {
ObjectAdapter recreateAdapter(
final ObjectAdapterMemento oam,
final ConcurrencyChecking concurrencyChecking,
- final PersistenceSession persistenceSession, final SpecificationLoader specificationLoader) {
+ final PersistenceSession persistenceSession,
+ final SpecificationLoader specificationLoader) {
+
return oam.transientMemento.recreateObject();
}
@@ -327,13 +340,15 @@ public class ObjectAdapterMemento implements Serializable {
final ConcurrencyChecking concurrencyChecking,
final PersistenceSession persistenceSession,
final SpecificationLoader specificationLoader) {
+
return recreateAdapter(nom, concurrencyChecking, persistenceSession, specificationLoader);
}
abstract ObjectAdapter recreateAdapter(
final ObjectAdapterMemento nom,
final ConcurrencyChecking concurrencyChecking,
- final PersistenceSession persistenceSession, final SpecificationLoader specificationLoader);
+ final PersistenceSession persistenceSession,
+ final SpecificationLoader specificationLoader);
public abstract boolean equals(ObjectAdapterMemento oam, ObjectAdapterMemento other);
public abstract int hashCode(ObjectAdapterMemento objectAdapterMemento);
@@ -342,7 +357,8 @@ public class ObjectAdapterMemento implements Serializable {
public abstract void resetVersion(
ObjectAdapterMemento objectAdapterMemento,
- final PersistenceSession persistenceSession, final SpecificationLoader specificationLoader);
+ final PersistenceSession persistenceSession,
+ final SpecificationLoader specificationLoader);
}
@@ -635,7 +651,7 @@ public class ObjectAdapterMemento implements Serializable {
return objectAdapterMemento->Oid.Factory.ofBookmark(objectAdapterMemento.asBookmark());
}
- public static Function<ObjectAdapterMemento, UniversalOid> toUoid() {
+ public static Function<ObjectAdapterMemento, URI> toUri() {
return objectAdapterMemento->{
@@ -644,16 +660,9 @@ public class ObjectAdapterMemento implements Serializable {
val identifier = bookmark.getIdentifier();
//val state = Oid_State.from(bookmark); // ignored
//val version = Version.empty(); // ignored
-
- val objectManager = UniversalObjectManager.current();
- val authority = objectManager.authorityForElseFail(specId);
- val uri = authority.toUoidDtoBuilder(specId)
- .query(identifier)
- .build()
- .toURI();
-
- return Oid.Factory.universal(uri);
+ val decoder = Converters.toUriConverter();
+ return decoder.toURI(specId, identifier);
};
}
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
index ee5757f..87ed48e 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
@@ -22,6 +22,7 @@ package org.apache.isis.viewer.wicket.model.models;
import static org.apache.isis.commons.internal.base._NullSafe.stream;
import java.io.Serializable;
+import java.net.URI;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@@ -47,8 +48,8 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.context.managers.UniversalObjectManager;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.core.runtime.system.persistence.UniversalObjectManager;
import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
@@ -100,11 +101,13 @@ UiHintContainer {
private Stream<ObjectAdapter> loadInBulk(final EntityCollectionModel model) {
- final Stream<UniversalOid> uoids = stream(model.mementoList)
- .map(ObjectAdapterMemento.Functions.toUoid());
+ val objectManager = UniversalObjectManager.current();
+
+ final Stream<URI> objectUris = stream(model.mementoList)
+ .map(ObjectAdapterMemento.Functions.toUri());
+
- val objectManager = UniversalObjectManager.current();
- return objectManager.resolve(uoids);
+ return objectManager.resolve(objectUris);
}
private Stream<ObjectAdapter> loadOneByOne(final EntityCollectionModel model) {
diff --git a/example/application/simpleapp/module-spring/src/main/java/domainapp/modules/spring/SpringDataJPADemoHandler.java b/example/application/simpleapp/module-spring/src/main/java/domainapp/modules/spring/SpringDataJPADemoHandler.java
index 5a35a82..429b308 100644
--- a/example/application/simpleapp/module-spring/src/main/java/domainapp/modules/spring/SpringDataJPADemoHandler.java
+++ b/example/application/simpleapp/module-spring/src/main/java/domainapp/modules/spring/SpringDataJPADemoHandler.java
@@ -22,8 +22,8 @@ import org.apache.isis.core.metamodel.spec.ManagedObject.SimpleManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.runtime.contextmanger.AuthorityDescriptor;
-import org.apache.isis.core.runtime.contextmanger.ContextHandler;
+import org.apache.isis.core.runtime.system.context.managers.AuthorityDescriptor;
+import org.apache.isis.core.runtime.system.context.managers.ContextHandler;
import org.springframework.context.ApplicationContext;
import domainapp.modules.spring.dom.customer.Customer;
@@ -38,7 +38,7 @@ public class SpringDataJPADemoHandler implements ContextHandler {
@Inject SpecificationLoader specLoader;
@Override
- public URI identifierOf(ManagedObject managedObject) {
+ public URI uriOf(ManagedObject managedObject) {
try {
return identifierForCustomer(managedObject.getPojo(), managedObject.getSpecification());
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException