package models.user.components.datasetprofile; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import com.fasterxml.classmate.util.ResolvedTypeCache.Key; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; import models.components.commons.Multiplicity; import models.user.composite.PropertiesModelBuilder; import utilities.ModelDefinition; import utilities.ViewStyleDefinition; import utilities.builders.ModelBuilder; public class FieldSet implements Comparable,PropertiesModelBuilder, ModelDefinition,ViewStyleDefinition{ private String id; private Integer ordinal; private Multiplicity multiplicity; private List fields; private List
multiplicityItems; public List getFields() { Collections.sort(this.fields); return fields; } 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; } @Override public entities.xmlmodels.modeldefinition.FieldSet toDatabaseDefinition(entities.xmlmodels.modeldefinition.FieldSet fieldSet) { fieldSet.setId(this.id); fieldSet.setOrdinal(this.ordinal); List modelfields = new ModelBuilder().toModelDefinition(this.fields, entities.xmlmodels.modeldefinition.Field.class); fieldSet.setFields(modelfields); fieldSet.setMultiplicity(this.multiplicity); return fieldSet; } @Override public void fromDatabaseDefinition(entities.xmlmodels.modeldefinition.FieldSet item) { this.id = item.getId(); this.ordinal = item.getOrdinal(); this.multiplicity = item.getMultiplicity(); } @Override public entities.xmlmodels.viewstyledefinition.FieldSet toDatabaseDefinition(entities.xmlmodels.viewstyledefinition.FieldSet item) { List viewStylefields = new ModelBuilder().toViewStyleDefinition(this.fields, entities.xmlmodels.viewstyledefinition.Field.class); item.setFields(viewStylefields); item.setId(this.id); item.setOrdinal(this.ordinal); return item; } @Override public void fromDatabaseDefinition(entities.xmlmodels.viewstyledefinition.FieldSet item) { this.fields = new ModelBuilder().fromViewStyleDefinition(item.getFields(), Field.class); this.id = item.getId(); this.ordinal = item.getOrdinal(); } @Override public void fromJsonObject(Map properties) { 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, properties)); } } private FieldSet cloneForMultiplicity(String id, Map properties){ FieldSet newFieldSet = new FieldSet(); newFieldSet.id = id; newFieldSet.ordinal = this.ordinal; newFieldSet.fields = new LinkedList(); this.fields.forEach(item->{ newFieldSet.fields.add(item.cloneForMultiplicity("multiple_"+item.getId()+"_"+this.fields.indexOf(item), 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, int index) { // TODO Auto-generated method stub } }