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 37be2f361a CAUSEWAY-3404: TextUtils: adds I/O methods
37be2f361a is described below

commit 37be2f361a32ffe2874e99ee626fb8b63a621743
Author: Andi Huber <[email protected]>
AuthorDate: Tue May 9 07:44:22 2023 +0200

    CAUSEWAY-3404: TextUtils: adds I/O methods
---
 .../org/apache/causeway/applib/value/Markup.java   |   2 +-
 commons/src/main/java/module-info.java             |   1 -
 .../causeway/commons/internal/base/_Text.java      |  96 +-----------
 .../internal/debug/xray/graphics/_Graphics.java    |   2 +-
 .../commons/internal/exceptions/_Exceptions.java   |   2 +-
 .../causeway/commons/internal/os/_OsUtil.java      |   4 +-
 .../org/apache/causeway/commons/io/DataSource.java |   3 +-
 .../causeway/commons/{util => io}/TextUtils.java   | 163 ++++++++++++++++++++-
 .../causeway/commons/internal/base/TextTest.java   |   2 +-
 .../causeway/commons/util/StringCutterTest.java    |   2 +
 .../actions/action/invocation/IdentifierUtil.java  |   2 +-
 .../TableColumnOrderServiceUsingTxtFile.java       |   2 +-
 .../applib/value/CalendarEventSemantics.java       |   4 +-
 .../testdomain/value/ValueSemanticsTester.java     |   2 +-
 .../model/valuetypes/ValueTypeExample.java         |   2 +-
 .../fixturescripts/ExecutionParametersDefault.java |   2 +-
 .../integtestsupport/applib/ApprovalsOptions.java  |   2 +-
 .../apache/causeway/tooling/c4/test/C4Test.java    |   5 +-
 .../cli/adocfix/OrphanedIncludeStatementFixer.java |   6 +-
 .../test/adocfix/IncludeStatementFixerTest.java    |   6 +-
 .../j2adoc/util/AsciiDocIncludeTagFilter.java      |  16 +-
 .../tooling/j2adoc/util/ResourceCoordinates.java   |   2 +-
 .../tooling/j2adoc/convert/HtmlToAsciiDocTest.java |   2 +-
 .../j2adoc/test/ExampleReferenceRewriter.java      |  46 +++---
 .../causeway/tooling/j2adoc/test/J2AdocTest.java   |   6 +-
 .../demoshowcases/value/ValueTypeGenTemplate.java  |   9 +-
 .../value/ValueTypeGenTemplateTest.java            |   7 +-
 .../tooling/model4adoc/AsciiDocFactory.java        |   2 +-
 .../causeway/tooling/model4adoc/NodeWriter.java    |   2 +-
 .../model4adoc/include/IncludeStatements.java      |   2 +-
 .../test/ast/AbstractAsciiDocWriterTest.java       |  27 ++--
 .../projectmodel/test/GradleSettingsTest.java      |   4 +-
 .../viewer/resources/ResourceAbstract.java         |   2 +-
 .../wicket/ui/util/LicensedTextTemplate.java       |   2 +-
 .../viewer/wicket/ui/util/WktHeaderItems.java      |   4 +-
 .../services/TranslationsResolverWicket.java       |   4 +-
 36 files changed, 257 insertions(+), 190 deletions(-)

diff --git 
a/api/applib/src/main/java/org/apache/causeway/applib/value/Markup.java 
b/api/applib/src/main/java/org/apache/causeway/applib/value/Markup.java
index 1ec9a30cc2..01df381b28 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/value/Markup.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/value/Markup.java
@@ -31,7 +31,7 @@ import org.apache.causeway.applib.CausewayModuleApplib;
 import org.apache.causeway.applib.annotation.Value;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.internal.base._Text;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.EqualsAndHashCode;
 
