package com.xenoage.zong.io.musicxml.in.readers; import com.xenoage.zong.core.music.annotation.Articulation; import com.xenoage.zong.core.music.annotation.ArticulationType; import com.xenoage.zong.io.musicxml.Equivalents; import com.xenoage.zong.musicxml.types.MxlArticulations; import com.xenoage.zong.musicxml.types.choice.MxlArticulationsContent; import com.xenoage.zong.musicxml.types.choice.MxlArticulationsContent.MxlArticulationsContentType; import com.xenoage.zong.musicxml.types.enums.MxlPlacement; import java.util.List; import static com.xenoage.utils.collections.CollectionUtils.addNotNull; import static com.xenoage.utils.collections.CollectionUtils.alist; /** * Reads {@link Articulation}s from {@link MxlArticulations}. * * @author Andreas Wenger */ public class ArticulationReader { public static List<Articulation> read(MxlArticulations mxlArticulations) { List<Articulation> ret = alist(); for (MxlArticulationsContent mxlAC : mxlArticulations.getContent()) addNotNull(ret, readArticulation(mxlAC)); return ret; } private static Articulation readArticulation(MxlArticulationsContent mxlAC) { MxlArticulationsContentType mxlACType = mxlAC.getArticulationsContentType(); ArticulationType type = Equivalents.articulations.getBy2(mxlACType); if (type == null) return null; Articulation articulation = new Articulation(type); //read placement MxlPlacement mxlPlacement = mxlAC.getEmptyPlacement().getPlacement(); articulation.setPlacement(PositioningReader.readPlacement(mxlPlacement)); return articulation; } }