package com.xenoage.zong.musicxml.types.groups; import com.xenoage.utils.annotations.MaybeNull; import com.xenoage.utils.xml.XmlReader; import com.xenoage.utils.xml.XmlWriter; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; import static com.xenoage.utils.Parser.parseFloat; /** * MusicXML all-margins, including the left-right-margins group. * * @author Andreas Wenger */ @AllArgsConstructor @Getter @Setter public final class MxlAllMargins { private float leftMargin; private float rightMargin; private float topMargin; private float bottomMargin; @MaybeNull public static MxlAllMargins read(XmlReader reader) { float leftMargin = 0; float rightMargin = 0; float topMargin = 0; float bottomMargin = 0; while (reader.openNextChildElement()) { String eName = reader.getElementName(); switch (eName) { case "left-margin": leftMargin = parseFloat(reader.getText()); break; case "right-margin": rightMargin = parseFloat(reader.getText()); break; case "top-margin": topMargin = parseFloat(reader.getText()); break; case "bottom-margin": bottomMargin = parseFloat(reader.getText()); break; } reader.closeElement(); } if (leftMargin != 0 || rightMargin != 0 || topMargin != 0 || bottomMargin != 0) return new MxlAllMargins(leftMargin, rightMargin, topMargin, bottomMargin); else return null; } public void write(XmlWriter writer) { writer.writeElementText("left-margin", leftMargin); writer.writeElementText("right-margin", rightMargin); writer.writeElementText("top-margin", topMargin); writer.writeElementText("bottom-margin", bottomMargin); } }