diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java index fc03840f0..c746ae053 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java @@ -5,10 +5,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.logic.services.forms.VisibilityRuleService; import eu.eudat.logic.utilities.documents.types.ParagraphStyle; import eu.eudat.logic.utilities.interfaces.ApplierWithValue; -import eu.eudat.models.data.components.commons.datafield.CheckBoxData; -import eu.eudat.models.data.components.commons.datafield.ComboBoxData; -import eu.eudat.models.data.components.commons.datafield.UploadData; -import eu.eudat.models.data.components.commons.datafield.WordListData; +import eu.eudat.logic.utilities.json.JavaToJson; +import eu.eudat.models.data.components.commons.datafield.*; import eu.eudat.models.data.user.components.datasetprofile.Field; import eu.eudat.models.data.user.components.datasetprofile.FieldSet; import eu.eudat.models.data.user.components.datasetprofile.Section; @@ -17,13 +15,13 @@ import eu.eudat.models.data.user.composite.PagedDatasetProfile; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.util.Units; import org.apache.poi.xwpf.usermodel.*; +import org.json.JSONArray; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.env.Environment; -import org.springframework.http.MediaType; import javax.imageio.ImageIO; import javax.imageio.ImageReader; @@ -328,7 +326,7 @@ public class WordBuilder { boolean isImage = false; for(UploadData.Option type: ((UploadData)field.getData()).getTypes()){ String fileFormat = type.getValue(); - if(fileFormat.equals(MediaType.IMAGE_JPEG_VALUE) || fileFormat.equals(MediaType.IMAGE_PNG_VALUE) || fileFormat.equals(MediaType.IMAGE_GIF_VALUE)){ + if(IMAGE_TYPE_MAP.containsKey(fileFormat)){ isImage = true; break; } @@ -347,6 +345,11 @@ public class WordBuilder { else if (field.getValue() != null && !field.getValue().toString().isEmpty()) { this.indent = indent; String format = this.formatter(field); + if (field.getViewStyle().getRenderStyle().equals("tags")) { + format = getCommaSeparatedFormatsFromJson(format, "name"); + } else if (field.getViewStyle().getRenderStyle().equals("combobox") && field.getData() instanceof AutoCompleteData) { + format = getCommaSeparatedFormatsFromJson(format, "label"); + } if(format != null && !format.isEmpty()){ if(format.charAt(0) == '['){ format = format.substring(1, format.length() - 1).replaceAll(",", ", "); @@ -371,6 +374,21 @@ public class WordBuilder { return hasValue; } + private String getCommaSeparatedFormatsFromJson(String format, String attribute){ + if((format == null || format.isEmpty()) || (attribute == null || attribute.isEmpty())){ + return null; + } + JSONArray array = new JSONArray(JavaToJson.objectStringToJson(format)); + StringBuilder multipleFormats = new StringBuilder(); + for (int i = 0; i < array.length(); i++) { + multipleFormats.append(array.getJSONObject(i).getString(attribute)).append(", "); + } + if (multipleFormats.length() > 0) { + multipleFormats.setLength(multipleFormats.length() - 2); + } + return multipleFormats.toString(); + } + public XWPFParagraph addParagraphContent(Object content, XWPFDocument mainDocumentPart, ParagraphStyle style, BigInteger numId) { if (content != null) { if (content instanceof String && ((String)content).isEmpty()) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/json/JavaToJson.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/json/JavaToJson.java index aa365fe0e..28589e6f9 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/json/JavaToJson.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/json/JavaToJson.java @@ -4,9 +4,9 @@ public class JavaToJson { public static String objectStringToJson(String object) { String result = object.replaceAll("=", "\":\"") - //.replaceAll("\\{", "{\"") + .replaceAll("\\{", "{\"") .replaceAll(", ", "\", \"") - //.replaceAll("}", "\"}" ). + .replaceAll("}", "\"}" ) .replaceAll("}\", \"\\{", "}, {"); return result; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java index 942f48d4a..aa76750d7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java @@ -55,9 +55,8 @@ public class CostRDAMapper { rda.setValue(Double.valueOf(rdaValue)); } else if(rdaProperty.contains("currency_code")){ - String json = JavaToJson.objectStringToJson(rdaValue); HashMap result = - new ObjectMapper().readValue(json, HashMap.class); + new ObjectMapper().readValue(rdaValue, HashMap.class); rda.setCurrencyCode(Cost.CurrencyCode.fromValue(result.get("value"))); } else if(rdaProperty.contains("title")){ diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DistributionRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DistributionRDAMapper.java index c9bd007dc..f5bc36f34 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DistributionRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DistributionRDAMapper.java @@ -18,6 +18,7 @@ import java.util.stream.Collectors; public class DistributionRDAMapper { private static final Logger logger = LoggerFactory.getLogger(DistributionRDAMapper.class); + private static final ObjectMapper mapper = new ObjectMapper(); public static List toRDAList(List nodes) { Map rdaMap = new HashMap<>(); @@ -89,12 +90,12 @@ public class DistributionRDAMapper { int i = 1; while(iter.hasNext()) { JsonNode current = iter.next(); - String format = JavaToJson.objectStringToJson(current.toString()); + String format = current.toString(); try { - Map result = new ObjectMapper().readValue(format, HashMap.class); + Map result = mapper.readValue(format, HashMap.class); format = result.get("label"); formats.add(format); - rda.setAdditionalProperty("format" + i++, new ObjectMapper().readTree(current.toString())); + rda.setAdditionalProperty("format" + i++, mapper.readTree(current.toString())); } catch(JsonProcessingException e){ logger.warn(e.getMessage()); @@ -219,7 +220,6 @@ public class DistributionRDAMapper { if (distributionNode.get("data").get("type").asText().equals("autocomplete")) { Map additionalProperties = rda.getAdditionalProperties(); List standardFormats = new ArrayList<>(); - ObjectMapper mapper = new ObjectMapper(); rda.getAdditionalProperties().forEach((key, value) -> { try { if (key.matches("format\\d+")) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/KeywordRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/KeywordRDAMapper.java index fa5ecdb19..64d8fdf9a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/KeywordRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/KeywordRDAMapper.java @@ -15,13 +15,12 @@ import java.util.stream.Collectors; public class KeywordRDAMapper { private static final Logger logger = LoggerFactory.getLogger(KeywordRDAMapper.class); + private static final ObjectMapper mapper = new ObjectMapper(); public static List toRDA(String value) { if (!value.isEmpty() && !value.equals("null")) { try { - ObjectMapper mapper = new ObjectMapper(); - String valueJson = JavaToJson.objectStringToJson(value); - Tag tag = mapper.readValue(valueJson, Tag.class); + Tag tag = mapper.readValue(value, Tag.class); return new ArrayList<>(Collections.singletonList(tag.getName())); } catch (JsonProcessingException e) { logger.warn(e.getMessage() + ". Attempting to parse it as a String since its a new tag.");