diff --git a/multiapps-common/src/main/java/org/cloudfoundry/multiapps/common/Messages.java b/multiapps-common/src/main/java/org/cloudfoundry/multiapps/common/Messages.java index c5ca0fa3..28376bd9 100644 --- a/multiapps-common/src/main/java/org/cloudfoundry/multiapps/common/Messages.java +++ b/multiapps-common/src/main/java/org/cloudfoundry/multiapps/common/Messages.java @@ -21,6 +21,7 @@ private Messages() { public static final String ERROR_PARSING_YAML_STREAM = "Error while parsing YAML stream: {0}"; public static final String ERROR_PARSING_YAML_STRING = "Error while parsing YAML string: %n%s%n%s"; public static final String COULD_NOT_PARSE_BOOLEAN_FLAG = "Cannot parse \"{0}\" flag - expected a boolean format."; + public static final String COULD_NOT_PARSE_MAP_FLAG = "Cannot parse \"{0}\" flag - expected a map format."; public static final String COULD_NOT_CONSTRUCT_YAML_CONVERTER_0_BECAUSE_OF_1 = "Could not construct YAML converter \"{0}\": {1}"; public static final String INVALID_JSON_SERIALIZATION_STRATEGY_PROVIDED_0 = "Invalid JSON serialization strategy provided: \"{0}\""; // Audit log messages: diff --git a/multiapps-common/src/main/java/org/cloudfoundry/multiapps/common/util/MapUtil.java b/multiapps-common/src/main/java/org/cloudfoundry/multiapps/common/util/MapUtil.java index f3be8726..781632bd 100644 --- a/multiapps-common/src/main/java/org/cloudfoundry/multiapps/common/util/MapUtil.java +++ b/multiapps-common/src/main/java/org/cloudfoundry/multiapps/common/util/MapUtil.java @@ -54,4 +54,20 @@ public static Boolean parseBooleanFlag(final Map parameters, Str return (Boolean) flagValue; } + + @SuppressWarnings("unchecked") + public static Map parseMap(final Map parameters, String flagName, + Map defaultValue) throws ContentException { + Object flagValue = parameters.get(flagName); + + if (flagValue == null) { + return defaultValue; + } + + if (!(flagValue instanceof Map)) { + throw new ContentException(Messages.COULD_NOT_PARSE_MAP_FLAG, flagName); + } + + return (Map) flagValue; + } } diff --git a/multiapps-common/src/test/java/org/cloudfoundry/multiapps/common/util/MapUtilTest.java b/multiapps-common/src/test/java/org/cloudfoundry/multiapps/common/util/MapUtilTest.java index 8018c58a..8c7bb7a5 100644 --- a/multiapps-common/src/test/java/org/cloudfoundry/multiapps/common/util/MapUtilTest.java +++ b/multiapps-common/src/test/java/org/cloudfoundry/multiapps/common/util/MapUtilTest.java @@ -1,12 +1,5 @@ package org.cloudfoundry.multiapps.common.util; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; - import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -14,6 +7,13 @@ import org.cloudfoundry.multiapps.common.ContentException; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + class MapUtilTest { public static final Map TEST_PARAMETERS = new HashMap<>(); @@ -24,6 +24,8 @@ class MapUtilTest { TEST_PARAMETERS.put("emptyFlag", null); TEST_PARAMETERS.put("incorrectTypeFlag1", "false"); TEST_PARAMETERS.put("incorrectTypeFlag2", "1"); + TEST_PARAMETERS.put("mapFlag", Map.of("key", "value")); + TEST_PARAMETERS.put("incorrectMapFlag", "not-a-map"); } @Test @@ -128,4 +130,30 @@ void testMergeSafely_withBothMapsNull() { assertNotNull(result); assertTrue(result.isEmpty()); } + + @Test + void testParseMap_withPresentMapValue() { + Map expectedMap = Map.of("key", "value"); + + assertEquals(expectedMap, MapUtil.parseMap(TEST_PARAMETERS, "mapFlag", null)); + } + + @Test + void testParseMap_withMissingKey() { + Map defaultValue = Map.of("default", "val"); + + assertEquals(defaultValue, MapUtil.parseMap(TEST_PARAMETERS, "notPresentFlag", defaultValue)); + } + + @Test + void testParseMap_withNullValue() { + Map defaultValue = Map.of("default", "val"); + + assertEquals(defaultValue, MapUtil.parseMap(TEST_PARAMETERS, "emptyFlag", defaultValue)); + } + + @Test + void testParseMap_withIncorrectType() { + assertThrows(ContentException.class, () -> MapUtil.parseMap(TEST_PARAMETERS, "incorrectMapFlag", null)); + } }