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 <[email protected]>
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 {