package eu.eudat.entities.xmlmodels.datasetprofiledefinition; import eu.eudat.models.components.commons.DefaultValue; import eu.eudat.models.components.commons.ViewStyle; import eu.eudat.models.components.commons.Visibility; import eu.eudat.models.components.commons.datafield.FieldData; import eu.eudat.utilities.interfaces.XmlSerializable; import eu.eudat.utilities.builders.ModelBuilder; import eu.eudat.utilities.builders.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 Field implements DatabaseViewStyleDefinition, XmlSerializable { private String id; private int ordinal; private ViewStyle viewStyle; private DefaultValue defaultValue; private Visibility visible; private FieldData data; private List validations; 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 ViewStyle getViewStyle() { return viewStyle; } public void setViewStyle(ViewStyle viewStyle) { this.viewStyle = viewStyle; } public FieldData getData() { return data; } public void setData(FieldData data) { this.data = data; } public DefaultValue getDefaultValue() { return defaultValue; } public void setDefaultValue(DefaultValue defaultValue) { this.defaultValue = defaultValue; } public Visibility getVisible() { return visible; } public void setVisible(Visibility visible) { this.visible = visible; } public List getValidations() { return validations; } public void setValidations(List validations) { this.validations = validations; } @Override public Element toXml(Document doc) { Element rootElement = doc.createElement("field"); rootElement.setAttribute("id", this.id); rootElement.setAttribute("ordinal", "" + this.ordinal); Element viewStyle = doc.createElement("viewStyle"); viewStyle.setAttribute("renderstyle", this.viewStyle.getRenderStyle()); viewStyle.setAttribute("cssClass", this.viewStyle.getCssClass()); Element visibility = this.visible.toXml(doc); Element defaultValue = doc.createElement("defaultValue"); defaultValue.setAttribute("type", this.defaultValue.getType()); defaultValue.setAttribute("value", this.defaultValue.getValue()); Element validations = doc.createElement("validations"); for (eu.eudat.models.admin.components.datasetprofile.Field.ValidationType validationType : this.validations) { Element validation = doc.createElement("validation"); validation.setAttribute("type", "" + validationType.getValue()); validations.appendChild(validation); } rootElement.appendChild(validations); rootElement.appendChild(defaultValue); rootElement.appendChild(visibility); rootElement.appendChild(viewStyle); if (this.data != null) rootElement.appendChild(this.data.toXml(doc)); return rootElement; } @Override public Field fromXml(Element element) { this.id = element.getAttribute("id"); this.ordinal = Integer.parseInt(element.getAttribute("ordinal")); this.viewStyle = new ViewStyle(); Element viewStyle = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "viewStyle"); this.viewStyle.setRenderStyle(viewStyle.getAttribute("renderstyle")); this.viewStyle.setCssClass(viewStyle.getAttribute("cssClass")); Element visibility = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "visible"); this.visible = new Visibility().fromXml(visibility); Element dataElement = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "data"); Element defaultValue = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "defaultValue"); this.defaultValue = new DefaultValue(); this.defaultValue.setType(defaultValue.getAttribute("type")); this.defaultValue.setValue(defaultValue.getAttribute("value")); this.data = new ModelBuilder().toFieldData(null, this.viewStyle.getRenderStyle(), dataElement); 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) { int enumValue = Integer.parseInt(((Element) validationElement).getAttribute("type")); eu.eudat.models.admin.components.datasetprofile.Field.ValidationType validationType = eu.eudat.models.admin.components.datasetprofile.Field.ValidationType.fromInteger(enumValue); this.validations.add(validationType); } } } return this; } }