From 6cedc40339cd0f4c07ae743823a34b332a8a8e02 Mon Sep 17 00:00:00 2001 From: gkolokythas Date: Tue, 17 Dec 2019 13:08:01 +0200 Subject: [PATCH] Refactors Dataset "Field" from String to Object. --- .../utilities/documents/word/WordBuilder.java | 33 ++++++++++--------- .../documents/xml/ExportXmlBuilder.java | 25 +++++++++----- .../user/components/datasetprofile/Field.java | 31 ++++++++++++----- .../form-field/form-field.component.html | 8 ++--- .../form-field/form-field.component.ts | 20 +++++------ 5 files changed, 71 insertions(+), 46 deletions(-) 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 f8733633a..261ca04d4 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 @@ -25,7 +25,6 @@ import java.math.BigInteger; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Objects; public class WordBuilder { @@ -132,13 +131,13 @@ public class WordBuilder { return document; } - public void createPages(List datasetProfilePages, XWPFDocument mainDocumentPart, Boolean createListing, VisibilityRuleService visibilityRuleService) { + private void createPages(List datasetProfilePages, XWPFDocument mainDocumentPart, Boolean createListing, VisibilityRuleService visibilityRuleService) { datasetProfilePages.forEach(item -> { createSections(item.getSections(), mainDocumentPart, ParagraphStyle.HEADER4, 0, createListing, visibilityRuleService); }); } - public void createSections(List
sections, XWPFDocument mainDocumentPart, ParagraphStyle style, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService) { + private void createSections(List
sections, XWPFDocument mainDocumentPart, ParagraphStyle style, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService) { if (createListing) this.addListing(mainDocumentPart, indent, false, true); sections.forEach(section -> { if (visibilityRuleService.isElementVisible(section.getId())) { @@ -153,7 +152,7 @@ public class WordBuilder { }); } - public void createCompositeFields(List
compositeFields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService) { + private void createCompositeFields(List
compositeFields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService) { if (createListing) this.addListing(mainDocumentPart, indent, true, true); compositeFields.forEach(compositeField -> { if (visibilityRuleService.isElementVisible(compositeField.getId()) && hasVisibleFields(compositeField, visibilityRuleService)) { @@ -177,7 +176,7 @@ public class WordBuilder { }); } - public void createFields(List fields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService) { + private void createFields(List fields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService) { if (createListing) this.addListing(mainDocumentPart, indent, false, false); fields.forEach(field -> { if (visibilityRuleService.isElementVisible(field.getId())) { @@ -202,7 +201,7 @@ public class WordBuilder { return paragraph; } - public void addListing(XWPFDocument document, int indent, Boolean question, Boolean hasIndication) { + private void addListing(XWPFDocument document, int indent, Boolean question, Boolean hasIndication) { CTLvl cTLvl = this.cTAbstractNum.addNewLvl(); String textLevel = ""; @@ -222,7 +221,7 @@ public class WordBuilder { } } - public String formatter(Field field) throws IOException { + private String formatter(Field field) throws IOException { switch (field.getViewStyle().getRenderStyle()) { case "combobox": { String comboboxType = ((ComboBoxData) field.getData()).getType(); @@ -232,7 +231,7 @@ public class WordBuilder { Map map = new HashMap<>(); if (!field.getValue().equals("")) { try { - JSONArray jsonarray = new JSONArray(field.getValue()); + JSONArray jsonarray = new JSONArray(field.getValue().toString()); for (int i = 0; i < jsonarray.length(); i++) { JSONObject jsonobject = jsonarray.getJSONObject(i); String id = jsonobject.getString("id"); @@ -241,37 +240,39 @@ public class WordBuilder { map.put(id, label); } } - } catch (Exception e){ - Map exMap = mapper.readValue(field.getValue(), new TypeReference>() { + } catch (Exception e) { + Map exMap = mapper.readValue(field.getValue().toString(), new TypeReference>() { }); return exMap.get("label"); } } StringBuilder sb = new StringBuilder(); + int index = 0; for (Map.Entry entry : map.entrySet()) { - sb.append("\n"); sb.append(entry.getValue()); + if (index != map.size() - 1) sb.append(", "); + index++; } return sb.toString(); } else if (comboboxType.equals("wordlist")) { - return field.getValue(); + return field.getValue().toString(); } } case "booleanDecision": if (field.getValue() != null && field.getValue().equals("true")) return "Yes"; else return "No"; case "radiobox": - return field.getValue(); + return field.getValue().toString(); case "checkBox": CheckBoxData data = (CheckBoxData) field.getData(); if (field.getValue() == null || field.getValue().equals("false")) return null; return data.getLabel(); case "freetext": - return field.getValue(); + return field.getValue().toString(); case "textarea": - return field.getValue(); + return field.getValue().toString(); case "datepicker": - return field.getValue(); + return field.getValue().toString(); } return null; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java index 3c0f7024f..6f1948853 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java @@ -7,6 +7,8 @@ import eu.eudat.models.data.user.components.datasetprofile.FieldSet; import eu.eudat.models.data.user.components.datasetprofile.Section; import eu.eudat.models.data.user.composite.DatasetProfilePage; import eu.eudat.models.data.user.composite.PagedDatasetProfile; +import org.json.JSONArray; +import org.json.JSONException; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -17,9 +19,6 @@ import java.io.IOException; import java.util.List; import java.util.UUID; -/** - * Created by ikalyvas on 3/5/2018. - */ public class ExportXmlBuilder { public File build(PagedDatasetProfile pagedDatasetProfile, UUID datasetProfileId, VisibilityRuleService visibilityRuleService) throws IOException { @@ -49,7 +48,7 @@ public class ExportXmlBuilder { return pages; } - public Element createSections(List
sections, VisibilityRuleService visibilityRuleService, Document element) { + private Element createSections(List
sections, VisibilityRuleService visibilityRuleService, Document element) { Element elementSections = element.createElement("sections"); sections.forEach(section -> { Element elementSection = element.createElement("section"); @@ -62,7 +61,7 @@ public class ExportXmlBuilder { return elementSections; } - public Element createCompositeFields(List
compositeFields, VisibilityRuleService visibilityRuleService, Document element) { + private Element createCompositeFields(List
compositeFields, VisibilityRuleService visibilityRuleService, Document element) { Element elementComposites = element.createElement("composite-fields"); compositeFields.forEach(compositeField -> { if (visibilityRuleService.isElementVisible(compositeField.getId()) && hasVisibleFields(compositeField, visibilityRuleService)) { @@ -86,15 +85,25 @@ public class ExportXmlBuilder { return elementComposites; } - public Element createFields(List fields, VisibilityRuleService visibilityRuleService, Document element) { + private Element createFields(List fields, VisibilityRuleService visibilityRuleService, Document element) { Element elementFields = element.createElement("fields"); fields.forEach(field -> { if (visibilityRuleService.isElementVisible(field.getId())) { Element elementField = element.createElement("field"); elementField.setAttribute("id", field.getId()); - if (field.getValue() != null && !field.getValue().isEmpty()) { + if (field.getValue() != null) { Element valueField = element.createElement("value"); - valueField.setTextContent(field.getValue()); + try { + JSONArray jsonArray = new JSONArray(field.getValue().toString()); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < jsonArray.length(); i++) { + sb.append(jsonArray.getJSONObject(i).get("label").toString()); + if (i != jsonArray.length() - 1) sb.append(", "); + } + valueField.setTextContent(sb.toString()); + } catch (JSONException ex) { + valueField.setTextContent(field.getValue().toString()); + } elementField.appendChild(valueField); } elementFields.appendChild(elementField); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java index ea4301ef6..98680bf0a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java @@ -9,6 +9,9 @@ import eu.eudat.models.data.user.composite.PropertiesModelBuilder; import eu.eudat.logic.utilities.interfaces.ViewStyleDefinition; import eu.eudat.logic.utilities.builders.ModelBuilder; +import org.json.JSONArray; +import org.json.JSONException; + import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -17,7 +20,7 @@ import java.util.stream.Collectors; public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefinition, PropertiesGenerator { private String id; private Integer ordinal; - private String value; + private Object value; private ViewStyle viewStyle; private String datatype; private String numbering; @@ -58,11 +61,11 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin this.ordinal = ordinal; } - public String getValue() { + public Object getValue() { return value; } - public void setValue(String value) { + public void setValue(Object value) { this.value = value; } @@ -146,7 +149,7 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin this.rdaProperty = rdaProperty; } - public Field cloneForMultiplicity(String key, Map properties) { + Field cloneForMultiplicity(String key, Map properties) { Field newField = new Field(); newField.id = key; newField.ordinal = this.ordinal; @@ -189,13 +192,21 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin @Override public void fromJsonObject(Map properties) { - this.value = (String) properties.get(this.id); - this.multiplicityItems = new LinkedList(); + try { + JSONArray jsonArray = new JSONArray(properties.get(this.id).toString()); + List stringList = new LinkedList<>(); + for (int i = 0; i < jsonArray.length(); i++) { + stringList.add(jsonArray.getJSONObject(i).toString()); + } + this.value = stringList; + } catch (JSONException e) { + this.value = (String) properties.get(this.id); + } + this.multiplicityItems = new LinkedList<>(); List compositeKeys = properties.keySet().stream().filter(keys -> keys.startsWith("multiple_" + this.getId())).collect(Collectors.toList()); for (String key : compositeKeys) { this.multiplicityItems.add(this.cloneForMultiplicity(key, properties)); } - } @Override @@ -210,7 +221,11 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin @Override public void toMap(Map fieldValues) { - fieldValues.put(this.id, this.value); + if (this.value != null) { + fieldValues.put(this.id, this.value.toString()); + } else { + fieldValues.put(this.id, ""); + } } @Override diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.html b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.html index b39bd663d..6f5d30659 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.html +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.html @@ -19,7 +19,7 @@
+ [configuration]="multipleAutoCompleteConfiguration">
@@ -47,7 +47,7 @@
+ [configuration]="multipleAutoCompleteConfiguration">
@@ -62,7 +62,7 @@
+ [configuration]="multipleAutoCompleteConfiguration">
@@ -77,7 +77,7 @@
+ [configuration]="multipleAutoCompleteConfiguration">
diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.ts index 154573b1d..396ed2825 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.ts +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.ts @@ -100,16 +100,16 @@ export class FormFieldComponent extends BaseComponent implements OnInit { }); } - _optionRemove(event) { - const array = JSON.parse(this.form.get('value').value); - if (array) { - const index = array.map(x => x.id).indexOf(event.id); - if (index >= 0) { - array.splice(index, 1); - } - this.form.get('value').patchValue(JSON.stringify(array)); - } - } + // _optionRemove(event) { + // const array = JSON.parse(this.form.get('value').value); + // if (array) { + // const index = array.map(x => x.id).indexOf(event.id); + // if (index >= 0) { + // array.splice(index, 1); + // } + // this.form.get('value').patchValue(JSON.stringify(array)); + // } + // } _transformValue(item: any) { if (!item) return [];