package eu.eudat.commons.types.descriptiontemplate; import eu.eudat.commons.enums.FieldValidationType; import eu.eudat.commons.enums.FieldType; import eu.eudat.commons.types.common.DatabaseViewStyleDefinition; import eu.eudat.commons.types.descriptiontemplate.fielddata.*; import eu.eudat.commons.types.xml.XmlSerializable; import eu.eudat.commons.types.xml.XmlBuilder; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import java.util.LinkedList; import java.util.List; public class FieldEntity implements DatabaseViewStyleDefinition, XmlSerializable { private String id; private int ordinal; private List schematics; private String numbering; private String defaultValue; private List visibilityRules; private BaseFieldDataEntity data; private List validations; private Boolean includeInExport; 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 List getSchematics() { return schematics; } public void setSchematics(List schematics) { this.schematics = schematics; } public BaseFieldDataEntity getData() { return data; } public void setData(BaseFieldDataEntity data) { this.data = data; } public String getDefaultValue() { return defaultValue; } public void setDefaultValue(String defaultValue) { this.defaultValue = defaultValue; } public List getValidations() { return validations; } public void setValidations(List validations) { this.validations = validations; } public String getNumbering() { return numbering; } public void setNumbering(String numbering) { this.numbering = numbering; } public Boolean getIncludeInExport() { return includeInExport; } public void setIncludeInExport(Boolean includeInExport) { this.includeInExport = includeInExport; } public List getVisibilityRules() { return visibilityRules; } public void setVisibilityRules(List visibilityRules) { this.visibilityRules = visibilityRules; } @Override public Element toXml(Document doc) { Element rootElement = doc.createElement("field"); rootElement.setAttribute("id", this.id); rootElement.setAttribute("ordinal", "" + this.ordinal); Element schematics = doc.createElement("schematics"); if (this.schematics != null) { for (String s : this.schematics) { Element schematic = doc.createElement("schematic"); schematic.setTextContent(s); schematics.appendChild(schematic); } } Element viewStyle = doc.createElement("viewStyle"); if (this.data != null) { switch (this.data.getFieldType()){ case COMBO_BOX: case AUTO_COMPLETE: case WORD_LIST:{ viewStyle.setAttribute("renderstyle", FieldType.COMBO_BOX.getValue()); break; } case INTERNAL_DMP_ENTRIES: case INTERNAL_DMP_ENTRIES_DMPS: case INTERNAL_DMP_ENTRIES_DATASETS: case INTERNAL_DMP_ENTRIES_RESEARCHERS:{ viewStyle.setAttribute("renderstyle", FieldType.INTERNAL_DMP_ENTRIES.getValue()); break; } case BOOLEAN_DECISION: viewStyle.setAttribute("renderstyle", this.data.getFieldType().getValue()); } } Element visibilityRulesElement = doc.createElement("visible"); if (this.visibilityRules != null && !this.visibilityRules.isEmpty()) { for (RuleEntity rule : this.visibilityRules) { visibilityRulesElement.appendChild(rule.toXml(doc)); } } Element defaultValue = doc.createElement("defaultValue"); defaultValue.setAttribute("value", this.getDefaultValue()); Element validations = doc.createElement("validations"); for (FieldValidationType validationType : this.validations) { Element validation = doc.createElement("validation"); validation.setAttribute("type", "" + validationType.getValue()); validations.appendChild(validation); } Element numbering = doc.createElement("numbering"); numbering.setTextContent(this.numbering); rootElement.appendChild(schematics); rootElement.appendChild(numbering); rootElement.appendChild(validations); rootElement.appendChild(defaultValue); rootElement.appendChild(visibilityRulesElement); rootElement.appendChild(viewStyle); if (this.data != null) { rootElement.appendChild(this.data.toXml(doc)); } rootElement.setAttribute("export", this.includeInExport == null || this.includeInExport ? "true" : "false"); return rootElement; } @Override public FieldEntity fromXml(Element element) { this.id = element.getAttribute("id"); this.ordinal = Integer.parseInt(element.getAttribute("ordinal")); Element viewStyle = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "viewStyle"); FieldType fieldType = FieldType.of(viewStyle.getAttribute("renderstyle")); Element visibility = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "visible"); NodeList rulesElements = visibility.getChildNodes(); this.visibilityRules = new LinkedList(); for (int temp = 0; temp < rulesElements.getLength(); temp++) { Node ruleElement = rulesElements.item(temp); if (ruleElement.getNodeType() == Node.ELEMENT_NODE) { this.visibilityRules.add(new RuleEntity().fromXml((Element) ruleElement)); } } Element numbering = XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "numbering"); if (numbering != null) this.numbering = numbering.getTextContent(); this.schematics = new LinkedList<>(); Element schematics = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "schematics"); if(schematics != null){ NodeList schematicElements = schematics.getChildNodes(); for (int temp = 0; temp < schematicElements.getLength(); temp++) { Node schematicElement = schematicElements.item(temp); if (schematicElement.getNodeType() == Node.ELEMENT_NODE) { this.schematics.add(schematicElement.getTextContent()); } } } Element dataElement = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "data"); Element defaultValue = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "defaultValue"); this.defaultValue = defaultValue.getAttribute("value"); String subType = dataElement != null ? dataElement.getAttribute("type") : null; this.data = new FieldDataHelper().create(fieldType, subType); if (this.data != null) this.data.fromXml(dataElement); this.validations = new LinkedList<>(); Element validations = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "validations"); if (validations != null) { NodeList validationElements = validations.getChildNodes(); for (int temp = 0; temp < validationElements.getLength(); temp++) { Node validationElement = validationElements.item(temp); if (validationElement.getNodeType() == Node.ELEMENT_NODE) { Short enumValue = Short.parseShort(((Element) validationElement).getAttribute("type")); FieldValidationType validationType = FieldValidationType.of(enumValue); this.validations.add(validationType); } } } if (element.hasAttribute("export")) { this.includeInExport = Boolean.parseBoolean(element.getAttribute("export")); } else { this.includeInExport = true; } return this; } }