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 e36b9c58e0 ISIS-2995: don't run into situation where we need to 
generate UUIDs for unidentifiable objects
e36b9c58e0 is described below

commit e36b9c58e0a3949a2656e5c7ebf4f9fa536aadd1
Author: Andi Huber <[email protected]>
AuthorDate: Fri Apr 8 13:52:45 2022 +0200

    ISIS-2995: don't run into situation where we need to generate UUIDs for
    unidentifiable objects
---
 .../isis/core/metamodel/spec/ManagedObjects.java   | 26 ++++++++++++----------
 .../webapp/wicket/jpa/DemoAppWicketJpa.java        |  2 ++
 .../domainobjects/DomainObjectLinkTo.java          |  2 +-
 3 files changed, 17 insertions(+), 13 deletions(-)

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 0780e9a443..a919b7609c 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
@@ -198,6 +198,7 @@ public final class ManagedObjects {
                 .orElseThrow(()->_Exceptions.illegalArgument("cannot stringify 
%s", managedObject));
     }
 
+
     /**
      *
      * @param managedObject
@@ -219,6 +220,16 @@ public final class ManagedObjects {
                 .orElseThrow(()->_Exceptions.illegalArgument("cannot stringify 
%s", managedObject));
     }
 
+    public static String stringifyElseUnidentified(
+            final @Nullable ManagedObject managedObject,
+            final @NonNull String separator) {
+        return stringify(managedObject, separator)
+                .orElseGet(()->isSpecified(managedObject)
+                        ? 
managedObject.getSpecification().getLogicalTypeName() + separator +"?"
+                        : "?" + separator + "?");
+    }
+
+
     // -- PACKING
 
     public static ManagedObject pack(
@@ -585,25 +596,15 @@ public final class ManagedObjects {
         Optional<Bookmark> bookmark(final @Nullable ManagedObject adapter) {
 
             if(ManagedObjects.isNullOrUnspecifiedOrEmpty(adapter)
-                    || adapter.getSpecification().isValue()) {
+                    || adapter.getSpecification().isValue()
+                    || !ManagedObjects.isIdentifiable(adapter)) {
                 return Optional.empty();
             }
 
-            if(!ManagedObjects.isIdentifiable(adapter)) {
-                log.warn("about to create a random UUID bookmark for {}; this 
is probably an invalid code-path taken (TODO)",
-                        adapter.getSpecification());
-            }
-
             return ManagedObjects.spec(adapter)
                     .map(ObjectSpecification::getMetaModelContext)
                     .map(MetaModelContext::getObjectManager)
                     .map(objectManager->objectManager.bookmarkObject(adapter));
-
-    //TODO[2686] strictly forbid dummy UUID bookmark creation
-//            return ManagedObjects.isIdentifiable(adapter)
-//                    ? objectManager(adapter)
-//                            
.map(objectManager->objectManager.bookmarkObject(adapter))
-//                    : Optional.empty();
         }
     }
 
@@ -1160,4 +1161,5 @@ public final class ManagedObjects {
         }
     }
 
+
 }
diff --git 
a/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java
 
b/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java
index f02d81fe45..c123eef6f4 100644
--- 
a/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java
+++ 
b/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java
@@ -26,6 +26,7 @@ import org.springframework.context.annotation.Import;
 import org.apache.isis.commons.internal.os._OsUtil;
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.extensions.viewer.wicket.pdfjs.ui.IsisModuleExtPdfjsUi;
+import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
 import 
org.apache.isis.valuetypes.asciidoc.metamodel.IsisModuleValAsciidocMetaModel;
 import 
org.apache.isis.valuetypes.asciidoc.persistence.jpa.IsisModuleValAsciidocPersistenceJpa;
 import org.apache.isis.valuetypes.asciidoc.ui.wkt.IsisModuleValAsciidocUiWkt;
@@ -45,6 +46,7 @@ import demoapp.webapp.wicket.common.ui.DemoAppWicketCommon;
 @Import({
     // App-Manifest (Configuration)
     DemoAppManifestJpa.class,
+    IsisModuleSecurityBypass.class, // <-- bypass authentication
 
     // Metamodel
     IsisModuleValAsciidocMetaModel.class,
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 6dff64daff..82da9a3566 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
@@ -64,7 +64,7 @@ public class DomainObjectLinkTo implements 
ObjectAdapterLinkTo {
      * hook method
      */
     protected StringBuilder linkRef(final StringBuilder buf) {
-        String objectRef = ManagedObjects.stringifyElseFail(objectAdapter, 
"/");
+        final String objectRef = 
ManagedObjects.stringifyElseUnidentified(objectAdapter, "/");
         return buf.append("objects/").append(objectRef);
     }
 

Reply via email to