You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/04/16 13:50:45 UTC

[isis] branch master updated: ISIS-2569: prepare unification of Bookmark and Oid (3)

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 7f8a35f  ISIS-2569: prepare unification of Bookmark and Oid (3)
7f8a35f is described below

commit 7f8a35f31b0b6c9e7a2726c3ae265b5d48208497
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Apr 16 15:50:16 2021 +0200

    ISIS-2569: prepare unification of Bookmark and Oid (3)
---
 .../isis/core/metamodel/adapter/oid/Oid.java       | 14 -------------
 .../component/FullCalendarWithEventHandling.java   | 11 ++++++----
 .../prop/notpersistent/JdoNotPersistentFacet.java  |  4 ++--
 .../facets/prop/primarykey/JdoPrimaryKeyFacet.java |  4 ++--
 .../restfulobjects/rendering/IResourceContext.java |  8 +++-----
 .../viewer/resources/JsonParserHelper.java         |  4 ++--
 .../viewer/resources/ResourceAbstract.java         | 14 ++++++-------
 .../widgets/breadcrumbs/BreadcrumbPanel.java       | 12 ++++++++---
 .../integration/ConverterForObjectAdapter.java     | 24 +++++++++-------------
 9 files changed, 41 insertions(+), 54 deletions(-)

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 c779ce4..8e528a9 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
@@ -52,20 +52,6 @@ public interface Oid extends Serializable {
                 identifier);
     }
     
