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 com.xenoage.zong.musicxml.types.MxlPageLayout; import com.xenoage.zong.musicxml.types.MxlStaffLayout; import com.xenoage.zong.musicxml.types.MxlSystemLayout; import com.xenoage.zong.musicxml.util.IncompleteMusicXML; import lombok.Getter; import lombok.Setter; import java.util.ArrayList; import java.util.List; /** * MusicXML layout. * * @author Andreas Wenger */ @IncompleteMusicXML(children = "page-layout") @Getter @Setter public final class MxlLayout { @MaybeNull private MxlPageLayout pageLayout = null; @MaybeNull private MxlSystemLayout systemLayout = null; @MaybeNull private List<MxlStaffLayout> staffLayouts = null; public void readElement(XmlReader reader) { String n = reader.getElementName(); switch (n) { case MxlPageLayout.elemName: pageLayout = MxlPageLayout.read(reader); break; case MxlSystemLayout.elemName: systemLayout = MxlSystemLayout.read(reader); break; case MxlStaffLayout.elemName: if (staffLayouts == null) staffLayouts = new ArrayList<>(); staffLayouts.add(MxlStaffLayout.read(reader)); break; } } public boolean isUsed() { return pageLayout != null || systemLayout != null || (staffLayouts != null && staffLayouts.size() > 0); } public void write(XmlWriter writer) { if (pageLayout != null) pageLayout.write(writer); if (systemLayout != null) systemLayout.write(writer); if (staffLayouts != null) { for (MxlStaffLayout staffLayout : staffLayouts) staffLayout.write(writer); } } }