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.types.choice.MxlTimeContent;
import com.xenoage.zong.musicxml.types.enums.MxlTimeSymbol;
import com.xenoage.zong.musicxml.util.IncompleteMusicXML;
/**
* MusicXML time.
*
* @author Andreas Wenger
*/
@IncompleteMusicXML(missing = "number,print-style,print-object", partly = "beats,beat-type")
@AllArgsConstructor @Getter @Setter
public final class MxlTime {
public static final String elemName = "time";
@NonNull private MxlTimeContent content;
@MaybeNull private MxlTimeSymbol symbol;
/**
* Returns null, if the time signature is unsupported.
*/
@MaybeNull public static MxlTime read(XmlReader reader) {
MxlTimeSymbol symbol = MxlTimeSymbol.read(reader);
MxlTimeContent content = null;
if (reader.openNextChildElement()) {
String n = reader.getElementName();
switch (n) {
case "beats":
content = MxlNormalTime.read(reader);
break;
case "senza-misura":
content = MxlSenzaMisura.read();
reader.closeElement();
break;
default:
reader.closeElement();
break;
}
}
if (content != null)
return new MxlTime(content, symbol);
else
return null;
}
public void write(XmlWriter writer) {
writer.writeElementStart(elemName);
if (symbol != null)
symbol.write(writer);
content.write(writer);
writer.writeElementEnd();
}
}