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/06/05 09:11:04 UTC

[isis] branch master updated: ISIS-2340: refactor such that can remove ManagedObject._instanceId(...)

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 2a51404  ISIS-2340: refactor such that can remove ManagedObject._instanceId(...)
2a51404 is described below

commit 2a514041f074393e0a0699ba63d10a42703462cb
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jun 5 11:10:54 2020 +0200

    ISIS-2340: refactor such that can remove ManagedObject._instanceId(...)
---
 .../isis/core/metamodel/spec/ManagedObject.java    |  5 --
 .../isis/core/metamodel/spec/ManagedObjects.java   | 78 ++++++++++++++--------
 .../domainobjects/DomainObjectLinkTo.java          |  5 +-
 .../domainobjects/DomainObjectReprRenderer.java    | 56 ++++++++--------
 4 files changed, 82 insertions(+), 62 deletions(-)

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 c9d5892..7e6fd41 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
@@ -239,11 +239,6 @@ public interface ManagedObject {
 
     // -- DEPRECATIONS (REFACTORING)
 
-    static String _instanceId(ManagedObject adapter) {
-        val identifier = ManagedObjects.identifyElseFail(adapter).getIdentifier();
-        return identifier; 
-    }
-    
     static void _whenFirstIsBookmarkable_ensureSecondIsAsWell(
             ManagedObject first,
             ManagedObject second) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
index c18d350..20ee19f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
@@ -85,65 +85,91 @@ public final class ManagedObjects {
     
     /**
      * @return whether the corresponding type can be mapped onto a REFERENCE (schema) or an Oid,
-     * that is the type is 'identifiable' (aka 'referencable' or 'bookmarkable') 
+     * that is, the type is 'identifiable' (aka 'referencable' or 'bookmarkable') 
      */
-    public static boolean isIdentifiable(@Nullable ManagedObject adapter) {
-        return spec(adapter)
+    public static boolean isIdentifiable(@Nullable ManagedObject managedObject) {
+        return spec(managedObject)
                 .map(ObjectSpecification::isIdentifiable)
                 .orElse(false);
     }
     
-    public static boolean isEntity(ManagedObject adapter) {
-        return spec(adapter)
+    public static boolean isEntity(ManagedObject managedObject) {
+        return spec(managedObject)
                 .map(ObjectSpecification::isEntity)
                 .orElse(false);
     }
 
-    public static boolean isValue(ManagedObject adapter) {
-        return spec(adapter)
+    public static boolean isValue(ManagedObject managedObject) {
+        return spec(managedObject)
                 .map(ObjectSpecification::isValue)
                 .orElse(false);
     }
     
-    public static Optional<String> getDomainType(ManagedObject adapter) {
-        return spec(adapter)
+    public static Optional<String> getDomainType(ManagedObject managedObject) {
+        return spec(managedObject)
                 .map(ObjectSpecification::getSpecId)
                 .map(ObjectSpecId::asString);
     }
     
     // -- IDENTIFICATION
     
-    public static Optional<ObjectSpecification> spec(@Nullable ManagedObject adapter) {
-        return isSpecified(adapter) ? Optional.of(adapter.getSpecification()) : Optional.empty(); 
+    public static Optional<ObjectSpecification> spec(@Nullable ManagedObject managedObject) {
+        return isSpecified(managedObject) ? Optional.of(managedObject.getSpecification()) : Optional.empty(); 
     }
     
-    public static Optional<RootOid> identify(@Nullable ManagedObject adapter) {
-        return isSpecified(adapter) ? adapter.getRootOid() : Optional.empty(); 
+    public static Optional<RootOid> identify(@Nullable ManagedObject managedObject) {
+        return isSpecified(managedObject) ? managedObject.getRootOid() : Optional.empty(); 
     }
     
-    public static RootOid identifyElseFail(@Nullable ManagedObject adapter) {
-        return identify(adapter)
-                .orElseThrow(()->_Exceptions.illegalArgument("cannot identify %s", adapter));
+    public static RootOid identifyElseFail(@Nullable ManagedObject managedObject) {
+        return identify(managedObject)
+                .orElseThrow(()->_Exceptions.illegalArgument("cannot identify %s", managedObject));
     }
     
-    public static Optional<Bookmark> bookmark(@Nullable ManagedObject adapter) {
-        return identify(adapter)
+    public static Optional<Bookmark> bookmark(@Nullable ManagedObject managedObject) {
+        return identify(managedObject)
                 .map(RootOid::asBookmark);
     }
     
-    public static Bookmark bookmarkElseFail(@Nullable ManagedObject adapter) {
-        return bookmark(adapter)
-                .orElseThrow(()->_Exceptions.illegalArgument("cannot bookmark %s", adapter));
+    public static Bookmark bookmarkElseFail(@Nullable ManagedObject managedObject) {
+        return bookmark(managedObject)
+                .orElseThrow(()->_Exceptions.illegalArgument("cannot bookmark %s", managedObject));
     }
     
-    public static Optional<String> stringify(@Nullable ManagedObject adapter) {
-        return identify(adapter)
+    /**
+     * @param managedObject
+     * @return optionally a String representing a reference to the <em>identifiable</em> 
+     * {@code managedObject}, usually made up of the object's type and its ID.
+     */
+    public static Optional<String> stringify(@Nullable ManagedObject managedObject) {
+        return identify(managedObject)
                 .map(RootOid::enString);
     }
     
-    public static String stringifyElseFail(@Nullable ManagedObject adapter) {
-        return stringify(adapter)
-                .orElseThrow(()->_Exceptions.illegalArgument("cannot stringify %s", adapter));
+    public static String stringifyElseFail(@Nullable ManagedObject managedObject) {
+        return stringify(managedObject)
+                .orElseThrow(()->_Exceptions.illegalArgument("cannot stringify %s", managedObject));
+    }
+    
+    /**
+     * 
+     * @param managedObject
+     * @param separator custom separator
+     * @return optionally a String representing a reference to the <em>identifiable</em> 
+     * {@code managedObject}, made of the form &lt;object-type&gt; &lt;separator&gt; &lt;object-id&gt;.
+     */
+    public static Optional<String> stringify(
+            @Nullable ManagedObject managedObject, 
+            @NonNull final String separator) {
+        return identify(managedObject)
+                .map(rootOid->rootOid.getObjectSpecId() + separator + rootOid.getIdentifier());
+    }
+
+    public static String stringifyElseFail(
+            @Nullable ManagedObject managedObject, 
+            @NonNull final String separator) {
+        return stringify(managedObject, separator)
+                .orElseThrow(()->_Exceptions.illegalArgument("cannot stringify %s", managedObject));
     }
 
 
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
index 8afd363..17e6378 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
@@ -59,9 +59,8 @@ public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
      * hook method
      */
     protected StringBuilder linkRef(StringBuilder buf) {
-        String domainType = ManagedObjects.getDomainType(objectAdapter).orElse("?");
-        String instanceId = ManagedObject._instanceId(objectAdapter);
-        return buf.append("objects/").append(domainType).append("/").append(instanceId);
+        String objectRef = ManagedObjects.stringifyElseFail(objectAdapter, "/");
+        return buf.append("objects/").append(objectRef);
     }
 
     protected Rel relElseDefault(final Rel rel) {
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index e7cbfd4..b07b693 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -59,9 +59,8 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
             final Rel rel, 
             final ManagedObject objectAdapter) {
         
-        String domainType = ManagedObjects.getDomainType(objectAdapter).orElse("?");
-        String instanceId = ManagedObject._instanceId(objectAdapter);
-        final String url = "objects/" + domainType + "/" + instanceId;
+        final String objectRef = ManagedObjects.stringifyElseFail(objectAdapter, "/");
+        final String url = "objects/" + objectRef;
         return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.DOMAIN_OBJECT, url).withTitle(objectAdapter.titleString(null));
     }
 
@@ -70,9 +69,8 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
             final ManagedObject objectAdapter) {
         
         final Rel rel = Rel.OBJECT_LAYOUT;
-        String domainType = ManagedObjects.getDomainType(objectAdapter).orElse("?");
-        String instanceId = ManagedObject._instanceId(objectAdapter);
-        final String url = "objects/" + domainType + "/" + instanceId + "/object-layout";
+        final String objectRef = ManagedObjects.stringifyElseFail(objectAdapter, "/");
+        final String url = "objects/" + objectRef + "/object-layout";
         return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.OBJECT_LAYOUT, url);
     }
 
@@ -81,9 +79,8 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
             final ManagedObject objectAdapter) {
         
         final Rel rel = Rel.OBJECT_ICON;
-        String domainType = ManagedObjects.getDomainType(objectAdapter).orElse("?");
-        String instanceId = ManagedObject._instanceId(objectAdapter);
-        final String url = "objects/" + domainType + "/" + instanceId + "/image";
+        final String objectRef = ManagedObjects.stringifyElseFail(objectAdapter, "/");
+        final String url = "objects/" + objectRef + "/image";
         return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.OBJECT_IMAGE, url);
     }
 
@@ -172,12 +169,17 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
 
         if (!(mode.isArgs())) {
 
+            val rootOidIfAny = objectAdapter.getRootOid();
+            
             // self, extensions.oid
             if (ManagedObjects.isIdentifiable(objectAdapter)) {
                 if (includesSelf) {
                     addLinkToSelf();
                 }
-                getExtensions().mapPut("oid", getOidStr());
+                rootOidIfAny.ifPresent(rootOid->{
+                    val oidStr = rootOid.enString();
+                    getExtensions().mapPut("oid", oidStr);
+                });
             }
 
             // title
@@ -188,13 +190,10 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
             if (isService) {
                 representation.mapPut("serviceId", ServiceUtil.idOfAdapter(objectAdapter));
             } else {
-                final String domainType = getDomainType();
-                final String instanceId = getInstanceId();
-                if (domainType != null) {
-                    representation.mapPut("domainType", domainType);
-                    representation.mapPut("instanceId", instanceId);
-
-                }
+                rootOidIfAny.ifPresent(rootOid->{
+                    representation.mapPut("domainType", rootOid.getObjectSpecId().asString());
+                    representation.mapPut("instanceId", rootOid.getIdentifier());
+                });
             }
         }
 
@@ -282,17 +281,17 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
         getLinks().arrayAdd(link);
     }
 
-    private String getDomainType() {
-        return ManagedObjects.getDomainType(objectAdapter).orElse("?");
-    }
-
-    private String getInstanceId() {
-        return ManagedObject._instanceId(objectAdapter);
-    }
+//    private String getDomainType() {
+//        return ManagedObjects.getDomainType(objectAdapter).orElse("?");
+//    }
+//
+//    private String getInstanceId() {
+//        return ManagedObject._instanceId(objectAdapter);
+//    }
 
-    private String getOidStr() {
-        return ManagedObjects.stringifyElseFail(objectAdapter);
-    }
+//    private String getOidStr() {
+//        return ManagedObjects.stringifyElseFail(objectAdapter);
+//    }
 
     private DomainObjectReprRenderer withMembers(final ManagedObject objectAdapter) {
         final JsonRepresentation appendTo =
@@ -456,7 +455,8 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
         final JsonRepresentation domainObjectRepr = renderer.with(objectAdapter).asUpdatePropertiesLinkArguments().render();
 
         if(!getResourceContext().suppressUpdateLink()) {
-            final LinkBuilder updateLinkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.UPDATE.getName(), RepresentationType.DOMAIN_OBJECT, "objects/%s/%s", getDomainType(), getInstanceId()).withHttpMethod(RestfulHttpMethod.PUT).withArguments(domainObjectRepr);
+            val objectRef = ManagedObjects.stringifyElseFail(objectAdapter);
+            val updateLinkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.UPDATE.getName(), RepresentationType.DOMAIN_OBJECT, "objects/%s", objectRef).withHttpMethod(RestfulHttpMethod.PUT).withArguments(domainObjectRepr);
             getLinks().arrayAdd(updateLinkBuilder.build());
         }
     }