package com.xenoage.zong.musicxml.types; 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.MxlPosition; import com.xenoage.zong.musicxml.types.choice.MxlCreditContent; import com.xenoage.zong.musicxml.types.choice.MxlDirectionTypeContent; import com.xenoage.zong.musicxml.types.enums.MxlLeftCenterRight; import com.xenoage.zong.musicxml.types.enums.MxlVAlignImage; import com.xenoage.zong.musicxml.types.util.MxlPositionContent; /** * MusicXML image or credit-image. * * @author Andreas Wenger */ @AllArgsConstructor @Getter @Setter public final class MxlImage implements MxlCreditContent, MxlDirectionTypeContent, MxlPositionContent { private String elemName; //"image" or "credit-image" private String source; private String type; private MxlPosition position; private MxlLeftCenterRight hAlign; private MxlVAlignImage vAlign; @Override public MxlCreditContentType getCreditContentType() { return MxlCreditContentType.CreditImage; } @Override public MxlDirectionTypeContentType getDirectionTypeContentType() { return MxlDirectionTypeContentType.Image; } @NonNull public static MxlImage read(XmlReader reader) { String elemName = reader.getElementName(); String source = reader.getAttributeNotNull("source"); String type = reader.getAttributeNotNull("type"); return new MxlImage(elemName, source, type, MxlPosition.read(reader), MxlLeftCenterRight.read(reader, "halign"), MxlVAlignImage.read(reader)); } @Override public void write(XmlWriter writer) { writer.writeElementStart(elemName); writer.writeAttribute("source", source); writer.writeAttribute("type", type); position.write(writer); hAlign.write(writer, "halign"); vAlign.write(writer); writer.writeElementEnd(); } }