From ec9552027a0ce1ecbc8093d1b3b3bafffc29df10 Mon Sep 17 00:00:00 2001 From: Alex Borodin Date: Fri, 12 May 2017 10:25:26 +0200 Subject: [PATCH] feat(export): make lists and maps in spreadsheet export machine-readable by exporting as JSON closes #353 --- .../sw360/datahandler/common/SW360Utils.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/libraries/lib-datahandler/src/main/java/org/eclipse/sw360/datahandler/common/SW360Utils.java b/libraries/lib-datahandler/src/main/java/org/eclipse/sw360/datahandler/common/SW360Utils.java index 88a4bec47..07537eef3 100644 --- a/libraries/lib-datahandler/src/main/java/org/eclipse/sw360/datahandler/common/SW360Utils.java +++ b/libraries/lib-datahandler/src/main/java/org/eclipse/sw360/datahandler/common/SW360Utils.java @@ -8,6 +8,8 @@ */ package org.eclipse.sw360.datahandler.common; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Joiner; import com.google.common.base.Predicate; import com.google.common.base.Strings; @@ -360,20 +362,25 @@ public static String fieldValueAsString(Object fieldValue) { return nullToEmpty((String) fieldValue); } if (fieldValue instanceof Map) { - List mapEntriesAsStrings = nullToEmptyMap(((Map) fieldValue)).entrySet().stream() - .map(e -> { - String valueString = e.getValue() != null ? e.getValue().toString():""; - return e.getKey() + " : " + valueString; - }) - .collect(Collectors.toList()); - return joinStrings(mapEntriesAsStrings); + Map originalMap = nullToEmptyMap(((Map) fieldValue)); + Map map = Maps.transformValues(originalMap, v -> v != null ? v.toString() : ""); + return serializeToJson(map); } if (fieldValue instanceof Iterable){ - return joinStrings((Iterable) fieldValue); + return serializeToJson(fieldValue); } return fieldValue.toString(); } + private static String serializeToJson(Object value) { + ObjectMapper mapper = new ObjectMapper(); + try { + return mapper.writeValueAsString(value); + } catch (JsonProcessingException e) { + throw new IllegalArgumentException(String.format("Cannot serialize field value %s to JSON", value), e); + } + } + public static String displayNameFor(String name, Map nameToDisplayName){ return nameToDisplayName.containsKey(name)? nameToDisplayName.get(name) : name; }