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 2022/08/09 07:06:35 UTC

[isis] branch master updated: ISIS-3115: simplifies IdStringifier.Abstract

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 ab922d83d4 ISIS-3115: simplifies IdStringifier.Abstract<T>
ab922d83d4 is described below

commit ab922d83d4a3c3997b604c15b2ae6bcda07879f5
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Aug 9 09:06:28 2022 +0200

    ISIS-3115: simplifies IdStringifier.Abstract<T>
---
 .../applib/services/bookmark/IdStringifier.java    | 35 ++++++----------------
 .../idstringifiers/IdStringifierForByte.java       |  6 ++--
 .../idstringifiers/IdStringifierForCharacter.java  |  2 +-
 .../idstringifiers/IdStringifierForInteger.java    |  6 ++--
 .../idstringifiers/IdStringifierForLong.java       |  6 ++--
 .../idstringifiers/IdStringifierForShort.java      |  6 ++--
 6 files changed, 26 insertions(+), 35 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
index 6223e0accf..75a58e8b2d 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
@@ -20,7 +20,7 @@
 
 package org.apache.isis.applib.services.bookmark;
 
-import org.springframework.lang.Nullable;
+import org.springframework.util.ClassUtils;
 
 import lombok.NonNull;
 import lombok.val;
@@ -86,31 +86,20 @@ public interface IdStringifier<T> {
         protected final static char SEPARATOR = '_';
 
         /**
-         * eg <code>Integer.class</code>, or JDO-specific <code>DatastoreId</code>, or a custom class for application-defined PKs.
+         * eg <code>Integer.class</code>, or JDO-specific <code>DatastoreId</code>,
+         * or a custom class for application-defined PKs.
          */
-        private final Class<T> valueClass;
-        /**
-         * Allows for a Stringifier to handle (for example) both <code>Integer.class</code> and <code>int.class</code>.
-         */
-        private final Class<T> primitiveValueClassIfAny;
+        private final Class<?> resolvedClass;
 
-        public Abstract(
+        protected Abstract(
                 final @NonNull Class<T> handledClass) {
-            this(handledClass, null);
-        }
-        public Abstract(
-                final Class<T> valueClass,
-                final @Nullable Class<T> primitiveClass
-                ) {
-            this.valueClass = valueClass;
-            this.primitiveValueClassIfAny = primitiveClass;
+            this.resolvedClass = ClassUtils.resolvePrimitiveIfNecessary(handledClass);
         }
 
         @Override
         public boolean handles(final @NonNull Class<?> candidateValueClass) {
-            return valueClass.isAssignableFrom(candidateValueClass)
-                    || primitiveValueClassIfAny != null
-                    && primitiveValueClassIfAny.isAssignableFrom(candidateValueClass);
+            val reolvedCandidateClass = ClassUtils.resolvePrimitiveIfNecessary(candidateValueClass);
+            return resolvedClass.isAssignableFrom(reolvedCandidateClass);
         }
 
         /**
@@ -141,13 +130,7 @@ public interface IdStringifier<T> {
         public AbstractWithPrefix(
                 @NonNull final Class<T> handledClass,
                 @NonNull final String typeCode) {
-            this(handledClass, typeCode, null);
-        }
-        public AbstractWithPrefix(
-                @NonNull final Class<T> handledClass,
-                @NonNull final String typeCode,
-                final @Nullable Class<T> primitiveClass) {
-            super(handledClass, primitiveClass);
+            super(handledClass);
             this.prefix = typeCode + SEPARATOR;
         }
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForByte.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForByte.java
index af75dd86b3..51b6b69d62 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForByte.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForByte.java
@@ -33,11 +33,13 @@ import lombok.NonNull;
 public class IdStringifierForByte extends IdStringifier.Abstract<Byte> {
 
     public IdStringifierForByte() {
-        super(Byte.class, byte.class);
+        super(Byte.class);
     }
 
     @Override
-    public Byte destring(final @NonNull String stringified, @NonNull Class<?> targetEntityClass) {
+    public Byte destring(
+            final @NonNull String stringified,
+            final @NonNull Class<?> targetEntityClass) {
         return Byte.parseByte(stringified);
     }
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForCharacter.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForCharacter.java
index 80eb05b834..144611eef3 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForCharacter.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForCharacter.java
@@ -38,7 +38,7 @@ import lombok.NonNull;
 public class IdStringifierForCharacter extends IdStringifier.Abstract<Character> {
 
     public IdStringifierForCharacter() {
-        super(Character.class, char.class);
+        super(Character.class);
     }
 
     static final List<Character> NON_SAFE_URL_CHARS = IdStringifierForString.NON_SAFE_URL_CHARS.stream().map(x -> x.charAt(0)).collect(Collectors.toList());
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForInteger.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForInteger.java
index 8a82a6dcdf..e1ec5ab890 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForInteger.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForInteger.java
@@ -33,11 +33,13 @@ import lombok.NonNull;
 public class IdStringifierForInteger extends IdStringifier.Abstract<Integer> {
 
     public IdStringifierForInteger() {
-        super(Integer.class, int.class);
+        super(Integer.class);
     }
 
     @Override
-    public Integer destring(final @NonNull String stringified, @NonNull Class<?> targetEntityClass) {
+    public Integer destring(
+            final @NonNull String stringified,
+            final @NonNull Class<?> targetEntityClass) {
         return Integer.parseInt(stringified);
     }
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForLong.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForLong.java
index b4a8700179..73dddbce29 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForLong.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForLong.java
@@ -33,11 +33,13 @@ import lombok.NonNull;
 public class IdStringifierForLong extends IdStringifier.Abstract<Long> {
 
     public IdStringifierForLong() {
-        super(Long.class, long.class);
+        super(Long.class);
     }
 
     @Override
-    public Long destring(final @NonNull String stringified, @NonNull Class<?> targetEntityClass) {
+    public Long destring(
+            final @NonNull String stringified,
+            final @NonNull Class<?> targetEntityClass) {
         return Long.parseLong(stringified);
     }
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForShort.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForShort.java
index 0674da6c93..99f6d7125d 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForShort.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForShort.java
@@ -33,11 +33,13 @@ import lombok.NonNull;
 public class IdStringifierForShort extends IdStringifier.Abstract<Short> {
 
     public IdStringifierForShort() {
-        super(Short.class, short.class);
+        super(Short.class);
     }
 
     @Override
-    public Short destring(final @NonNull String stringified, @NonNull Class<?> targetEntityClass) {
+    public Short destring(
+            final @NonNull String stringified,
+            final @NonNull Class<?> targetEntityClass) {
         return Short.parseShort(stringified);
     }
 }