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