package com.xenoage.zong.musicxml.types;
import static com.xenoage.utils.NullUtils.notNull;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import com.xenoage.utils.annotations.NonNull;
import com.xenoage.utils.xml.XmlReader;
import com.xenoage.utils.xml.XmlWriter;
import com.xenoage.zong.musicxml.types.attributes.MxlColor;
import com.xenoage.zong.musicxml.types.attributes.MxlPosition;
import com.xenoage.zong.musicxml.types.choice.MxlDirectionTypeContent;
import com.xenoage.zong.musicxml.types.enums.MxlWedgeType;
import com.xenoage.zong.musicxml.types.util.MxlPositionContent;
import com.xenoage.zong.musicxml.util.IncompleteMusicXML;
/**
* MusicXML wedge.
*
* @author Andreas Wenger
*/
@IncompleteMusicXML(missing = "spread")
@AllArgsConstructor @Getter @Setter
public final class MxlWedge
implements MxlDirectionTypeContent, MxlPositionContent {
public static final String elemName = "wedge";
@NonNull private MxlWedgeType type;
private int number;
private MxlPosition position;
private MxlColor color;
private static final int defaultNumber = 1;
@Override public MxlDirectionTypeContentType getDirectionTypeContentType() {
return MxlDirectionTypeContentType.Wedge;
}
@NonNull public static MxlWedge read(XmlReader reader) {
return new MxlWedge(MxlWedgeType.read(reader.getAttribute("type")),
notNull(reader.getAttributeInt("number"), defaultNumber),
MxlPosition.read(reader), MxlColor.read(reader));
}
@Override public void write(XmlWriter writer) {
writer.writeElementStart(elemName);
writer.writeAttribute("type", type.write());
writer.writeAttribute("number", number);
position.write(writer);
color.write(writer);
writer.writeElementEnd();
}
}