package eu.eudat.models.user.components.datasetprofile; import eu.eudat.models.components.commons.Multiplicity; import eu.eudat.models.properties.PropertiesGenerator; import eu.eudat.models.user.composite.PropertiesModelBuilder; import eu.eudat.utilities.interfaces.ViewStyleDefinition; import eu.eudat.utilities.builders.ModelBuilder; import java.util.*; import java.util.stream.Collectors; public class FieldSet implements Comparable, PropertiesModelBuilder, ViewStyleDefinition, PropertiesGenerator { private String id; private Integer ordinal; private String title; private String description; private String extendedDescription; private Multiplicity multiplicity; private List fields; private List
multiplicityItems; private boolean hasCommentField; private String commentFieldValue; public List getFields() { Collections.sort(this.fields); return fields; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getExtendedDescription() { return extendedDescription; } public void setExtendedDescription(String extendedDescription) { this.extendedDescription = extendedDescription; } public void setFields(List fields) { this.fields = fields; } public String getId() { return id; } public void setId(String id) { this.id = id; } public int getOrdinal() { return ordinal; } public void setOrdinal(int ordinal) { this.ordinal = ordinal; } public Multiplicity getMultiplicity() { return multiplicity; } public void setMultiplicity(Multiplicity multiplicity) { this.multiplicity = multiplicity; } public List
getMultiplicityItems() { return multiplicityItems; } public void setMultiplicityItems(List
multiplicityItems) { this.multiplicityItems = multiplicityItems; } public void setOrdinal(Integer ordinal) { this.ordinal = ordinal; } public void setHasCommentField(boolean hasCommentField) { this.hasCommentField = hasCommentField; } public boolean getHasCommentField() { return hasCommentField; } public String getCommentFieldValue() { return commentFieldValue; } public void setCommentFieldValue(String commentFieldValue) { this.commentFieldValue = commentFieldValue; } @Override public eu.eudat.entities.xmlmodels.datasetprofiledefinition.FieldSet toDatabaseDefinition(eu.eudat.entities.xmlmodels.datasetprofiledefinition.FieldSet item) { List viewStylefields = new ModelBuilder().toViewStyleDefinition(this.fields, eu.eudat.entities.xmlmodels.datasetprofiledefinition.Field.class); item.setFields(viewStylefields); item.setId(this.id); item.setOrdinal(this.ordinal); item.setHasCommentField(this.hasCommentField); item.setMultiplicity(this.multiplicity); item.setCommentFieldValue(this.commentFieldValue); return item; } @Override public void fromDatabaseDefinition(eu.eudat.entities.xmlmodels.datasetprofiledefinition.FieldSet item) { this.fields = new ModelBuilder().fromViewStyleDefinition(item.getFields(), Field.class); this.id = item.getId(); this.ordinal = item.getOrdinal(); this.title = item.getTitle(); this.description = item.getDescription(); this.extendedDescription = item.getExtendedDescription(); this.hasCommentField = item.getHasCommentField(); this.multiplicity = item.getMultiplicity(); this.commentFieldValue = item.getCommentFieldValue(); } @Override public void fromJsonObject(Map properties) { this.commentFieldValue = (String) properties.get("commentFieldValue" + this.id); this.multiplicityItems = new LinkedList
(); this.fields.forEach(item -> { item.fromJsonObject(properties); }); 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, compositeKeys.indexOf(key), properties)); } } private FieldSet cloneForMultiplicity(String key, int index, Map properties) { FieldSet newFieldSet = new FieldSet(); newFieldSet.id = key; newFieldSet.description = this.description; newFieldSet.extendedDescription = this.extendedDescription; newFieldSet.title = this.title; newFieldSet.ordinal = this.ordinal; newFieldSet.fields = new LinkedList(); this.fields.forEach(item -> { newFieldSet.fields.add(item.cloneForMultiplicity(key, properties)); }); //newFieldSet.fields.forEach(item->item.fromJsonObject(properties)); return newFieldSet; } private void createMultiplicityFields(List
fieldSet, Field field) { FieldSet newFieldSet = new FieldSet(); newFieldSet.fields = new LinkedList(); newFieldSet.fields.add(field); fieldSet.add(newFieldSet); } @Override public int compareTo(Object o) { return this.ordinal.compareTo(((FieldSet) o).getOrdinal()); } @Override public void fromJsonObject(Map properties, String path) { // TODO Auto-generated method stub } @Override public void toMap(Map fieldValues) { fieldValues.put("commentFieldValue" + this.id, this.commentFieldValue); this.fields.forEach(item -> item.toMap(fieldValues)); Map multiplicity = new HashMap(); if (this.multiplicityItems != null) { this.multiplicityItems.forEach(item -> item.toMap(fieldValues, this.multiplicityItems.indexOf(item))); } //fieldValues.put(this.id,multiplicity); } @Override public void toMap(Map fieldValues, int index) { this.fields.forEach(item -> item.toMap(fieldValues, index)); //this.multiplicityItems.forEach(item->item.toMap(fieldValues,index)); } }