diff --git a/commons/src/main/java/module-info.java 
b/commons/src/main/java/module-info.java
index 2692cbcd4b..48f24ff8c3 100644
--- a/commons/src/main/java/module-info.java
+++ b/commons/src/main/java/module-info.java
@@ -24,7 +24,6 @@ module org.apache.causeway.commons {
     exports org.apache.causeway.commons.handler;
     exports org.apache.causeway.commons.having;
     exports org.apache.causeway.commons.io;
-    exports org.apache.causeway.commons.util;
     // internals exported as well
     exports org.apache.causeway.commons.internal;
     exports org.apache.causeway.commons.internal.assertions;
diff --git 
a/commons/src/main/java/org/apache/causeway/commons/internal/base/_Text.java 
b/commons/src/main/java/org/apache/causeway/commons/internal/base/_Text.java
index 194774ff6f..5c95a26d6e 100644
--- a/commons/src/main/java/org/apache/causeway/commons/internal/base/_Text.java
+++ b/commons/src/main/java/org/apache/causeway/commons/internal/base/_Text.java
@@ -18,16 +18,6 @@
  */
 package org.apache.causeway.commons.internal.base;
 
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStreamWriter;
-import java.net.URL;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Scanner;
 import java.util.StringTokenizer;
 import java.util.function.ToIntFunction;
 import java.util.stream.Collectors;
@@ -39,12 +29,11 @@ import org.springframework.lang.Nullable;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.assertions._Assert;
 import org.apache.causeway.commons.internal.collections._Lists;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.Getter;
 import lombok.NonNull;
 import lombok.Setter;
-import lombok.SneakyThrows;
 import lombok.val;
 
 /**
@@ -72,76 +61,6 @@ public final class _Text {
         .collect(Can.toCan());
     }
 
-    /**
-     * Reads content from given {@code input} into a {@link Can} of lines,
-     * removing new line characters {@code \n,\r} in the process.
-     * @param input - nullable
-     * @return non-null
-     */
-    public static Can<String> readLines(
-            final @Nullable InputStream input,
-            final @NonNull  Charset charset){
-        if(input==null) {
-            return Can.empty();
-        }
-        val lines = new ArrayList<String>();
-        try(Scanner scanner = new Scanner(input, charset.name())){
-            scanner.useDelimiter("\\n");
-            while(scanner.hasNext()) {
-                var line = scanner.next()
-                        .replace("\r", "");
-                if(lines.size()==0) {
-                    line = stripBom(line); // special handling of first line
-                }
-                lines.add(line);
-            }
-        }
-        return Can.ofCollection(lines);
-    }
-
-    @SneakyThrows
-    public static Can<String> readLinesFromResource(
-            final @NonNull Class<?> resourceLocation,
-            final @NonNull String resourceName,
-            final @NonNull Charset charset) {
-        try(val input = resourceLocation.getResourceAsStream(resourceName)){
-            return readLines(input, charset);
-        }
-    }
-
-    @SneakyThrows
-    public static Can<String> readLinesFromUrl(
-            final @NonNull URL url,
-            final @NonNull Charset charset) {
-        try(val input = url.openStream()){
-            return readLines(input, charset);
-        }
-    }
-
-    @SneakyThrows
-    public static Can<String> readLinesFromFile(
-            final @NonNull File file,
-            final @NonNull Charset charset) {
-        try(val input = new FileInputStream(file)){
-            return readLines(input, charset);
-        }
-    }
-
-    // -- WRITING
-
-    @SneakyThrows
-    public static void writeLinesToFile(
-            final @NonNull Iterable<String> lines,
-            final @NonNull File file,
-            final @NonNull Charset charset) {
-
-        try(val bw = new BufferedWriter(new OutputStreamWriter(new 
FileOutputStream(file), charset))) {
-            for(val line : lines) {
-                bw.append(line).append("\n");
-            }
-        }
-    }
-
     // -- NORMALIZING
 
     public static String normalize(final @Nullable String text) {
@@ -401,16 +320,5 @@ public final class _Text {
         return constraintLines.stream();
     }
 
-    /**
-     * If line has a BOM 65279 (0xFEFF) leading character, strip it.
-     * <p>
-     * Some UTF-8 formatted files may have a BOM signature at their start.
-     */
-    private static String stripBom(final String line) {
-        if(line.length()>0
-                && line.charAt(0)==65279) {
-            return line.substring(1);
-        }
-        return line;
-    }
+
 }
diff --git 
a/commons/src/main/java/org/apache/causeway/commons/internal/debug/xray/graphics/_Graphics.java
 
b/commons/src/main/java/org/apache/causeway/commons/internal/debug/xray/graphics/_Graphics.java
index 4e42871b93..4850c0ce67 100644
--- 
a/commons/src/main/java/org/apache/causeway/commons/internal/debug/xray/graphics/_Graphics.java
+++ 
b/commons/src/main/java/org/apache/causeway/commons/internal/debug/xray/graphics/_Graphics.java
@@ -33,7 +33,7 @@ import java.util.Optional;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.base._Refs;
 import org.apache.causeway.commons.internal.base._Text;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
diff --git 
a/commons/src/main/java/org/apache/causeway/commons/internal/exceptions/_Exceptions.java
 
b/commons/src/main/java/org/apache/causeway/commons/internal/exceptions/_Exceptions.java
index 8bd89d02b1..350e7b4e91 100644
--- 
a/commons/src/main/java/org/apache/causeway/commons/internal/exceptions/_Exceptions.java
+++ 
b/commons/src/main/java/org/apache/causeway/commons/internal/exceptions/_Exceptions.java
@@ -35,7 +35,7 @@ import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.internal.collections._Lists;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.NonNull;
 import lombok.val;
diff --git 
a/commons/src/main/java/org/apache/causeway/commons/internal/os/_OsUtil.java 
b/commons/src/main/java/org/apache/causeway/commons/internal/os/_OsUtil.java
index 055f067991..2c28ec3fde 100644
--- a/commons/src/main/java/org/apache/causeway/commons/internal/os/_OsUtil.java
+++ b/commons/src/main/java/org/apache/causeway/commons/internal/os/_OsUtil.java
@@ -29,8 +29,8 @@ import org.springframework.lang.Nullable;
 
 import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.commons.internal.base._Text;
 import org.apache.causeway.commons.internal.exceptions._Exceptions;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.SneakyThrows;
 import lombok.val;
@@ -93,7 +93,7 @@ public class _OsUtil {
     public void thereCanBeOnlyOne(final File pidFile) {
 
         if(pidFile.exists()) {
-            _Text.readLinesFromFile(pidFile, StandardCharsets.UTF_8)
+            TextUtils.readLinesFromFile(pidFile, StandardCharsets.UTF_8)
             .filter(_Strings::isNotEmpty)
             .getFirst()
             .ifPresent(pid->terminateProcessByPid(pid));
diff --git 
a/commons/src/main/java/org/apache/causeway/commons/io/DataSource.java 
b/commons/src/main/java/org/apache/causeway/commons/io/DataSource.java
index 8c60cabb4c..f11203d917 100644
--- a/commons/src/main/java/org/apache/causeway/commons/io/DataSource.java
+++ b/commons/src/main/java/org/apache/causeway/commons/io/DataSource.java
@@ -41,7 +41,6 @@ import org.apache.causeway.commons.functional.Try;
 import org.apache.causeway.commons.internal.base._Bytes;
 import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.commons.internal.base._Text;
 import org.apache.causeway.commons.io.HashUtils.HashAlgorithm;
 
 import lombok.NonNull;
@@ -126,7 +125,7 @@ public interface DataSource {
      * If the underlying {@link InputStream} is null a success {@link Try} is 
returned, containing a null value.
      */
     default Try<Can<String>> tryReadAsLines(final @NonNull Charset charset) {
-        return tryReadAndApply(inputStream->_Text.readLines(inputStream, 
charset));
+        return 
tryReadAndApply(inputStream->TextUtils.readLinesFromInputStream(inputStream, 
charset));
     }
 
     /**
diff --git 
a/commons/src/main/java/org/apache/causeway/commons/util/TextUtils.java 
b/commons/src/main/java/org/apache/causeway/commons/io/TextUtils.java
similarity index 61%
rename from 
commons/src/main/java/org/apache/causeway/commons/util/TextUtils.java
rename to commons/src/main/java/org/apache/causeway/commons/io/TextUtils.java
index 4b06983509..f7ec016dda 100644
--- a/commons/src/main/java/org/apache/causeway/commons/util/TextUtils.java
+++ b/commons/src/main/java/org/apache/causeway/commons/io/TextUtils.java
@@ -16,8 +16,18 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.commons.util;
+package org.apache.causeway.commons.io;
 
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStreamWriter;
+import java.net.URL;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Scanner;
 import java.util.function.UnaryOperator;
 import java.util.stream.Stream;
 
@@ -31,10 +41,12 @@ import lombok.AccessLevel;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NonNull;
+import lombok.SneakyThrows;
+import lombok.val;
 import lombok.experimental.UtilityClass;
 
 /**
- * Utilities for text processing.
+ * Utilities for text processing and text I/O.
  *
  * @since 2.0 {@index}
  */
@@ -50,7 +62,7 @@ public class TextUtils {
      * @return non-null
      * @apiNote Java 11+ provides {@code String.lines()}
      */
-    public static Stream<String> streamLines(final @Nullable String text){
+    public Stream<String> streamLines(final @Nullable String text){
         return _Strings.splitThenStream(text, "\n")
                 .map(s->s.replace("\r", ""));
     }
@@ -61,10 +73,138 @@ public class TextUtils {
      * @param text - nullable
      * @return non-null
      */
-    public static Can<String> readLines(final @Nullable String text){
+    public Can<String> readLines(final @Nullable String text){
         return Can.ofStream(streamLines(text));
     }
 
+    /**
+     * Reads content from given {@code input} into a {@link Can} of lines,
+     * removing new line characters {@code \n,\r}
+     * and BOM file header (if any) in the process.
+     * @param input - nullable
+     * @return non-null
+     */
+    public Can<String> readLinesFromInputStream(
+            final @Nullable InputStream input,
+            final @NonNull  Charset charset){
+        if(input==null) {
+            return Can.empty();
+        }
+        val lines = new ArrayList<String>();
+        try(Scanner scanner = new Scanner(input, charset.name())){
+            scanner.useDelimiter("\\n");
+            while(scanner.hasNext()) {
+                var line = scanner.next()
+                        .replace("\r", "");
+                if(lines.size()==0) {
+                    line = stripBom(line); // special handling of first line
+                }
+                lines.add(line);
+            }
+        }
+        return Can.ofCollection(lines);
+    }
+
+    /**
+     * Reads content from given resource into a {@link Can} of lines,
+     * removing new line characters {@code \n,\r}
+     * and BOM file header (if any) in the process.
+     * @return non-null
+     * @see #readLinesFromInputStream(InputStream, Charset)
+     */
+    @SneakyThrows
+    public Can<String> readLinesFromResource(
+            final @NonNull Class<?> resourceLocation,
+            final @NonNull String resourceName,
+            final @NonNull Charset charset) {
+        try(val input = resourceLocation.getResourceAsStream(resourceName)){
+            return readLinesFromInputStream(input, charset);
+        }
+    }
+
+    /**
+     * Reads content from given {@link URL} into a {@link Can} of lines,
+     * removing new line characters {@code \n,\r}
+     * and BOM file header (if any) in the process.
+     * @return non-null
+     * @see #readLinesFromInputStream(InputStream, Charset)
+     */
+    @SneakyThrows
+    public Can<String> readLinesFromUrl(
+            final @NonNull URL url,
+            final @NonNull Charset charset) {
+        try(val input = url.openStream()){
+            return readLinesFromInputStream(input, charset);
+        }
+    }
+
+    /**
+     * Reads content from given {@link File} into a {@link Can} of lines,
+     * removing new line characters {@code \n,\r}
+     * and BOM file header (if any) in the process.
+     * @return non-null
+     * @see #readLinesFromInputStream(InputStream, Charset)
+     */
+    @SneakyThrows
+    public Can<String> readLinesFromFile(
+            final @NonNull File file,
+            final @NonNull Charset charset) {
+        try(val input = new FileInputStream(file)){
+            return readLinesFromInputStream(input, charset);
+        }
+    }
+
+    /**
+     * Reads content from given {@link DataSource} into a {@link Can} of lines,
+     * removing new line characters {@code \n,\r}
+     * and BOM file header (if any) in the process.
+     * @return non-null
+     * @see #readLinesFromInputStream(InputStream, Charset)
+     */
+    public Can<String> readLinesFromDataSource(
+            final @NonNull DataSource dataSource,
+            final @NonNull Charset charset) {
+        return dataSource.tryReadAsLines(charset)
+                .valueAsNonNullElseFail();
+    }
+
+    // -- WRITING
+
+    /**
+     * Writes given lines to given {@link File},
+     * using new line character {@code \n}.
+     */
+    @SneakyThrows
+    public void writeLinesToFile(
+            final @NonNull Iterable<String> lines,
+            final @NonNull File file,
+            final @NonNull Charset charset) {
+
+        try(val bw = new BufferedWriter(new OutputStreamWriter(new 
FileOutputStream(file), charset))) {
+            for(val line : lines) {
+                bw.append(line).append("\n");
+            }
+        }
+    }
+
+    /**
+     * Writes given lines to given {@link DataSink},
+     * using new line character {@code \n}.
+     */
+    public void writeLinesToDataSink(
+            final @NonNull Iterable<String> lines,
+            final @NonNull DataSink dataSink,
+            final @NonNull Charset charset) {
+
+        dataSink.writeAll(os->{
+            try(val bw = new BufferedWriter(new OutputStreamWriter(os, 
charset))) {
+                for(val line : lines) {
+                    bw.append(line).append("\n");
+                }
+            }
+        });
+    }
+
     // -- STRING CUTTER
 
     public StringCutter cutter(final @NonNull String value) {
@@ -239,4 +379,19 @@ public class TextUtils {
 
     }
 
+    // -- HELPER
+
+    /**
+     * If line has a BOM 65279 (0xFEFF) leading character, strip it.
+     * <p>
+     * Some UTF-8 formatted files may have a BOM signature at their start.
+     */
+    private String stripBom(final String line) {
+        if(line.length()>0
+                && line.charAt(0)==65279) {
+            return line.substring(1);
+        }
+        return line;
+    }
+
 }
diff --git 
a/commons/src/test/java/org/apache/causeway/commons/internal/base/TextTest.java 
b/commons/src/test/java/org/apache/causeway/commons/internal/base/TextTest.java
index 93caef6c5d..1b7edcc5f0 100644
--- 
a/commons/src/test/java/org/apache/causeway/commons/internal/base/TextTest.java
+++ 
b/commons/src/test/java/org/apache/causeway/commons/internal/base/TextTest.java
@@ -23,7 +23,7 @@ import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 
 class TextTest {
 
diff --git 
a/commons/src/test/java/org/apache/causeway/commons/util/StringCutterTest.java 
b/commons/src/test/java/org/apache/causeway/commons/util/StringCutterTest.java
index a7585ca0ec..df9803f760 100644
--- 
a/commons/src/test/java/org/apache/causeway/commons/util/StringCutterTest.java
+++ 
b/commons/src/test/java/org/apache/causeway/commons/util/StringCutterTest.java
@@ -22,6 +22,8 @@ import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+import org.apache.causeway.commons.io.TextUtils;
+
 class StringCutterTest {
 
     @Test
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/IdentifierUtil.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/IdentifierUtil.java
index 58b6014a74..71f89d7d57 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/IdentifierUtil.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/IdentifierUtil.java
@@ -24,7 +24,7 @@ import org.apache.causeway.applib.Identifier;
 import org.apache.causeway.applib.id.LogicalType;
 import org.apache.causeway.applib.services.command.Command;
 import org.apache.causeway.commons.internal.exceptions._Exceptions;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 import org.apache.causeway.core.metamodel.commons.StringExtensions;
 import org.apache.causeway.core.metamodel.interactions.InteractionHead;
 import 
org.apache.causeway.core.metamodel.interactions.managed.ActionInteractionHead;
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/tablecol/TableColumnOrderServiceUsingTxtFile.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/tablecol/TableColumnOrderServiceUsingTxtFile.java
index 6e425be989..1dc3367a9c 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/tablecol/TableColumnOrderServiceUsingTxtFile.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/tablecol/TableColumnOrderServiceUsingTxtFile.java
@@ -32,7 +32,7 @@ import 
org.apache.causeway.applib.annotation.PriorityPrecedence;
 import org.apache.causeway.applib.annotation.PropertyLayout;
 import org.apache.causeway.applib.services.tablecol.TableColumnOrderService;
 import org.apache.causeway.commons.internal.resources._Resources;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 import org.apache.causeway.core.metamodel.CausewayModuleCoreMetamodel;
 
 import lombok.val;
diff --git 
a/extensions/vw/fullcalendar/applib/src/main/java/org/apache/causeway/extensions/fullcalendar/applib/value/CalendarEventSemantics.java
 
b/extensions/vw/fullcalendar/applib/src/main/java/org/apache/causeway/extensions/fullcalendar/applib/value/CalendarEventSemantics.java
index 65d01f7ce1..faf3c38cbc 100644
--- 
a/extensions/vw/fullcalendar/applib/src/main/java/org/apache/causeway/extensions/fullcalendar/applib/value/CalendarEventSemantics.java
+++ 
b/extensions/vw/fullcalendar/applib/src/main/java/org/apache/causeway/extensions/fullcalendar/applib/value/CalendarEventSemantics.java
@@ -50,7 +50,7 @@ import 
org.apache.causeway.applib.value.semantics.ValueSemanticsAbstract;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.base._StringInterpolation;
 import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.commons.internal.base._Text;
+import org.apache.causeway.commons.io.TextUtils;
 import org.apache.causeway.schema.common.v2.TypedTupleDto;
 import org.apache.causeway.schema.common.v2.ValueType;
 
@@ -134,7 +134,7 @@ implements
         });
     }
 
-    private final Can<String> htmlTemplate = 
_Text.readLinesFromResource(this.getClass(),
+    private final Can<String> htmlTemplate = 
TextUtils.readLinesFromResource(this.getClass(),
             "CalendarEvent.html", StandardCharsets.UTF_8)
             .stream()
             .skip(20)
diff --git 
a/regressiontests/stable-value/src/test/java/org/apache/causeway/testdomain/value/ValueSemanticsTester.java
 
b/regressiontests/stable-value/src/test/java/org/apache/causeway/testdomain/value/ValueSemanticsTester.java
index 8a620366f6..135173faeb 100644
--- 
a/regressiontests/stable-value/src/test/java/org/apache/causeway/testdomain/value/ValueSemanticsTester.java
+++ 
b/regressiontests/stable-value/src/test/java/org/apache/causeway/testdomain/value/ValueSemanticsTester.java
@@ -38,7 +38,7 @@ import org.apache.causeway.commons.functional.Try;
 import org.apache.causeway.commons.internal.base._Casts;
 import org.apache.causeway.commons.internal.exceptions._Exceptions;
 import org.apache.causeway.commons.io.JaxbUtils;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 import org.apache.causeway.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.causeway.core.metamodel.interactions.managed.ManagedProperty;
 import 
org.apache.causeway.core.metamodel.interactions.managed.PropertyInteraction;
diff --git 
a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/model/valuetypes/ValueTypeExample.java
 
b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/model/valuetypes/ValueTypeExample.java
index 02f32dd076..08fa9048ca 100644
--- 
a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/model/valuetypes/ValueTypeExample.java
+++ 
b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/model/valuetypes/ValueTypeExample.java
@@ -62,7 +62,7 @@ import org.apache.causeway.applib.value.Password;
 import org.apache.causeway.applib.value.semantics.ValueSemanticsAbstract;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.base._Temporals;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 import 
org.apache.causeway.core.metamodel.valuesemantics.ApplicationFeatureIdValueSemantics;
 import org.apache.causeway.core.metamodel.valuesemantics.MarkupValueSemantics;
 import org.apache.causeway.extensions.fullcalendar.applib.value.CalendarEvent;
diff --git 
a/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/ExecutionParametersDefault.java
 
b/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/ExecutionParametersDefault.java
index c8844269de..570eb48fc8 100644
--- 
a/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/ExecutionParametersDefault.java
+++ 
b/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/ExecutionParametersDefault.java
@@ -33,7 +33,7 @@ import org.joda.time.format.ISODateTimeFormat;
 import org.apache.causeway.commons.internal.base._Casts;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.internal.collections._Maps;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 
 /**
  * Responsible for parsing the string parameter passed when executing
diff --git 
a/testing/integtestsupport/applib/src/main/java/org/apache/causeway/testing/integtestsupport/applib/ApprovalsOptions.java
 
b/testing/integtestsupport/applib/src/main/java/org/apache/causeway/testing/integtestsupport/applib/ApprovalsOptions.java
index ec2c5be60f..bdc1b25888 100644
--- 
a/testing/integtestsupport/applib/src/main/java/org/apache/causeway/testing/integtestsupport/applib/ApprovalsOptions.java
+++ 
b/testing/integtestsupport/applib/src/main/java/org/apache/causeway/testing/integtestsupport/applib/ApprovalsOptions.java
@@ -28,7 +28,7 @@ import org.approvaltests.core.Scrubber;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.internal.collections._Lists;
 import org.apache.causeway.commons.internal.collections._Maps;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.SneakyThrows;
 import lombok.val;
diff --git 
a/tooling/c4modeling/src/test/java/org/apache/causeway/tooling/c4/test/C4Test.java
 
b/tooling/c4modeling/src/test/java/org/apache/causeway/tooling/c4/test/C4Test.java
index 96d3c91f5d..932cfad4e6 100644
--- 
a/tooling/c4modeling/src/test/java/org/apache/causeway/tooling/c4/test/C4Test.java
+++ 
b/tooling/c4modeling/src/test/java/org/apache/causeway/tooling/c4/test/C4Test.java
@@ -32,6 +32,7 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import org.apache.causeway.commons.internal.base._Text;
+import org.apache.causeway.commons.io.TextUtils;
 import org.apache.causeway.tooling.c4.C4;
 
 import lombok.val;
@@ -88,7 +89,7 @@ class C4Test {
         dump(plantUmlSource);
 
         _Text.assertTextEquals(
-                _Text.readLinesFromResource(this.getClass(), 
"baeldung-example-v1.puml", StandardCharsets.UTF_8),
+                TextUtils.readLinesFromResource(this.getClass(), 
"baeldung-example-v1.puml", StandardCharsets.UTF_8),
                 plantUmlSource);
     }
 
@@ -123,7 +124,7 @@ class C4Test {
         dump(plantUmlSource);
 
         _Text.assertTextEquals(
-                _Text.readLinesFromResource(this.getClass(), 
"baeldung-example-v2.puml", StandardCharsets.UTF_8),
+                TextUtils.readLinesFromResource(this.getClass(), 
"baeldung-example-v2.puml", StandardCharsets.UTF_8),
                 plantUmlSource);
 
     }
diff --git 
a/tooling/cli/src/main/java/org/apache/causeway/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java
 
b/tooling/cli/src/main/java/org/apache/causeway/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java
index 0d5b4f7a5c..bbf8d77e75 100644
--- 
a/tooling/cli/src/main/java/org/apache/causeway/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java
+++ 
b/tooling/cli/src/main/java/org/apache/causeway/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java
@@ -24,7 +24,7 @@ import java.util.SortedSet;
 
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.base._Refs;
-import org.apache.causeway.commons.internal.base._Text;
+import org.apache.causeway.commons.io.TextUtils;
 import org.apache.causeway.tooling.cli.CliConfig;
 import org.apache.causeway.tooling.j2adoc.J2AdocContext;
 import org.apache.causeway.tooling.model4adoc.include.IncludeStatement;
@@ -60,7 +60,7 @@ public final class OrphanedIncludeStatementFixer {
             //_Probe.errOut("adoc file found: %s", adocFile);
 
             val fixedCounter = _Refs.intRef(0);
-            val originLines = _Text.readLinesFromFile(adocFile, 
StandardCharsets.UTF_8);
+            val originLines = TextUtils.readLinesFromFile(adocFile, 
StandardCharsets.UTF_8);
 
             val lines = IncludeStatements.rewrite(originLines, include->{
                 final boolean inGlobalIndex =
@@ -112,7 +112,7 @@ public final class OrphanedIncludeStatementFixer {
             if(fixedCounter.getValue()>0) {
 
                 // write lines to file
-                _Text.writeLinesToFile(lines, adocFile, 
StandardCharsets.UTF_8);
+                TextUtils.writeLinesToFile(lines, adocFile, 
StandardCharsets.UTF_8);
 
                 totalFixed.update(n->n + fixedCounter.getValue());
             }
diff --git 
a/tooling/cli/src/test/java/org/apache/causeway/tooling/cli/test/adocfix/IncludeStatementFixerTest.java
 
b/tooling/cli/src/test/java/org/apache/causeway/tooling/cli/test/adocfix/IncludeStatementFixerTest.java
index 524a14e90d..28c6feff81 100644
--- 
a/tooling/cli/src/test/java/org/apache/causeway/tooling/cli/test/adocfix/IncludeStatementFixerTest.java
+++ 
b/tooling/cli/src/test/java/org/apache/causeway/tooling/cli/test/adocfix/IncludeStatementFixerTest.java
@@ -27,8 +27,8 @@ import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.internal.base._Text;
 import org.apache.causeway.commons.internal.collections._Sets;
+import org.apache.causeway.commons.io.TextUtils;
 import org.apache.causeway.tooling.model4adoc.include.IncludeStatements;
 
 import lombok.NonNull;
@@ -55,8 +55,8 @@ class IncludeStatementFixerTest {
         names.forEach(System.out::println);
     }
 
-    private void parseAdoc(final @NonNull File file, Consumer<String> onName) {
-        val lines = _Text.readLinesFromFile(file, StandardCharsets.UTF_8);
+    private void parseAdoc(final @NonNull File file, final Consumer<String> 
onName) {
+        val lines = TextUtils.readLinesFromFile(file, StandardCharsets.UTF_8);
 
         IncludeStatements.find(lines)
         .filter(include->!include.isLocal()
diff --git 
a/tooling/java2adoc/src/main/java/org/apache/causeway/tooling/j2adoc/util/AsciiDocIncludeTagFilter.java
 
b/tooling/java2adoc/src/main/java/org/apache/causeway/tooling/j2adoc/util/AsciiDocIncludeTagFilter.java
index ae2e2a951a..0191595e15 100644
--- 
a/tooling/java2adoc/src/main/java/org/apache/causeway/tooling/j2adoc/util/AsciiDocIncludeTagFilter.java
+++ 
b/tooling/java2adoc/src/main/java/org/apache/causeway/tooling/j2adoc/util/AsciiDocIncludeTagFilter.java
@@ -22,26 +22,26 @@ import java.io.File;
 import java.nio.charset.StandardCharsets;
 import java.util.stream.Collectors;
 
-import org.apache.causeway.commons.internal.base._Text;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.val;
 
 public final class AsciiDocIncludeTagFilter {
 
-    public static String read(File source) {
-        return _Text.readLinesFromFile(source, StandardCharsets.UTF_8).stream()
+    public static String read(final File source) {
+        return TextUtils.readLinesFromFile(source, 
StandardCharsets.UTF_8).stream()
         //.filter(line->!containsIncludeTag(line))
         .filter(line->!isAllLineComment(line))
         .map(AsciiDocIncludeTagFilter::removeFootNoteReference)
         .collect(Collectors.joining("\n"));
     }
 
-    public static void removeAdocExampleTags(File source) {
-        val fixedLines = _Text.readLinesFromFile(source, 
StandardCharsets.UTF_8)
+    public static void removeAdocExampleTags(final File source) {
+        val fixedLines = TextUtils.readLinesFromFile(source, 
StandardCharsets.UTF_8)
         .filter(line->!isIncludeTagComment(line))
         .map(AsciiDocIncludeTagFilter::removeFootNoteReference);
 
-        _Text.writeLinesToFile(fixedLines, source, StandardCharsets.UTF_8);
+        TextUtils.writeLinesToFile(fixedLines, source, StandardCharsets.UTF_8);
     }
 
     // -- HELPER
@@ -55,11 +55,11 @@ public final class AsciiDocIncludeTagFilter {
                 || line.contains(" end::");
     }
 
-    private static boolean isAllLineComment(String line) {
+    private static boolean isAllLineComment(final String line) {
         return line.trim().startsWith("//");
     }
 
-    private static String removeFootNoteReference(String line) {
+    private static String removeFootNoteReference(final String line) {
         if(!line.contains("// <")) {
             return line;
         }
diff --git 
a/tooling/java2adoc/src/main/java/org/apache/causeway/tooling/j2adoc/util/ResourceCoordinates.java
 
b/tooling/java2adoc/src/main/java/org/apache/causeway/tooling/j2adoc/util/ResourceCoordinates.java
index 69458f2fb8..ee050f22a1 100644
--- 
a/tooling/java2adoc/src/main/java/org/apache/causeway/tooling/j2adoc/util/ResourceCoordinates.java
+++ 
b/tooling/java2adoc/src/main/java/org/apache/causeway/tooling/j2adoc/util/ResourceCoordinates.java
@@ -26,7 +26,7 @@ import org.springframework.lang.Nullable;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.internal.collections._Lists;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.Builder;
 import lombok.NonNull;
diff --git 
a/tooling/java2adoc/src/test/java/org/apache/causeway/tooling/j2adoc/convert/HtmlToAsciiDocTest.java
 
b/tooling/java2adoc/src/test/java/org/apache/causeway/tooling/j2adoc/convert/HtmlToAsciiDocTest.java
index d0df5c6c7d..4e32b86c4d 100644
--- 
a/tooling/java2adoc/src/test/java/org/apache/causeway/tooling/j2adoc/convert/HtmlToAsciiDocTest.java
+++ 
b/tooling/java2adoc/src/test/java/org/apache/causeway/tooling/j2adoc/convert/HtmlToAsciiDocTest.java
@@ -25,7 +25,7 @@ import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 import org.apache.causeway.tooling.model4adoc.AsciiDocFactory;
 import org.apache.causeway.tooling.model4adoc.AsciiDocWriter;
 
diff --git 
a/tooling/java2adoc/src/test/java/org/apache/causeway/tooling/j2adoc/test/ExampleReferenceRewriter.java
 
b/tooling/java2adoc/src/test/java/org/apache/causeway/tooling/j2adoc/test/ExampleReferenceRewriter.java
index 374563487e..ac79c836d1 100644
--- 
a/tooling/java2adoc/src/test/java/org/apache/causeway/tooling/j2adoc/test/ExampleReferenceRewriter.java
+++ 
b/tooling/java2adoc/src/test/java/org/apache/causeway/tooling/j2adoc/test/ExampleReferenceRewriter.java
@@ -22,67 +22,67 @@ import java.io.File;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 
-import org.apache.causeway.commons.internal.base._Text;
 import org.apache.causeway.commons.internal.collections._Lists;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.val;
 
 class ExampleReferenceRewriter {
 
-    static void processAdocExampleReferences(File source) {
-        
-        val lines = _Text.readLinesFromFile(source, StandardCharsets.UTF_8);
-        
+    static void processAdocExampleReferences(final File source) {
+
+        val lines = TextUtils.readLinesFromFile(source, 
StandardCharsets.UTF_8);
+
         val exampleRefs = ExampleReferenceFinder.find(
-                lines, 
+                lines,
                 line->line.contains("refguide:applib-svc:example$services/"));
-                
+
         if(exampleRefs.isEmpty()) {
             return;
         }
-        
+
         System.out.println(exampleRefs);
-        
+
         val fixedLines = _Lists.<String>newArrayList();
-        
+
         val it = lines.iterator();
         String line;
         int i = 0;
-        
+
         for(val exRef : exampleRefs) {
-            
+
             // seek chapter start
             while(i<exRef.chapterStart) {
                 line = it.next();
                 fixedLines.add(line);
                 ++i;
             }
-            
+
             appendHeader(exRef.name, fixedLines);
-            
+
             // seek chapter end
             while(i<exRef.chapterEnd) {
                 line = it.next();
                 fixedLines.add(line);
                 ++i;
             }
-            
+
             appendFooter(fixedLines);
-            
+
         }
-        
+
         // seek document end
         while(it.hasNext()) {
             fixedLines.add(it.next());
         }
-        
-        _Text.writeLinesToFile(fixedLines, source, StandardCharsets.UTF_8);
+
+        TextUtils.writeLinesToFile(fixedLines, source, StandardCharsets.UTF_8);
 
     }
-    
+
     // -- HELPER
 
-    private static void appendHeader(String key, List<String> lines) {
+    private static void appendHeader(final String key, final List<String> 
lines) {
         lines.add("== API");
         lines.add("");
         
lines.add(String.format("include::system:generated:page$index/%s.adoc[leveloffset=+2]",
 key));
@@ -94,8 +94,8 @@ class ExampleReferenceRewriter {
         lines.add("================================");
         lines.add("");
     }
-    
-    private static void appendFooter(List<String> lines) {
+
+    private static void appendFooter(final List<String> lines) {
         lines.add("");
         lines.add("================================");
         lines.add("");
diff --git 
a/tooling/java2adoc/src/test/java/org/apache/causeway/tooling/j2adoc/test/J2AdocTest.java
 
b/tooling/java2adoc/src/test/java/org/apache/causeway/tooling/j2adoc/test/J2AdocTest.java
index 0bef3db271..747e52f2cf 100644
--- 
a/tooling/java2adoc/src/test/java/org/apache/causeway/tooling/j2adoc/test/J2AdocTest.java
+++ 
b/tooling/java2adoc/src/test/java/org/apache/causeway/tooling/j2adoc/test/J2AdocTest.java
@@ -29,8 +29,8 @@ import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.internal.base._Text;
 import org.apache.causeway.commons.internal.collections._Sets;
+import org.apache.causeway.commons.io.TextUtils;
 import org.apache.causeway.tooling.j2adoc.J2AdocContext;
 import org.apache.causeway.tooling.j2adoc.util.AsciiDocIncludeTagFilter;
 import org.apache.causeway.tooling.javamodel.AnalyzerConfigFactory;
@@ -97,8 +97,8 @@ class J2AdocTest {
         names.forEach(System.out::println);
     }
 
-    private void parseAdoc(final @NonNull File file, Consumer<String> onName) {
-        val lines = _Text.readLinesFromFile(file, StandardCharsets.UTF_8);
+    private void parseAdoc(final @NonNull File file, final Consumer<String> 
onName) {
+        val lines = TextUtils.readLinesFromFile(file, StandardCharsets.UTF_8);
 
         ExampleReferenceFinder.find(
                 lines,
diff --git 
a/tooling/metaprog/src/main/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplate.java
 
b/tooling/metaprog/src/main/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplate.java
index 4534c24250..df1b47a5ce 100644
--- 
a/tooling/metaprog/src/main/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplate.java
+++ 
b/tooling/metaprog/src/main/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplate.java
@@ -29,11 +29,12 @@ import java.util.stream.Stream;
 import org.springframework.util.ClassUtils;
 
 import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.io.FileUtils;
 import org.apache.causeway.commons.internal.base._Refs;
 import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.commons.internal.base._Text;
 import org.apache.causeway.commons.internal.exceptions._Exceptions;
+import org.apache.causeway.commons.io.FileUtils;
+import org.apache.causeway.commons.io.TextUtils;
+import 
org.apache.causeway.tooling.metaprog.demoshowcases.value.ValueTypeGenTemplate.TemplateVariant;
 
 import lombok.Builder;
 import lombok.Getter;
@@ -260,11 +261,11 @@ public class ValueTypeGenTemplate {
 
     private void generateFromTemplate(
             final Map<String, String> templateVars, final File template, final 
File genTarget) {
-        val templateLines = _Text.readLinesFromFile(template, 
StandardCharsets.UTF_8);
+        val templateLines = TextUtils.readLinesFromFile(template, 
StandardCharsets.UTF_8);
 
         FileUtils.makeDir(genTarget.getParentFile());
 
-        _Text.writeLinesToFile(templateLines
+        TextUtils.writeLinesToFile(templateLines
                 .map(line->templateProcessor(templateVars, line)),
                 genTarget, StandardCharsets.UTF_8);
     }
diff --git 
a/tooling/metaprog/src/test/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplateTest.java
 
b/tooling/metaprog/src/test/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplateTest.java
index 8753c6c832..fece2b0406 100644
--- 
a/tooling/metaprog/src/test/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplateTest.java
+++ 
b/tooling/metaprog/src/test/java/org/apache/causeway/tooling/metaprog/demoshowcases/value/ValueTypeGenTemplateTest.java
@@ -35,10 +35,11 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.fail;
 
 import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.io.FileUtils;
 import org.apache.causeway.commons.internal.base._Text;
 import org.apache.causeway.commons.internal.collections._Sets;
 import org.apache.causeway.commons.internal.functions._Predicates;
+import org.apache.causeway.commons.io.FileUtils;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.SneakyThrows;
 import lombok.val;
@@ -144,10 +145,10 @@ class ValueTypeGenTemplateTest {
                 .zipMap(sortedB, (a, b)->{
 
                     var linesA = _Text.normalize(
-                            _Text.readLinesFromFile(a, StandardCharsets.UTF_8))
+                            TextUtils.readLinesFromFile(a, 
StandardCharsets.UTF_8))
                             .map(this::normalizeForComparision);
                     var linesB = _Text.normalize(
-                            _Text.readLinesFromFile(b, StandardCharsets.UTF_8))
+                            TextUtils.readLinesFromFile(b, 
StandardCharsets.UTF_8))
                             .map(this::normalizeForComparision);
 
                     return Objects.equals(linesA, linesB)
diff --git 
a/tooling/model4adoc/src/main/java/org/apache/causeway/tooling/model4adoc/AsciiDocFactory.java
 
b/tooling/model4adoc/src/main/java/org/apache/causeway/tooling/model4adoc/AsciiDocFactory.java
index 18a41f5588..bcd8a0c084 100644
--- 
a/tooling/model4adoc/src/main/java/org/apache/causeway/tooling/model4adoc/AsciiDocFactory.java
+++ 
b/tooling/model4adoc/src/main/java/org/apache/causeway/tooling/model4adoc/AsciiDocFactory.java
@@ -35,7 +35,7 @@ import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.base._Refs;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.internal.base._Text;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 import org.apache.causeway.tooling.model4adoc.ast.SimpleBlock;
 import org.apache.causeway.tooling.model4adoc.ast.SimpleCell;
 import org.apache.causeway.tooling.model4adoc.ast.SimpleColumn;
diff --git 
a/tooling/model4adoc/src/main/java/org/apache/causeway/tooling/model4adoc/NodeWriter.java
 
b/tooling/model4adoc/src/main/java/org/apache/causeway/tooling/model4adoc/NodeWriter.java
index 139c1823b4..6e0d3dccd9 100644
--- 
a/tooling/model4adoc/src/main/java/org/apache/causeway/tooling/model4adoc/NodeWriter.java
+++ 
b/tooling/model4adoc/src/main/java/org/apache/causeway/tooling/model4adoc/NodeWriter.java
@@ -44,7 +44,7 @@ import org.apache.causeway.commons.internal.base._Text;
 import org.apache.causeway.commons.internal.collections._Arrays;
 import org.apache.causeway.commons.internal.collections._Lists;
 import org.apache.causeway.commons.internal.collections._Sets;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
diff --git 
a/tooling/model4adoc/src/main/java/org/apache/causeway/tooling/model4adoc/include/IncludeStatements.java
 
b/tooling/model4adoc/src/main/java/org/apache/causeway/tooling/model4adoc/include/IncludeStatements.java
index 63e8f67e60..be76ced28c 100644
--- 
a/tooling/model4adoc/src/main/java/org/apache/causeway/tooling/model4adoc/include/IncludeStatements.java
+++ 
b/tooling/model4adoc/src/main/java/org/apache/causeway/tooling/model4adoc/include/IncludeStatements.java
@@ -25,7 +25,7 @@ import java.util.function.UnaryOperator;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.internal.collections._Lists;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.NonNull;
 import lombok.val;
diff --git 
a/tooling/model4adoc/src/test/java/org/apache/causeway/tooling/model4adoc/test/ast/AbstractAsciiDocWriterTest.java
 
b/tooling/model4adoc/src/test/java/org/apache/causeway/tooling/model4adoc/test/ast/AbstractAsciiDocWriterTest.java
index 8ed70783e4..eb7b843312 100644
--- 
a/tooling/model4adoc/src/test/java/org/apache/causeway/tooling/model4adoc/test/ast/AbstractAsciiDocWriterTest.java
+++ 
b/tooling/model4adoc/src/test/java/org/apache/causeway/tooling/model4adoc/test/ast/AbstractAsciiDocWriterTest.java
@@ -28,36 +28,37 @@ import org.junit.jupiter.api.Test;
 
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.internal.base._Text;
+import org.apache.causeway.commons.io.TextUtils;
 import org.apache.causeway.tooling.model4adoc.AsciiDocWriter;
 
 import lombok.val;
 
 abstract class AbstractAsciiDocWriterTest {
-    
+
     protected String adocSourceResourceLocation;
     protected boolean debugEnabled;
     protected boolean skipAsciidocjComplianceTest;
-    
+
     protected void assertDocumentIsCorrectlyWritten(final Document 
documentUnderTest) {
-        
+
         final String sourceUnderTest = 
AsciiDocWriter.toString(documentUnderTest);
-        
+
         if(debugEnabled) {
             System.out.println("======= Generated Adoc Source =======");
             System.out.println(sourceUnderTest);
             System.out.println("=====================================");
         }
-        
+
         _Text.assertTextEquals(
-                _Text.readLinesFromResource(this.getClass(), 
adocSourceResourceLocation, StandardCharsets.UTF_8), 
+                TextUtils.readLinesFromResource(this.getClass(), 
adocSourceResourceLocation, StandardCharsets.UTF_8),
                 sourceUnderTest);
     }
-    
+
     protected void assertReferenceDocumentIsCorrectlyWritten() {
         val adocRef = _Strings.readFromResource(this.getClass(), 
adocSourceResourceLocation, StandardCharsets.UTF_8);
         val asciidoctor = Asciidoctor.Factory.create();
         val refDoc = asciidoctor.load(adocRef, Options.builder().build());
-        
+
         if(debugEnabled) {
             System.out.println("==========================================");
             System.out.println("==  Adoc AST as read by Ref. Factory    ==");
@@ -65,7 +66,7 @@ abstract class AbstractAsciiDocWriterTest {
             _Debug.debug(refDoc);
             System.out.println("==========================================");
         }
-        
+
         String actualAdoc = AsciiDocWriter.toString(refDoc);
         if(debugEnabled) {
             System.out.println("==========================================");
@@ -74,10 +75,10 @@ abstract class AbstractAsciiDocWriterTest {
             System.out.println(actualAdoc);
             System.out.println("==========================================");
         }
-        
+
         _Text.assertTextEquals(adocRef, actualAdoc);
     }
-    
+
     @Test
     void testReferenceDocumentIsCorrectlyWritten() throws IOException {
         if(!skipAsciidocjComplianceTest) {
@@ -86,6 +87,6 @@ abstract class AbstractAsciiDocWriterTest {
             System.err.printf("warning: skipping asciidocj compliance test for 
%s%n", this.getClass().getName());
         }
     }
-   
-    
+
+
 }
diff --git 
a/tooling/projectmodel/src/test/java/org/apache/causeway/tooling/projectmodel/test/GradleSettingsTest.java
 
b/tooling/projectmodel/src/test/java/org/apache/causeway/tooling/projectmodel/test/GradleSettingsTest.java
index 8bfcc43aa7..4e68c17efb 100644
--- 
a/tooling/projectmodel/src/test/java/org/apache/causeway/tooling/projectmodel/test/GradleSettingsTest.java
+++ 
b/tooling/projectmodel/src/test/java/org/apache/causeway/tooling/projectmodel/test/GradleSettingsTest.java
@@ -32,7 +32,7 @@ import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-import org.apache.causeway.commons.internal.base._Text;
+import org.apache.causeway.commons.io.TextUtils;
 import org.apache.causeway.tooling.projectmodel.gradle.GradleSettings;
 import org.apache.causeway.tooling.projectmodel.gradle.GradleSettingsFactory;
 import org.apache.causeway.tooling.projectmodel.gradle.GradleSettingsWriter;
@@ -98,7 +98,7 @@ class GradleSettingsTest extends ProjectModelTestAbstract {
     private void checkBuildFile(final File buildFile, final Set<String> 
knownBuildArtifactNames) {
         //System.out.println(String.format("checking %s", 
buildFile.getAbsolutePath()));
 
-        val lines = _Text.readLinesFromFile(buildFile, StandardCharsets.UTF_8);
+        val lines = TextUtils.readLinesFromFile(buildFile, 
StandardCharsets.UTF_8);
         for(val line : lines) {
             checkBuildFileLine(buildFile, line, knownBuildArtifactNames);
         }
diff --git 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ResourceAbstract.java
 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ResourceAbstract.java
index c047973a65..3ff3c21bdd 100644
--- 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ResourceAbstract.java
+++ 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ResourceAbstract.java
@@ -37,7 +37,7 @@ import org.apache.causeway.applib.annotation.Where;
 import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.internal.codec._UrlDecoderUtil;
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 import org.apache.causeway.core.config.viewer.web.WebAppContextPath;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.context.HasMetaModelContext;
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/LicensedTextTemplate.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/LicensedTextTemplate.java
index 1fd72c2a4d..3bb09990a1 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/LicensedTextTemplate.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/LicensedTextTemplate.java
@@ -22,7 +22,7 @@ import java.util.stream.Collectors;
 
 import org.apache.wicket.util.template.PackageTextTemplate;
 
-import org.apache.causeway.commons.util.TextUtils;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.val;
 
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/WktHeaderItems.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/WktHeaderItems.java
index 4ecdf6b667..5bfbae07f2 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/WktHeaderItems.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/WktHeaderItems.java
@@ -32,7 +32,7 @@ import 
org.apache.wicket.request.resource.CssResourceReference;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 
 import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.commons.internal.base._Text;
+import org.apache.causeway.commons.io.TextUtils;
 
 import lombok.Getter;
 import lombok.NonNull;
@@ -88,7 +88,7 @@ public class WktHeaderItems {
     private String readJsResource(
             final @NonNull Class<?> resourceLocation,
             final @NonNull String resourceName) {
-        return _Text.readLinesFromResource(
+        return TextUtils.readLinesFromResource(
                 resourceLocation, resourceName, StandardCharsets.UTF_8)
                 .filter(_Strings::isNotEmpty)
                 .filter(line->!line.trim().startsWith("//"))
diff --git 
a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/services/TranslationsResolverWicket.java
 
b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/services/TranslationsResolverWicket.java
index 98453c46b8..44cc6e85ac 100644
--- 
a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/services/TranslationsResolverWicket.java
+++ 
b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/services/TranslationsResolverWicket.java
@@ -38,7 +38,7 @@ import org.springframework.stereotype.Service;
 
 import org.apache.causeway.applib.annotation.PriorityPrecedence;
 import org.apache.causeway.applib.services.i18n.TranslationsResolver;
-import org.apache.causeway.commons.internal.base._Text;
+import org.apache.causeway.commons.io.TextUtils;
 import org.apache.causeway.core.config.CausewayConfiguration;
 
 import lombok.RequiredArgsConstructor;
@@ -95,7 +95,7 @@ public class TranslationsResolverWicket implements 
TranslationsResolver {
             return Collections.emptyList();
         }
 
-        val acceptedLines = _Text.readLinesFromUrl(url, StandardCharsets.UTF_8)
+        val acceptedLines = TextUtils.readLinesFromUrl(url, 
StandardCharsets.UTF_8)
         .stream()
         .filter(input->input != null && nonEmpty.matcher(input).matches())
         .collect(Collectors.toList());

Reply via email to