package com.xenoage.zong.core.info;
import static com.xenoage.utils.NullUtils.notNull;
import static com.xenoage.utils.collections.CollectionUtils.alist;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import com.xenoage.utils.annotations.MaybeEmpty;
import com.xenoage.utils.annotations.MaybeNull;
import com.xenoage.utils.annotations.NonNull;
/**
* Information about a single score,
* like title or composer.
*
* @author Andreas Wenger
*/
@AllArgsConstructor @RequiredArgsConstructor @Data
public class ScoreInfo {
/** Title of the work. */
@MaybeNull private String workTitle;
/** Number of the work. */
@MaybeNull private String workNumber;
/** Title of the movement. */
@MaybeNull private String movementTitle;
/** Number of the movement. */
@MaybeNull private String movementNumber;
/** List of creators (composers, arrangers, ...). */
@NonNull @MaybeEmpty private List<Creator> creators = alist();
/** List of rights. */
@NonNull @MaybeEmpty private List<Rights> rights = alist();
/**
* Gets the first mentioned composer of this score, or null
* if unavailable.
*/
public String getComposer() {
for (Creator creator : creators) {
if (creator.getType() != null && creator.getType().toLowerCase().equals("composer"))
return creator.getName();
}
return null;
}
/**
* Gets the title of the score. This is the movement-title, or if unknown,
* the work-title. If both are unknown, null is returned.
*/
public String getTitle() {
return notNull(movementTitle, workTitle);
}
}