package com.xenoage.zong.musicxml.types.partwise; import static com.xenoage.utils.collections.CollectionUtils.alist; import java.util.List; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; import com.xenoage.utils.annotations.NonEmpty; import com.xenoage.utils.annotations.NonNull; import com.xenoage.utils.xml.XmlReader; import com.xenoage.utils.xml.XmlWriter; import com.xenoage.zong.musicxml.util.IncompleteMusicXML; /** * MusicXML part in a partwise score. * * @author Andreas Wenger */ @IncompleteMusicXML(children = "measure") @AllArgsConstructor @Getter @Setter public final class MxlPart { public static final String elemName = "part"; @NonEmpty private List<MxlMeasure> measures; @NonNull private String id; @NonNull public static MxlPart read(XmlReader reader) { String id = reader.getAttributeNotNull("id"); List<MxlMeasure> measures = alist(); while (reader.openNextChildElement()) { if (reader.getElementName().equals(MxlMeasure.elemName)) measures.add(MxlMeasure.read(reader)); reader.closeElement(); } if (measures.size() < 1) throw reader.dataException("no measures found"); return new MxlPart(measures, id); } public void write(XmlWriter writer) { writer.writeElementStart(elemName); writer.writeAttribute("id", id); for (MxlMeasure measure : measures) { measure.write(writer); writeSeparatorComment(writer); } writer.writeElementEnd(); } private void writeSeparatorComment(XmlWriter writer) { writer.writeLineBreak(); writer.writeComment("======================================================="); } }