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/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new b589d44249 CAUSEWAY-3404: purge string utils for plural
b589d44249 is described below

commit b589d4424913f97c0c80f6355b3587c3a01eced9
Author: Andi Huber <[email protected]>
AuthorDate: Thu May 11 15:05:05 2023 +0200

    CAUSEWAY-3404: purge string utils for plural
---
 .../core/metamodel/commons/StringExtensions.java   | 39 ++--------------------
 .../specloader/specimpl/ObjectActionMixedIn.java   |  4 +--
 .../specimpl/OneToManyAssociationMixedIn.java      |  4 +--
 .../specimpl/OneToOneAssociationMixedIn.java       |  4 +--
 .../specimpl/_MixedInMemberNamingStrategy.java     | 34 ++++++++++---------
 .../core/metamodel/commons/NameUtilTest.java       | 19 -----------
 .../commons/StringUtils_camelLowerFirst.java       |  2 +-
 .../specimpl/MixedInMemberNamingStrategyTest.java  | 19 +++++++----
 8 files changed, 40 insertions(+), 85 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/commons/StringExtensions.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/commons/StringExtensions.java
index 2100b24363..8f3b8af22e 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/commons/StringExtensions.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/commons/StringExtensions.java
@@ -112,7 +112,7 @@ public final class StringExtensions {
     public static String asCamelLowerFirst(final String extendee) {
         final StringBuffer b = new StringBuffer(extendee.length());
         final StringTokenizer t = new StringTokenizer(extendee);
-        b.append(asLowerFirst(t.nextToken()));
+        b.append(_Strings.decapitalize(t.nextToken()));
         while (t.hasMoreTokens()) {
             final String token = t.nextToken();
             b.append(token.substring(0, 1).toUpperCase()); // replace spaces
@@ -127,28 +127,7 @@ public final class StringExtensions {
     }
 
     public static String asPascal(final String extendee) {
-        return capitalize(asCamel(extendee));
-    }
-
-    // ////////////////////////////////////////////////////////////
-    // capitalize, lowerFirst, firstWord
-    // ////////////////////////////////////////////////////////////
-
-    public static String capitalize(final String extendee) {
-        return _Strings.capitalize(extendee);
-    }
-
-    /**
-     * Simply forces first char to be lower case.
-     */
-    public static String asLowerFirst(final String extendee) {
-        if (_Strings.isNullOrEmpty(extendee)) {
-            return extendee;
-        }
-        if (extendee.length() == 1) {
-            return extendee.toLowerCase();
-        }
-        return extendee.substring(0, 1).toLowerCase() + extendee.substring(1);
+        return _Strings.capitalize(asCamel(extendee));
     }
 
     // ////////////////////////////////////////////////////////////
@@ -281,8 +260,6 @@ public final class StringExtensions {
     // copied in from Apache Commons
     // //////////////////////////////////////
 
-
-
     public static boolean startsWith(final String extendee, final String 
prefix) {
         final int length = prefix.length();
         if (length >= extendee.length()) {
@@ -325,18 +302,6 @@ public final class StringExtensions {
         return javaBaseName;
     }
 
-    public static String asPluralName(final String extendee) {
-        String pluralName;
-        if (extendee.endsWith("y")) {
-            pluralName = extendee.substring(0, extendee.length() - 1) + "ies";
-        } else if (extendee.endsWith("s") || extendee.endsWith("x")) {
-            pluralName = extendee + "es";
-        } else {
-            pluralName = extendee + 's';
-        }
-        return pluralName;
-    }
-
     public static String toCamelCase(final String extendee) {
         final String nameLower = extendee.toLowerCase();
         final StringBuilder buf = new StringBuilder();
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
index 6a1e5236dd..bdc4dd1dce 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
@@ -94,7 +94,7 @@ implements MixedInMember {
                     LogicalType.eager(
                             mixeeSpec.getCorrespondingClass(),
                             mixeeSpec.getLogicalTypeName()),
-                    _MixedInMemberNamingStrategy.determineIdFrom(mixinAction),
+                    _MixedInMemberNamingStrategy.mixinMemberId(mixinAction),
                     
mixinAction.getFacetedMethod().getFeatureIdentifier().getMemberParameterClassNames()),
                 mixinAction.getFacetedMethod(), false, false);
 
@@ -111,7 +111,7 @@ implements MixedInMember {
                 .isPresent();
 
         if(!isExplicitlyNamed) {
-            val memberName = 
_MixedInMemberNamingStrategy.determineNameFrom(mixinAction);
+            val memberName = 
_MixedInMemberNamingStrategy.mixinFriendlyName(mixinAction);
             this.addFacet(
                     new MemberNamedFacetForStaticMemberName(memberName, 
facetHolder));
         }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
index c0b520d3ee..8dc8d13a3b 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
@@ -133,7 +133,7 @@ implements MixedInMember {
                 .isPresent();
 
         if(!isExplicitlyNamed) {
-            String memberName = 
_MixedInMemberNamingStrategy.determineNameFrom(mixinAction);
+            String memberName = 
_MixedInMemberNamingStrategy.mixinFriendlyName(mixinAction);
             FacetUtil.addFacet(
                     new MemberNamedFacetForStaticMemberName(memberName, 
facetHolder));
         }
@@ -203,7 +203,7 @@ implements MixedInMember {
                 LogicalType.eager(
                         mixeeSpec.getCorrespondingClass(),
                         mixeeSpec.getLogicalTypeName()),
-                _MixedInMemberNamingStrategy.determineIdFrom(mixinAction));
+                _MixedInMemberNamingStrategy.mixinMemberId(mixinAction));
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
index 4dd814ad07..98b7cb7c5c 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
@@ -113,7 +113,7 @@ implements MixedInMember {
                 .isPresent();
 
         if(!isExplicitlyNamed) {
-            String memberName = 
_MixedInMemberNamingStrategy.determineNameFrom(mixinAction);
+            String memberName = 
_MixedInMemberNamingStrategy.mixinFriendlyName(mixinAction);
             FacetUtil.addFacet(
                     new MemberNamedFacetForStaticMemberName(memberName, 
facetHolder));
         }
@@ -186,7 +186,7 @@ implements MixedInMember {
                     LogicalType.eager(
                             mixeeSpec.getCorrespondingClass(),
                             mixeeSpec.getLogicalTypeName()),
-                    _MixedInMemberNamingStrategy.determineIdFrom(mixinAction));
+                    _MixedInMemberNamingStrategy.mixinMemberId(mixinAction));
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/_MixedInMemberNamingStrategy.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/_MixedInMemberNamingStrategy.java
index d8405f2a09..9016ce306b 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/_MixedInMemberNamingStrategy.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/_MixedInMemberNamingStrategy.java
@@ -23,6 +23,7 @@ import java.util.Objects;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.core.metamodel.commons.StringExtensions;
 
+import lombok.NonNull;
 import lombok.experimental.UtilityClass;
 
 @UtilityClass
@@ -32,16 +33,24 @@ class _MixedInMemberNamingStrategy {
      * @param mixinActionAsRegular - first pass MM introspection produces 
regular ObjectAction instances
      *              for mixin main methods
      */
-    String determineNameFrom(final ObjectActionDefault mixinActionAsRegular) {
-        return _Strings.capitalize(suffix(mixinActionAsRegular));
+    String mixinFriendlyName(final @NonNull ObjectActionDefault 
mixinActionAsRegular) {
+        return 
mixinFriendlyName(mixinActionAsRegular.getFeatureIdentifier().getClassNaturalName());
+    }
+
+    String mixinFriendlyName(final @NonNull String mixinClassSimpleName) {
+        return _Strings.capitalize(suffix(mixinClassSimpleName));
     }
 
     /**
      * @param mixinActionAsRegular - first pass MM introspection produces 
regular ObjectAction instances
      *              for mixin main methods
      */
-    String determineIdFrom(final ObjectActionDefault mixinActionAsRegular) {
-        return 
StringExtensions.asCamelLowerFirst(compress(suffix(mixinActionAsRegular)));
+    String mixinMemberId(final @NonNull ObjectActionDefault 
mixinActionAsRegular) {
+        return 
mixinMemberId(mixinActionAsRegular.getFeatureIdentifier().getClassNaturalName());
+    }
+
+    String mixinMemberId(final @NonNull String mixinClassSimpleName) {
+        return 
StringExtensions.asCamelLowerFirst(compress(suffix(mixinClassSimpleName)));
     }
 
     // -- HELPER
@@ -50,21 +59,16 @@ class _MixedInMemberNamingStrategy {
         return suffix.replaceAll(" ", "");
     }
 
-    private static String suffix(final ObjectActionDefault 
mixinActionAsRegular) {
-        return 
deriveMemberNameFrom(mixinActionAsRegular.getFeatureIdentifier().getClassNaturalName());
-    }
-
-    // subject of JUnit testing
-    String deriveMemberNameFrom(final String mixinClassName) {
-        final String deriveFromUnderscore = derive(mixinClassName, "_");
-        if(!Objects.equals(mixinClassName, deriveFromUnderscore)) {
+    private static String suffix(final String mixinClassSimpleName) {
+        final String deriveFromUnderscore = derive(mixinClassSimpleName, "_");
+        if(!Objects.equals(mixinClassSimpleName, deriveFromUnderscore)) {
             return deriveFromUnderscore;
         }
-        final String deriveFromDollar = derive(mixinClassName, "$");
-        if(!Objects.equals(mixinClassName, deriveFromDollar)) {
+        final String deriveFromDollar = derive(mixinClassSimpleName, "$");
+        if(!Objects.equals(mixinClassSimpleName, deriveFromDollar)) {
             return deriveFromDollar;
         }
-        return mixinClassName;
+        return mixinClassSimpleName;
     }
 
     private String derive(final String singularName, final String separator) {
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/commons/NameUtilTest.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/commons/NameUtilTest.java
index 5bda39675e..f52afa396e 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/commons/NameUtilTest.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/commons/NameUtilTest.java
@@ -55,23 +55,4 @@ class NameUtilTest {
         assertEquals("Almost Normal english sentence", 
StringExtensions.asNaturalName2("Almost Normal english sentence"));
     }
 
-    @Test
-    void pluralNameAdd_S() {
-        assertEquals("Cans", StringExtensions.asPluralName("Can"));
-        assertEquals("Spaces", StringExtensions.asPluralName("Space"));
-        assertEquals("Noses", StringExtensions.asPluralName("Nose"));
-    }
-
-    @Test
-    void pluralNameReplace_Y_With_IES() {
-        assertEquals("Babies", StringExtensions.asPluralName("Baby"));
-        assertEquals("Cities", StringExtensions.asPluralName("City"));
-    }
-
-    @Test
-    void pluralNameReplaceAdd_ES() {
-        assertEquals("Foxes", StringExtensions.asPluralName("Fox"));
-        assertEquals("Bosses", StringExtensions.asPluralName("Boss"));
-    }
-
 }
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/commons/StringUtils_camelLowerFirst.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/commons/StringUtils_camelLowerFirst.java
index 05bbd3f4ab..6de575e221 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/commons/StringUtils_camelLowerFirst.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/commons/StringUtils_camelLowerFirst.java
@@ -26,7 +26,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
 class StringUtils_camelLowerFirst {
 
     @Test
-    public void asLowerCase() {
+    void camelLowerFirst() {
         assertThat(StringExtensions.asCamelLowerFirst("An Upper Case"), 
is("anUpperCase"));
         assertThat(StringExtensions.asCamelLowerFirst("a Lower Case"), 
is("aLowerCase"));
         assertThat(StringExtensions.asCamelLowerFirst("AnUpperCase"), 
is("anUpperCase"));
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/specloader/specimpl/MixedInMemberNamingStrategyTest.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/specloader/specimpl/MixedInMemberNamingStrategyTest.java
index 99d35d63cd..7bf7b74e97 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/specloader/specimpl/MixedInMemberNamingStrategyTest.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/specloader/specimpl/MixedInMemberNamingStrategyTest.java
@@ -30,21 +30,26 @@ class MixedInMemberNamingStrategyTest {
 
     @RequiredArgsConstructor
     enum Scenario {
-        SINGLE_UNDERSCORE("Customer_placeOrder", "placeOrder"),
-        SINGLE_DOLLAR("Customer$placeOrder", "placeOrder"),
-        EXACTLY_UNDERSCORE("_", "_"),
-        ENDS_WITH_UNDERSCORE("abc_", "abc_"),
-        HAS_NO_UNDERSCORE("defghij", "defghij"),
-        CONTAINS_MORE_THAN_ONE_UNDERSCORE("abc_def_ghi", "ghi")
+        SINGLE_UNDERSCORE("Customer_placeOrder", "placeOrder", "PlaceOrder"),
+        SINGLE_DOLLAR("Customer$placeOrder", "placeOrder", "PlaceOrder"),
+        EXACTLY_UNDERSCORE("_", "_", "_"),
+        ENDS_WITH_UNDERSCORE("abc_", "abc_", "Abc_"),
+        HAS_NO_UNDERSCORE("lock", "lock", "Lock"),
+        CONTAINS_MORE_THAN_ONE_UNDERSCORE("ApplicationUser_default_lock", 
"lock", "Lock")
         ;
 
         final String mixinClassSimpleName;
         final String expectedMemberId;
+        final String expectedFriendlyName;
 
         void verify() {
             assertThat(
-                    
_MixedInMemberNamingStrategy.deriveMemberNameFrom(mixinClassSimpleName),
+                    
_MixedInMemberNamingStrategy.mixinMemberId(mixinClassSimpleName),
                     is(expectedMemberId));
+
+            assertThat(
+                    
_MixedInMemberNamingStrategy.mixinFriendlyName(mixinClassSimpleName),
+                    is(expectedFriendlyName));
         }
 
         @Override

Reply via email to