001package net.filebot.web;
002
003import static java.util.Comparator.*;
004
005import java.io.Serializable;
006import java.net.URL;
007import java.util.Comparator;
008
009public class Person implements Serializable {
010
011        protected String name;
012        protected String character;
013        protected String job;
014        protected String department;
015        protected Integer order;
016        protected URL image;
017
018        public Person() {
019                // used by serializer
020        }
021
022        public Person(String name, String job) {
023                this(name, null, job, null, null, null);
024        }
025
026        public Person(String name, String character, String job, String department, Integer order, URL image) {
027                this.name = name;
028                this.character = character == null || character.isEmpty() ? null : character;
029                this.job = job == null || job.isEmpty() ? null : job;
030                this.department = department == null || department.isEmpty() ? null : department;
031                this.order = order;
032                this.image = image;
033        }
034
035        public String getName() {
036                return name;
037        }
038
039        public String getCharacter() {
040                return character;
041        }
042
043        public String getJob() {
044                return job;
045        }
046
047        public String getDepartment() {
048                return department;
049        }
050
051        public Integer getOrder() {
052                return order;
053        }
054
055        public URL getImage() {
056                return image;
057        }
058
059        public boolean isActor() {
060                return character != null || ACTOR.equals(job) || GUEST_STAR.equals(job) || ACTING_DEPARTMENT.equals(department);
061        }
062
063        public boolean isDirector() {
064                return DIRECTOR.equals(job);
065        }
066
067        public boolean isWriter() {
068                return WRITER.equals(job);
069        }
070
071        public boolean isWritingDepartment() {
072                return WRITING_DEPARTMENT.equals(department);
073        }
074
075        @Override
076        public String toString() {
077                return String.format("%s (%s)", name, character != null ? character : job != null ? job : department);
078        }
079
080        public static final String WRITER = "Writer";
081        public static final String DIRECTOR = "Director";
082        public static final String ACTOR = "Actor";
083        public static final String GUEST_STAR = "Guest Star";
084        public static final String WRITING_DEPARTMENT = "Writing";
085        public static final String ACTING_DEPARTMENT = "Acting";
086
087        public static final Comparator<Person> CREDIT_ORDER = comparing(Person::getOrder, nullsLast(naturalOrder()));
088
089}