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/23 12:21:55 UTC

[isis] branch master updated: ISIS-2158: rendering: ellipsify object-identifier when not an entity

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 5720d69  ISIS-2158: rendering: ellipsify object-identifier when not an entity
5720d69 is described below

commit 5720d696c9275cf675e684f1dc49a74eaa0a7ca0
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jan 23 13:21:44 2020 +0100

    ISIS-2158: rendering: ellipsify object-identifier when not an entity
---
 .../mixins/metamodel/Object_objectIdentifier.java  | 11 +++--
 .../isis/applib/services/bookmark/Bookmark.java    |  4 ++
 .../isis/core/commons/internal/base/_Strings.java  | 49 +++++++++++++++++++++-
 3 files changed, 60 insertions(+), 4 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java
index f74af70..eef7817 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java
@@ -30,6 +30,8 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.mixins.MixinConstants;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
+import org.apache.isis.applib.services.metamodel.MetaModelService;
+import org.apache.isis.core.commons.internal.base._Strings;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;
@@ -39,6 +41,7 @@ import lombok.val;
 public class Object_objectIdentifier {
 
     @Inject private BookmarkService bookmarkService;
+    @Inject private MetaModelService mmService;
     
     private final Object holder;
 
@@ -56,10 +59,12 @@ public class Object_objectIdentifier {
     @MemberOrder(name = MixinConstants.METADATA_LAYOUT_GROUPNAME, sequence = "700.2")
     public String prop() {
         val bookmark = bookmarkService.bookmarkForElseThrow(this.holder);
-        return bookmark.getIdentifier();
+        val sort = mmService.sortOf(bookmark, MetaModelService.Mode.RELAXED);
+        if(sort.isEntity()) {
+            return bookmark.getIdentifier();    
+        }
+        return _Strings.ellipsifyAtStart(bookmark.getIdentifier(), 16, "…");
     }
-
-
     
 
 }
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 69f4658..5d42a8a 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
@@ -46,6 +46,10 @@ public class Bookmark implements Serializable {
 
     protected static final String SEPARATOR = ":";
     
+    /**
+     * corresponds directly to the object's specification-id 
+     * @see <tt>RootOid</tt> 
+     */
     @NonNull  private final String objectType;
     @NonNull  private final String identifier;
     @Nullable private final String hintId;
diff --git a/core/commons/src/main/java/org/apache/isis/core/commons/internal/base/_Strings.java b/core/commons/src/main/java/org/apache/isis/core/commons/internal/base/_Strings.java
index 151870d..98a342d 100644
--- a/core/commons/src/main/java/org/apache/isis/core/commons/internal/base/_Strings.java
+++ b/core/commons/src/main/java/org/apache/isis/core/commons/internal/base/_Strings.java
@@ -52,6 +52,8 @@ import static org.apache.isis.core.commons.internal.base._With.requires;
 import static org.apache.isis.core.commons.internal.base._With.requiresNotEmpty;
 import static org.apache.isis.core.commons.internal.functions._Predicates.not;
 
+import lombok.NonNull;
+
 /**
  * <h1>- internal use only -</h1>
  * <p>
@@ -432,6 +434,52 @@ public final class _Strings {
         return mapIfPresentElse(input, __->input.replaceAll("\\s+", replacement), null);
     }
 
+    /**
+     * ...xyz
+     * @param input
+     * @param maxLength
+     * @param ellipsis
+     * @return (non-null), ellipsified version of {@code input}, if {@code input} exceeds length {@code maxLength}
+     */
+    public static String ellipsifyAtStart(
+            @Nullable final CharSequence input, 
+            final int maxLength, 
+            @NonNull final CharSequence ellipsis) {
+        
+        if(input==null) {
+            return "";
+        }
+        if(input.length()<=maxLength) {   
+            return input.toString();
+        }
+        final int trimmedLength = maxLength - ellipsis.length();
+        final int end = input.length();
+        final int start = end - trimmedLength;
+        return String.join("", ellipsis, input.subSequence(start, end));
+    }
+    
+    /**
+     * abc...
+     * @param input
+     * @param maxLength
+     * @param ellipsis
+     * @return (non-null), ellipsified version of {@code input}, if {@code input} exceeds length {@code maxLength}
+     */
+    public static String ellipsifyAtEnd(
+            @Nullable final CharSequence input, 
+            final int maxLength, 
+            @NonNull final CharSequence ellipsis) {
+        
+        if(input==null) {
+            return "";
+        }
+        if(input.length()<=maxLength) {   
+            return input.toString();
+        }
+        final int trimmedLength = maxLength - ellipsis.length();
+        return String.join("", input.subSequence(0, trimmedLength), ellipsis);
+    }
+
     // -- READ FROM INPUT STREAM
 
     public static String read(@Nullable final InputStream input, Charset charset) {
@@ -579,5 +627,4 @@ public final class _Strings {
     }
 
 
-
 }