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 342f705d52 CAUSEWAY-3404: TextUtils/StringDelimiter: adds 
asDelimitedString() and withDelimiter(..)
342f705d52 is described below

commit 342f705d522f1d516a855e237732c18507b35f06
Author: Andi Huber <[email protected]>
AuthorDate: Thu May 11 10:16:11 2023 +0200

    CAUSEWAY-3404: TextUtils/StringDelimiter: adds asDelimitedString() and
    withDelimiter(..)
---
 .../org/apache/causeway/commons/io/TextUtils.java  | 24 ++++++++++++++++++++++
 .../causeway/commons/util/StringDelimiterTest.java | 21 +++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git 
a/commons/src/main/java/org/apache/causeway/commons/io/TextUtils.java 
b/commons/src/main/java/org/apache/causeway/commons/io/TextUtils.java
index 8540540658..d78626e87d 100644
--- a/commons/src/main/java/org/apache/causeway/commons/io/TextUtils.java
+++ b/commons/src/main/java/org/apache/causeway/commons/io/TextUtils.java
@@ -27,8 +27,10 @@ import java.io.OutputStreamWriter;
 import java.net.URL;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Scanner;
 import java.util.function.UnaryOperator;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.springframework.lang.Nullable;
@@ -261,10 +263,32 @@ public class TextUtils {
                     : this;
         }
 
+        /**
+         * Number of delimited {@link String} elements this {@link 
StringDelimiter} is holding.
+         */
         public int elementCount() {
             return elements.length;
         }
 
+        public String asDelimitedString() {
+            return stream().collect(Collectors.joining(delimiter));
+        }
+
+        @Override
+        public String toString() {
+            return String.format("StringDelimiter[delimiter=%s,elements=%s]",
+                    delimiter,
+                    Arrays.asList(elements));
+        }
+
+        /**
+         * Returns a new {@link StringDelimiter} instance that has all the
+         * delimited {@link String} elements of this but instead uses given 
{@code newDelimiter}.
+         */
+        public StringDelimiter withDelimiter(final @NonNull String 
newDelimiter) {
+            return new StringDelimiter(newDelimiter, elements);
+        }
+
     }
 
     // -- STRING CUTTER
diff --git 
a/commons/src/test/java/org/apache/causeway/commons/util/StringDelimiterTest.java
 
b/commons/src/test/java/org/apache/causeway/commons/util/StringDelimiterTest.java
index a6e64043dd..f487a8085c 100644
--- 
a/commons/src/test/java/org/apache/causeway/commons/util/StringDelimiterTest.java
+++ 
b/commons/src/test/java/org/apache/causeway/commons/util/StringDelimiterTest.java
@@ -81,6 +81,27 @@ class StringDelimiterTest {
                     .join(delimiter.parse("d")), "a", "b", "c", "d");
     }
 
+    @Test
+    void asDelimitedString() {
+        val delimiter = TextUtils.delimiter(".");
+        assertEquals("", delimiter.asDelimitedString());
+        assertEquals("a.b", delimiter.parse("a.b").asDelimitedString());
+    }
+
+    @Test
+    void withDelimiter() {
+        val delimiter = TextUtils.delimiter(".");
+        assertEquals("", delimiter.withDelimiter("/").asDelimitedString());
+        assertEquals("a/b", 
delimiter.parse("a.b").withDelimiter("/").asDelimitedString());
+    }
+
+    @Test
+    void toStringMethod() {
+        val delimiter = TextUtils.delimiter(".");
+        assertEquals("StringDelimiter[delimiter=.,elements=[]]", 
delimiter.toString());
+        assertEquals("StringDelimiter[delimiter=.,elements=[a, b]]", 
delimiter.parse("a.b").toString());
+    }
+
     // -- HELPER
 
     private static void assertThatDelimiterEquals(final 
TextUtils.StringDelimiter delimiter, final String...parts) {

Reply via email to