package com.xenoage.zong.musicxml.types; import com.xenoage.utils.annotations.MaybeEmpty; import com.xenoage.utils.annotations.MaybeNull; import com.xenoage.utils.xml.XmlReader; import com.xenoage.utils.xml.XmlWriter; import com.xenoage.zong.musicxml.types.choice.MxlNotationsContent; import com.xenoage.zong.musicxml.types.choice.MxlOrnamentsContent; import com.xenoage.zong.musicxml.util.IncompleteMusicXML; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; import java.util.List; import static com.xenoage.utils.collections.CollectionUtils.alist; /** * MusicXML ornaments. * * @author Andreas Wenger */ @IncompleteMusicXML(missing = "shake,wavy-line,schleifer,tremolo,other-ornament") @AllArgsConstructor @Getter @Setter public final class MxlOrnaments implements MxlNotationsContent { public static final String elemName = "ornaments"; @MaybeEmpty private List<MxlOrnamentsContent> content; @Override public MxlNotationsContentType getNotationsContentType() { return MxlNotationsContentType.Ornaments; } @MaybeNull public static MxlOrnaments read(XmlReader reader) { List<MxlOrnamentsContent> content = alist(); while (reader.openNextChildElement()) { String n = reader.getElementName(); switch (n) { case MxlTrillMark.elemName: content.add(MxlTrillMark.read(reader)); break; case MxlTurn.elemName: content.add(MxlTurn.read(reader)); break; case MxlDelayedTurn.elemName: content.add(MxlDelayedTurn.read(reader)); break; case MxlInvertedTurn.elemName: content.add(MxlInvertedTurn.read(reader)); break; case MxlMordent.elemName: content.add(MxlMordent.read(reader)); break; case MxlInvertedMordent.elemName: content.add(MxlInvertedMordent.read(reader)); break; case MxlAccidentalMark.elemName: content.add(MxlAccidentalMark.read(reader)); break; } reader.closeElement(); } if (content.size() == 0) return null; return new MxlOrnaments(content); } @Override public void write(XmlWriter writer) { writer.writeElementStart(elemName); for (MxlOrnamentsContent item : content) item.write(writer); writer.writeElementEnd(); } }