package com.xenoage.zong.musicxml.types.groups; import static com.xenoage.utils.collections.CollectionUtils.alist; import java.util.List; import lombok.Getter; import lombok.Setter; import com.xenoage.utils.annotations.NonEmpty; import com.xenoage.utils.xml.XmlReader; import com.xenoage.utils.xml.XmlWriter; import com.xenoage.zong.musicxml.types.MxlAttributes; import com.xenoage.zong.musicxml.types.MxlBackup; import com.xenoage.zong.musicxml.types.MxlBarline; import com.xenoage.zong.musicxml.types.MxlDirection; import com.xenoage.zong.musicxml.types.MxlForward; import com.xenoage.zong.musicxml.types.MxlNote; import com.xenoage.zong.musicxml.types.MxlPrint; import com.xenoage.zong.musicxml.types.choice.MxlMusicDataContent; import com.xenoage.zong.musicxml.util.IncompleteMusicXML; /** * MusicXML music-data. * * @author Andreas Wenger */ @IncompleteMusicXML(missing = "harmony,figured-bass,sound,grouping,link,bookmark", children = "note,backup,forward,direction,attributes,print,barline") @Getter @Setter public final class MxlMusicData { @NonEmpty private List<MxlMusicDataContent> content = alist(); public void readElement(XmlReader reader) { MxlMusicDataContent item = null; String n = reader.getElementName(); switch (n.charAt(0)) { //switch for performance case 'a': if (n.equals(MxlAttributes.elemName)) item = MxlAttributes.read(reader); break; case 'b': if (n.equals(MxlBackup.elemName)) item = MxlBackup.read(reader); else if (n.equals(MxlBarline.elemName)) item = MxlBarline.read(reader); break; case 'd': if (n.equals(MxlDirection.elemName)) item = MxlDirection.read(reader); break; case 'f': if (n.equals(MxlForward.elemName)) item = MxlForward.read(reader); break; case 'n': if (n.equals(MxlNote.elemName)) item = MxlNote.read(reader); break; case 'p': if (n.equals(MxlPrint.elemName)) item = MxlPrint.read(reader); break; } if (item != null) content.add(item); } public void write(XmlWriter writer) { for (MxlMusicDataContent item : content) { item.write(writer); } } }