001package net.filebot.web;
002
003import static java.util.stream.Collectors.*;
004
005import java.util.List;
006import java.util.function.Predicate;
007
008public interface Crew {
009
010        List<Person> getCrew();
011
012        default List<Person> getCast() {
013                return getCrew().stream().filter(Person::isActor).collect(toList());
014        }
015
016        default List<String> getActors() {
017                return getCrewNames(Person::isActor);
018        }
019
020        default List<String> getDirectors() {
021                return getCrewNames(Person::isDirector);
022        }
023
024        default List<String> getWriters() {
025                return getCrewNames(Person::isWriter);
026        }
027
028        default String getDirector() {
029                return getCrewName(Person::isDirector);
030        }
031
032        default String getWriter() {
033                return getCrewName(Person::isWriter);
034        }
035
036        default String getCrewName(Predicate<Person> filter) {
037                return getCrew().stream().filter(filter).map(Person::getName).findFirst().orElse(null);
038        }
039
040        default List<String> getCrewNames(Predicate<Person> filter) {
041                return getCrew().stream().filter(filter).map(Person::getName).collect(toList());
042        }
043
044}