package org.onap.dcaegen2.services.bootstrap;
-import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import java.util.Map;
-import java.util.stream.Collectors;
+
+import static java.util.stream.Collectors.toMap;
class CbsJsonToPropertyMapConverter {
Map<String, Object> convertToMap(JsonObject jsonObject) {
verifyExpectedCbsJsonFormat(jsonObject);
JsonObject config = jsonObject.getAsJsonObject(CBS_CONFIG_ROOT_PROPERTY);
- return config.entrySet().stream().collect(
- Collectors.toMap(Map.Entry::getKey, entry -> unpack(entry.getValue())));
+ return config.entrySet().stream()
+ .filter(entry -> entry.getValue().isJsonPrimitive())
+ .collect(toMap(Map.Entry::getKey, entry -> unpack(entry.getValue().getAsJsonPrimitive())));
}
private static void verifyExpectedCbsJsonFormat(JsonObject jsonObject) {
}
}
- private Object unpack(JsonElement value) {
- if (value.isJsonPrimitive()) {
- JsonPrimitive primitiveValue = value.getAsJsonPrimitive();
- if (primitiveValue.isString()) {
- return primitiveValue.getAsString();
- }
- if (primitiveValue.isBoolean()) {
- return primitiveValue.getAsBoolean();
- }
- if (primitiveValue.isNumber()) {
- return primitiveValue.getAsLong();
- }
+ private Object unpack(JsonPrimitive value) {
+ if (value.isString()) {
+ return value.getAsString();
+ }
+ if (value.isBoolean()) {
+ return value.getAsBoolean();
+ }
+ if (value.isNumber()) {
+ return value.getAsLong();
}
- return value;
+ throw new IllegalArgumentException("Unexpected JsonPrimitive type found in configuration form CBS: " + value);
}
}
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
-import org.assertj.core.api.Condition;
import org.junit.jupiter.api.Test;
import java.util.Map;
" \"someStringProp\": \"foo\",\n" +
" \"someNumericalProp\": 123,\n" +
" \"someBooleanProp\": true,\n" +
+ " \"someArrayProp\": [],\n" +
" \"someObjectProp\": {\n" +
" \"bar\": \"baz\"\n" +
" }\n" +
}
@Test
- void shouldLeaveComplexPropertiesAsJsonTypes() {
+ void shouldSkipComplexProperties() {
Map<String, Object> map = cbsJsonToPropertyMapConverter.convertToMap(SOME_JSON_FROM_CBS);
- assertThat(map).hasEntrySatisfying("someObjectProp", hasClass(JsonObject.class));
+ assertThat(map).doesNotContainKeys("someObjectProp");
+ assertThat(map).doesNotContainKeys("someArrayProp");
}
@Test
return new JsonParser().parse(jsonString).getAsJsonObject();
}
- private static Condition<Object> hasClass(Class clazz) {
- return new Condition<Object>(clazz.getCanonicalName()){
- public boolean matches(Object value) {
- return value.getClass().equals(clazz);
- }
- };
- }
}
\ No newline at end of file