-    public static Oid forDto(final OidDto oidDto) {
-        return _SimpleOid.of(
-                oidDto.getType(), 
-                oidDto.getId());
-    }
-    
-    public static Oid forLogicalTypeNameAndIdentifier(
-            final String logicalTypeName,
-            final String identifier) {
-        return _SimpleOid.of(
-                logicalTypeName, 
-                identifier);
-    }
-    
     // -- PARTS THAT MAKE UP THE OID
     
     /**
diff --git a/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/FullCalendarWithEventHandling.java b/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/FullCalendarWithEventHandling.java
index 25b2a97..a0efc0b 100644
--- a/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/FullCalendarWithEventHandling.java
+++ b/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/FullCalendarWithEventHandling.java
@@ -20,7 +20,7 @@ package org.apache.isis.extensions.fullcalendar.ui.component;
 
 import org.apache.wicket.RestartResponseException;
 
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
 import org.apache.isis.core.metamodel.objectmanager.load.ObjectLoader;
@@ -61,7 +61,10 @@ final class FullCalendarWithEventHandling extends FullCalendar {
             final CalendarResponse response) {
 
         final String oidStr = (String) event.getEvent().getPayload();
-        final Oid oid = Oid.parse(oidStr);
+        final Bookmark bookmark = Bookmark.parse(oidStr).orElse(null);
+        if(bookmark==null) {
+            return;
+        }
 
         val commonContext = getCommonContext();
                 
@@ -70,8 +73,8 @@ final class FullCalendarWithEventHandling extends FullCalendar {
         final ObjectManager objectManager = commonContext.getObjectManager();
         final IsisAppCommonContext webAppCommonContext = IsisAppCommonContext.of(metaModelContext);
 
-        val spec = specificationLoader.specForLogicalTypeName(oid.getLogicalTypeName()).orElse(null);
-        val objectId = oid.getIdentifier();
+        val spec = specificationLoader.specForLogicalTypeName(bookmark.getLogicalTypeName()).orElse(null);
+        val objectId = bookmark.getIdentifier();
         val managedObject = objectManager.loadObject(ObjectLoader.Request.of(spec, objectId));
 
         final EntityModel entityModel = EntityModel.ofAdapter(webAppCommonContext, managedObject);
diff --git a/persistence/jdo/provider/src/main/java/org/apache/isis/persistence/jdo/provider/metamodel/facets/prop/notpersistent/JdoNotPersistentFacet.java b/persistence/jdo/provider/src/main/java/org/apache/isis/persistence/jdo/provider/metamodel/facets/prop/notpersistent/JdoNotPersistentFacet.java
index e1891eb..50ec07d 100644
--- a/persistence/jdo/provider/src/main/java/org/apache/isis/persistence/jdo/provider/metamodel/facets/prop/notpersistent/JdoNotPersistentFacet.java
+++ b/persistence/jdo/provider/src/main/java/org/apache/isis/persistence/jdo/provider/metamodel/facets/prop/notpersistent/JdoNotPersistentFacet.java
@@ -20,7 +20,7 @@ package org.apache.isis.persistence.jdo.provider.metamodel.facets.prop.notpersis
 
 import javax.jdo.annotations.NotPersistent;
 
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 
 
@@ -28,7 +28,7 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
  * Corresponds to the property with the {@link NotPersistent} annotation.
  * <p>
  * The JDO {@link NotPersistent} annotation is used internally the JDO object store to
- * create the {@link Oid}.
+ * create the {@link Bookmark}.
  */
 public interface JdoNotPersistentFacet extends Facet {
 
diff --git a/persistence/jdo/provider/src/main/java/org/apache/isis/persistence/jdo/provider/metamodel/facets/prop/primarykey/JdoPrimaryKeyFacet.java b/persistence/jdo/provider/src/main/java/org/apache/isis/persistence/jdo/provider/metamodel/facets/prop/primarykey/JdoPrimaryKeyFacet.java
index 18972b8..1cf920b 100644
--- a/persistence/jdo/provider/src/main/java/org/apache/isis/persistence/jdo/provider/metamodel/facets/prop/primarykey/JdoPrimaryKeyFacet.java
+++ b/persistence/jdo/provider/src/main/java/org/apache/isis/persistence/jdo/provider/metamodel/facets/prop/primarykey/JdoPrimaryKeyFacet.java
@@ -20,7 +20,7 @@ package org.apache.isis.persistence.jdo.provider.metamodel.facets.prop.primaryke
 
 import javax.jdo.annotations.PrimaryKey;
 
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 
 
@@ -28,7 +28,7 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
  * Corresponds to the property with the {@link PrimaryKey} annotation.
  * <p>
  * The JDO {@link PrimaryKey} annotation is used internally the JDO object store to
- * create the {@link Oid}.
+ * create the {@link Bookmark}.
  */
 public interface JdoPrimaryKeyFacet extends Facet {
 
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/IResourceContext.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/IResourceContext.java
index 37ba0bf..736ed49 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/IResourceContext.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/IResourceContext.java
@@ -25,9 +25,9 @@ import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 
 import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -37,8 +37,6 @@ import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjec
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAdapterLinkTo;
 import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
 
-import lombok.val;
-
 /**
  * Provides access to request-specific context (eg HTTP headers),
  * session-specific context (eg authentication) and
@@ -108,8 +106,8 @@ public interface IResourceContext {
 
     default Optional<ManagedObject> getObjectAdapterForOidFromHref(String oidFromHref) {
         String oidStrUnencoded = UrlDecoderUtils.urlDecode(oidFromHref);
-        val oid = Oid.parse(oidStrUnencoded);
-        return oid.loadObject(getMetaModelContext());
+        return Bookmark.parse(oidStrUnencoded)
+        .flatMap(getMetaModelContext()::loadObject);
     }
 
 }
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/JsonParserHelper.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/JsonParserHelper.java
index 2d9b473..dd38405 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/JsonParserHelper.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/JsonParserHelper.java
@@ -21,7 +21,7 @@ package org.apache.isis.viewer.restfulobjects.viewer.resources;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
@@ -152,7 +152,7 @@ public class JsonParserHelper {
         String domainType = matcher.group(1);
         String instanceId = matcher.group(2);
         
-        return Oid.forLogicalTypeNameAndIdentifier(domainType, instanceId).stringify();
+        return Bookmark.forLogicalTypeNameAndIdentifier(domainType, instanceId).stringify();
     }
 
     private static String resourceFor(final ObjectSpecification objectSpec) {
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ResourceAbstract.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ResourceAbstract.java
index 7107222..f99c25c 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ResourceAbstract.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ResourceAbstract.java
@@ -32,10 +32,10 @@ import javax.ws.rs.core.UriInfo;
 import javax.ws.rs.ext.Providers;
 
 import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.internal.codec._UrlDecoderUtil;
 import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.interaction.session.InteractionTracker;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -124,16 +124,14 @@ public abstract class ResourceAbstract {
     // -- ISIS INTEGRATION
 
     protected ManagedObject getObjectAdapterElseThrowNotFound(String domainType, final String instanceIdEncoded) {
-        final String instanceIdUnencoded = UrlDecoderUtils.urlDecode(instanceIdEncoded);
+        final String instanceIdDecoded = UrlDecoderUtils.urlDecode(instanceIdEncoded);
 
-        val oid = Oid.forLogicalTypeNameAndIdentifier(domainType, instanceIdUnencoded);
-        return oid
-                .loadObject(metaModelContext)
+        val bookmark = Bookmark.forLogicalTypeNameAndIdentifier(domainType, instanceIdDecoded);
+        return metaModelContext.loadObject(bookmark)
                 .orElseThrow(()->RestfulObjectsApplicationException
                         .createWithMessage(HttpStatusCode.NOT_FOUND, 
-                                "Could not determine adapter for OID: '%s:%s'", 
-                                domainType, 
-                                instanceIdUnencoded));
+                                "Could not determine adapter for bookmark: '%s'", 
+                                bookmark));
     }
 
     protected ManagedObject getServiceAdapter(final String serviceId) {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
index 2c6b753..044d851 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
@@ -32,8 +32,8 @@ import org.wicketstuff.select2.Response;
 import org.wicketstuff.select2.Select2Choice;
 import org.wicketstuff.select2.Settings;
 
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
@@ -80,8 +80,14 @@ extends PanelAbstract<Void, IModel<Void>> {
                 try {
                     final PageParameters pageParameters = choice.getPageParametersWithoutUiHints();
                     final String oidStr = PageParameterNames.OBJECT_OID.getStringFrom(pageParameters);
-                    final Oid resultOid = Oid.parse(oidStr);
-                    return resultOid.stringify();
+                    
+                    return Bookmark.parse(oidStr)
+                    .map(Bookmark::stringify)
+                    .orElseGet(()->{
+                        breadcrumbModel.remove(choice);
+                        return null;
+                    });
+                    
                 } catch (Exception ex) {
                     breadcrumbModel.remove(choice);
                     return null;
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/ConverterForObjectAdapter.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/ConverterForObjectAdapter.java
index b9f232c..9cfc80a 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/ConverterForObjectAdapter.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/ConverterForObjectAdapter.java
@@ -25,17 +25,16 @@ import javax.inject.Inject;
 
 import org.apache.wicket.util.convert.IConverter;
 
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
-import org.apache.isis.core.metamodel.objectmanager.load.ObjectLoader;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 
 import lombok.val;
 
 /**
- * Implementation of a Wicket {@link IConverter} for {@link ManagedObject}s,
- * converting to-and-from their {@link Oid}'s string representation.
+ * Implementation of a <i>Wicket</i> {@link IConverter} for {@link ManagedObject}s,
+ * converting to-and-from their {@link Bookmark}'s string representation.
  */
 public class ConverterForObjectAdapter implements IConverter<ManagedObject> {
 
@@ -44,29 +43,26 @@ public class ConverterForObjectAdapter implements IConverter<ManagedObject> {
     @Inject private transient ObjectManager objectManager;
     
     /**
-     * Converts string representation of {@link Oid} to
+     * Converts string representation of {@link Bookmark} to
      * {@link ManagedObject}.
      */
     @Override
     public ManagedObject convertToObject(final String value, final Locale locale) {
-        val oid = Oid.parseUrlEncoded(value);
-        val spec = objectManager.getMetaModelContext()
-                .getSpecificationLoader()
-                .specForLogicalTypeNameElseFail(oid.getLogicalTypeName());
+        val oid = Bookmark.parseUrlEncoded(value).orElse(null);
         
-        val objectLoadRequest = ObjectLoader.Request.of(spec, oid.getIdentifier());
-        
-        return objectManager.loadObject(objectLoadRequest);
+        return objectManager.getMetaModelContext()
+        .loadObject(oid)
+        .orElse(null);
     }
 
     /**
-     * Converts {@link ManagedObject} to string representation of {@link Oid}.
+     * Converts {@link ManagedObject} to string representation of {@link Bookmark}.
      */
     @Override
     public String convertToString(final ManagedObject adapter, final Locale locale) {
         
         if(!ManagedObjects.isIdentifiable(adapter)) {
-            // eg. values don't have an Oid
+            // eg. values don't have a Bookmark
             return null;
         }