package com.xenoage.zong.musicxml.types; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; import com.xenoage.utils.annotations.MaybeNull; 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 score-instrument. * * @author Andreas Wenger */ @IncompleteMusicXML(missing = "solo,ensemble") @AllArgsConstructor @Getter @Setter public final class MxlScoreInstrument { public static final String elemName = "score-instrument"; @NonNull private String instrumentName; @MaybeNull private String instrumentAbbreviation; @NonNull private String id; @NonNull public static MxlScoreInstrument read(XmlReader reader) { //attributes String id = reader.getAttributeNotNull("id"); //elements String instrumentName = null; String instrumentAbbreviation = null; while (reader.openNextChildElement()) { String n = reader.getElementName(); if (n.equals("instrument-name")) instrumentName = reader.getTextNotNull(); else if (n.equals("instrument-abbreviation")) instrumentAbbreviation = reader.getTextNotNull(); reader.closeElement(); } if (instrumentName == null) //DEPENCENDY INJECTION: error or fallback //throw reader.dataException("instrument-name unknown"); instrumentName = ""; return new MxlScoreInstrument(instrumentName, instrumentAbbreviation, id); } public void write(XmlWriter writer) { writer.writeElementStart(elemName); writer.writeAttribute("id", id); writer.writeElementText("instrument-name", instrumentName); writer.writeElementText("instrument-abbreviation", instrumentAbbreviation); writer.writeElementEnd(); } }