package com.xenoage.zong.musicxml.types; import java.util.List; import lombok.AllArgsConstructor; import lombok.Setter; import lombok.Getter; import com.xenoage.utils.annotations.NonEmpty; import com.xenoage.utils.annotations.NonNull; import com.xenoage.utils.collections.CollectionUtils; import com.xenoage.utils.xml.XmlReader; import com.xenoage.utils.xml.XmlWriter; import com.xenoage.zong.musicxml.types.choice.MxlCreditContent; import com.xenoage.zong.musicxml.util.IncompleteMusicXML; /** * MusicXML credit-words content for the credit element. * * Here, the sequence of several credit-words elements * is accumulated to a single class instance, with multiple * {@link MxlFormattedText} instances instead. * * @author Andreas Wenger */ @IncompleteMusicXML(missing = "link,bookmark", partly = "credit-words") @AllArgsConstructor @Getter @Setter public final class MxlCreditWords implements MxlCreditContent { public static final String elemName = "credit-words"; @NonEmpty private final List<MxlFormattedText> items; @Override public MxlCreditContentType getCreditContentType() { return MxlCreditContentType.CreditWords; } /** * Reads the current element, and all of its following siblings. */ @NonNull public static MxlCreditWords read(XmlReader reader) { List<MxlFormattedText> items = CollectionUtils.alist(); do { String n = reader.getElementName(); if (n.equals(elemName)) items.add(MxlFormattedText.read(reader)); reader.closeElement(); } while (reader.openNextChildElement()); if (items.size() < 1) throw reader.dataException("no " + elemName + " found"); return new MxlCreditWords(items); } @Override public void write(XmlWriter writer) { for (MxlFormattedText item : items) { writer.writeElementStart(elemName); item.write(writer); writer.writeElementEnd(); } } }