This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch v4 in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/v4 by this push: new f677889de02 CAUSEWAY-3892: adds flatMap to Blob and Clob (quality of life) f677889de02 is described below commit f677889de0286274f23246288e953ee6fb67d99b Author: Andi Huber <ahu...@apache.org> AuthorDate: Thu Jul 10 10:39:21 2025 +0200 CAUSEWAY-3892: adds flatMap to Blob and Clob (quality of life) --- .../org/apache/causeway/applib/value/Blob.java | 27 +++++++++++++++++++++- .../org/apache/causeway/applib/value/Clob.java | 17 ++++++++++---- .../ui/CommandReplayOnSecondaryService.java | 2 +- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/api/applib/src/main/java/org/apache/causeway/applib/value/Blob.java b/api/applib/src/main/java/org/apache/causeway/applib/value/Blob.java index 64a84dc4a30..b40fd201ff1 100644 --- a/api/applib/src/main/java/org/apache/causeway/applib/value/Blob.java +++ b/api/applib/src/main/java/org/apache/causeway/applib/value/Blob.java @@ -26,9 +26,11 @@ import java.io.OutputStream; import java.io.Serializable; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Objects; import java.util.Optional; +import java.util.function.UnaryOperator; import jakarta.activation.MimeType; import jakarta.activation.MimeTypeParseException; @@ -36,6 +38,7 @@ import jakarta.xml.bind.annotation.adapters.XmlAdapter; import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; import org.apache.causeway.applib.CausewayModuleApplib; @@ -52,7 +55,6 @@ import org.apache.causeway.commons.io.ZipUtils; import org.apache.causeway.commons.io.ZipUtils.ZipOptions; -import org.jspecify.annotations.NonNull; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -172,6 +174,14 @@ public Clob toClob(final @NonNull Charset charset) { return new Clob(name(), mimeType(), _Strings.ofBytes(bytes(), charset)); } + /** + * Converts to a {@link Clob}, using UTF-8 + * for the underlying byte[] to String conversion. + */ + public Clob toClobUtf8() { + return toClob(StandardCharsets.UTF_8); + } + /** * Does not close the OutputStream. */ @@ -212,6 +222,21 @@ public DataSource asDataSource() { return DataSource.ofBytes(_NullSafe.toNonNull(bytes())); } + // -- MAPPING + + /** + * Allows fluent chaining of {@link Blob} operators. + * @param mapper when {@code null} method acts as an identity operation + */ + public Blob flatMap( + @Nullable UnaryOperator<Blob> mapper) { + return mapper != null + ? mapper.apply(this) + : this; + } + + // -- COMPRESSION + /** * Returns a new {@link Blob} that has this Blob's underlying byte array * zipped into a zip-entry using this Blob's name. diff --git a/api/applib/src/main/java/org/apache/causeway/applib/value/Clob.java b/api/applib/src/main/java/org/apache/causeway/applib/value/Clob.java index b5ff2284bf0..469d3c69a35 100644 --- a/api/applib/src/main/java/org/apache/causeway/applib/value/Clob.java +++ b/api/applib/src/main/java/org/apache/causeway/applib/value/Clob.java @@ -30,6 +30,7 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Objects; +import java.util.function.UnaryOperator; import jakarta.activation.MimeType; import jakarta.activation.MimeTypeParseException; @@ -78,7 +79,7 @@ public record Clob( MimeType mimeType, CharSequence chars ) implements NamedWithMimeType { - + // -- FACTORIES @@ -179,10 +180,18 @@ public Clob(final String name, final MimeType mimeType, final CharSequence chars this.chars = chars; } + // -- MAPPING + /** - * @deprecated use {@link #chars()} instead + * Allows fluent chaining of {@link Clob} operators. + * @param mapper when {@code null} method acts as an identity operation */ - public CharSequence getChars() { return chars(); } + public Clob flatMap( + @Nullable UnaryOperator<Clob> mapper) { + return mapper != null + ? mapper.apply(this) + : this; + } // -- UTILITIES @@ -264,7 +273,7 @@ public boolean equals(final Object o) { @Override public String toString() { - return name() + " [" + mimeType().getBaseType() + "]: " + getChars().length() + " chars"; + return name() + " [" + mimeType().getBaseType() + "]: " + chars().length() + " chars"; } /** diff --git a/incubator/extensions/core/commandreplay/secondary/src/main/java/org/apache/causeway/extensions/commandreplay/secondary/ui/CommandReplayOnSecondaryService.java b/incubator/extensions/core/commandreplay/secondary/src/main/java/org/apache/causeway/extensions/commandreplay/secondary/ui/CommandReplayOnSecondaryService.java index e97dff43edf..a9743e07f5f 100644 --- a/incubator/extensions/core/commandreplay/secondary/src/main/java/org/apache/causeway/extensions/commandreplay/secondary/ui/CommandReplayOnSecondaryService.java +++ b/incubator/extensions/core/commandreplay/secondary/src/main/java/org/apache/causeway/extensions/commandreplay/secondary/ui/CommandReplayOnSecondaryService.java @@ -89,7 +89,7 @@ public class uploadCommands{ public class ActionDomainEvent extends CommandReplayOnSecondaryService.ActionDomainEvent<uploadCommands> { } @MemberSupport public void act(final Clob commandsDtoAsXml) { - var chars = commandsDtoAsXml.getChars(); + var chars = commandsDtoAsXml.chars(); List<CommandDto> commandDtoList; try {