filebot/source/net/filebot/web/Episode.java

149 lines
3.3 KiB
Java

package net.filebot.web;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
public class Episode implements Serializable {
// base episode record
protected String seriesName;
protected Integer season;
protected Integer episode;
protected String title;
// absolute episode number
protected Integer absolute;
// special number
protected Integer special;
// episode airdate
protected SimpleDate airdate;
// unique identifier
protected Integer id;
// extended series metadata
protected SeriesInfo seriesInfo;
public Episode() {
// used by deserializer
}
public Episode(Episode obj) {
this(obj.seriesName, obj.season, obj.episode, obj.title, obj.absolute, obj.special, obj.airdate, obj.id, obj.seriesInfo);
}
public Episode(String seriesName, Integer season, Integer episode, String title) {
this(seriesName, season, episode, title, null, null, null, null, null);
}
public Episode(String seriesName, Integer season, Integer episode, String title, Integer absolute, Integer special, SimpleDate airdate, Integer id, SeriesInfo seriesInfo) {
this.seriesName = seriesName;
this.season = season;
this.episode = episode;
this.title = title;
this.absolute = absolute;
this.special = special;
this.airdate = airdate == null ? null : airdate.clone();
this.id = id;
this.seriesInfo = seriesInfo == null ? null : seriesInfo.clone();
}
public String getSeriesName() {
return seriesName;
}
public Integer getEpisode() {
return episode;
}
public Integer getSeason() {
return season;
}
public String getTitle() {
return title;
}
public Integer getAbsolute() {
return absolute;
}
public Integer getSpecial() {
return special;
}
public SimpleDate getAirdate() {
return airdate;
}
public Integer getId() {
return id;
}
public SeriesInfo getSeriesInfo() {
return seriesInfo;
}
public List<Integer> getNumbers() {
return Arrays.asList(season, episode, special, absolute);
}
public List<String> getSeriesNames() {
Set<String> names = new LinkedHashSet<String>();
if (seriesName != null) {
names.add(seriesName);
}
if (seriesInfo != null) {
if (seriesInfo.name != null) {
names.add(seriesInfo.name);
}
if (seriesInfo.aliasNames != null) {
for (String it : seriesInfo.aliasNames) {
names.add(it);
}
}
}
return new ArrayList<String>(names);
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Episode) {
Episode other = (Episode) obj;
// check if database id matches
if (id != null && other.id != null) {
return id.equals(other.id) && Objects.equals(seriesInfo, other.seriesInfo);
}
// check if episode record matches
return Objects.equals(season, other.season) && Objects.equals(episode, other.episode) && Objects.equals(absolute, other.absolute) && Objects.equals(special, other.special) && Objects.equals(seriesName, other.seriesName) && Objects.equals(title, other.title);
}
return false;
}
@Override
public int hashCode() {
return id != null ? id : Objects.hash(season, episode, absolute, special, seriesName, title);
}
@Override
public Episode clone() {
return new Episode(this);
}
@Override
public String toString() {
return EpisodeFormat.SeasonEpisode.format(this);
}
}