package com.xenoage.zong.musicxml.types; import static com.xenoage.zong.musicxml.types.attributes.MxlPrintAttributes.noPrintAttributes; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; import com.xenoage.utils.annotations.MaybeNull; import com.xenoage.utils.xml.XmlReader; import com.xenoage.utils.xml.XmlWriter; import com.xenoage.zong.musicxml.types.attributes.MxlPrintAttributes; import com.xenoage.zong.musicxml.types.choice.MxlMusicDataContent; import com.xenoage.zong.musicxml.types.groups.MxlLayout; import com.xenoage.zong.musicxml.util.IncompleteMusicXML; /** * MusicXML print. * * @author Andreas Wenger */ @IncompleteMusicXML(missing = "measure-layout,measure-numbering,part-name-display," + "part-abbreviation-display", children = "layout,print-attributes") @AllArgsConstructor @Getter @Setter public final class MxlPrint implements MxlMusicDataContent { public static final String elemName = "print"; @MaybeNull private MxlLayout layout; private MxlPrintAttributes printAttributes; @Override public MxlMusicDataContentType getMusicDataContentType() { return MxlMusicDataContentType.Print; } @MaybeNull public static MxlPrint read(XmlReader reader) { MxlLayout layout = new MxlLayout(); MxlPrintAttributes printAttributes = MxlPrintAttributes.read(reader); while (reader.openNextChildElement()) { layout.readElement(reader); reader.closeElement(); } if (false == layout.isUsed()) layout = null; if (layout != null || printAttributes != noPrintAttributes) return new MxlPrint(layout, printAttributes); else return null; } @Override public void write(XmlWriter writer) { writer.writeElementStart(elemName); printAttributes.write(writer); if (layout != null) layout.write(writer); writer.writeElementEnd(); } }