From ddfe29fa8d8c3086626d7e22957df916b74608c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carla=20K=C3=B6berl?= Date: Wed, 30 Jul 2025 21:02:31 +0200 Subject: [PATCH 1/2] feat: Allow Access to ImmutableMetadata Map as unmodifiable Map MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Oriented on the AbstractStructure closes: #1532 Signed-off-by: Carla Köberl --- .../java/dev/openfeature/sdk/ImmutableMetadata.java | 9 ++++++--- .../dev/openfeature/sdk/ImmutableMetadataTest.java | 13 +++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/dev/openfeature/sdk/ImmutableMetadata.java b/src/main/java/dev/openfeature/sdk/ImmutableMetadata.java index 7f57a174d..d7ffa7736 100644 --- a/src/main/java/dev/openfeature/sdk/ImmutableMetadata.java +++ b/src/main/java/dev/openfeature/sdk/ImmutableMetadata.java @@ -1,5 +1,6 @@ package dev.openfeature.sdk; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import lombok.EqualsAndHashCode; @@ -97,6 +98,10 @@ public T getValue(final String key, final Class type) { } } + public Map asUnmodifiableMap() { + return Collections.unmodifiableMap(metadata); + } + public boolean isEmpty() { return metadata.isEmpty(); } @@ -112,10 +117,8 @@ public static ImmutableMetadataBuilder builder() { return new ImmutableMetadataBuilder(); } - /** - * Immutable builder for {@link ImmutableMetadata}. - */ public static class ImmutableMetadataBuilder { + private final Map metadata; private ImmutableMetadataBuilder() { diff --git a/src/test/java/dev/openfeature/sdk/ImmutableMetadataTest.java b/src/test/java/dev/openfeature/sdk/ImmutableMetadataTest.java index e3bd03165..108fac0fe 100644 --- a/src/test/java/dev/openfeature/sdk/ImmutableMetadataTest.java +++ b/src/test/java/dev/openfeature/sdk/ImmutableMetadataTest.java @@ -3,6 +3,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; +import java.util.Map; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; class ImmutableMetadataTest { @@ -25,4 +27,15 @@ void equalImmutableMetadataAreEqual() { assertEquals(i1, i2); } + + @Test + void retrieveAsUnmodifiableMap() { + ImmutableMetadata metadata = + ImmutableMetadata.builder().addString("key1", "value1").build(); + + Map unmodifiableMap = metadata.asUnmodifiableMap(); + assertEquals(unmodifiableMap.size(), 1); + assertEquals(unmodifiableMap.get("key1"), "value1"); + Assertions.assertThrows(UnsupportedOperationException.class, () -> unmodifiableMap.put("key3", "value3")); + } } From fd0d24f1bc02fc1ba2db6a48e1e1e6278e16cfa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carla=20K=C3=B6berl?= Date: Wed, 30 Jul 2025 21:12:51 +0200 Subject: [PATCH 2/2] fixup: adding back java doc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Carla Köberl --- src/main/java/dev/openfeature/sdk/ImmutableMetadata.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/openfeature/sdk/ImmutableMetadata.java b/src/main/java/dev/openfeature/sdk/ImmutableMetadata.java index d7ffa7736..f6c1d742e 100644 --- a/src/main/java/dev/openfeature/sdk/ImmutableMetadata.java +++ b/src/main/java/dev/openfeature/sdk/ImmutableMetadata.java @@ -117,8 +117,10 @@ public static ImmutableMetadataBuilder builder() { return new ImmutableMetadataBuilder(); } + /** + * Immutable builder for {@link ImmutableMetadata}. + */ public static class ImmutableMetadataBuilder { - private final Map metadata; private ImmutableMetadataBuilder() {