package com.xenoage.zong.musicxml.types;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import com.xenoage.utils.Parser;
import com.xenoage.utils.annotations.MaybeNull;
import com.xenoage.utils.xml.XmlReader;
import com.xenoage.utils.xml.XmlWriter;
import com.xenoage.zong.musicxml.types.enums.MxlMode;
import com.xenoage.zong.musicxml.util.IncompleteMusicXML;
/**
* MusicXML key.
*
* Currently only the fifths element is supported.
*
* @author Andreas Wenger
*/
@IncompleteMusicXML(missing = "non-traditional-key,key-octave,number,print-style,print-object",
partly = "traditional-key")
@AllArgsConstructor @Getter @Setter
public final class MxlKey {
public static final String elemName = "key";
public int fifths;
@MaybeNull public MxlMode mode;
/**
* Returns null, if the key is unsupported.
*/
@MaybeNull public static MxlKey read(XmlReader reader) {
Integer fifths = null;
MxlMode mode = null;
while (reader.openNextChildElement()) {
String eName = reader.getElementName();
if (eName.equals("fifths")) {
fifths = Parser.parseIntegerNull(reader.getText());
}
else if (eName.equals(MxlMode.elemName)) {
mode = MxlMode.read(reader);
}
reader.closeElement();
}
if (fifths != null)
return new MxlKey(fifths, mode);
else
return null;
}
public void write(XmlWriter writer) {
writer.writeElementStart(elemName);
writer.writeElementText("fifths", fifths);
if (mode != null)
mode.write(writer);
writer.writeElementEnd();
}
}