filebot/source/net/filebot/web/MappedEpisode.java

135 lines
2.9 KiB
Java
Raw Normal View History

2019-06-10 03:07:09 -04:00
package net.filebot.web;
2019-06-10 04:30:01 -04:00
import java.util.Optional;
2019-06-10 03:07:09 -04:00
import java.util.Set;
2019-06-10 04:30:01 -04:00
import java.util.function.Function;
2019-06-10 03:07:09 -04:00
public class MappedEpisode extends Episode {
protected Episode mapping;
2019-06-10 04:30:01 -04:00
public MappedEpisode() {
// used by deserializer
}
2019-06-10 03:07:09 -04:00
public MappedEpisode(Episode original, Episode mapping) {
super(original);
this.mapping = mapping;
}
public Episode getOriginal() {
return new Episode(this);
}
public Episode getMapping() {
return mapping;
}
2019-06-10 04:30:01 -04:00
private <T> T getFirst(Function<Episode, T> getter) {
return Optional.ofNullable(getter.apply(mapping)).orElseGet(() -> {
return Optional.ofNullable(getter.apply(getOriginal())).orElse(null);
});
}
2019-06-10 03:07:09 -04:00
@Override
public String getSeriesName() {
2019-06-10 04:30:01 -04:00
return getFirst(Episode::getSeriesName);
2019-06-10 03:07:09 -04:00
}
@Override
public Integer getEpisode() {
2019-06-10 04:30:01 -04:00
return mapping.getEpisode(); // always use mapped episode number
2019-06-10 03:07:09 -04:00
}
@Override
public Integer getSeason() {
2019-06-10 04:30:01 -04:00
return mapping.getSeason(); // always use mapped season number
2019-06-10 03:07:09 -04:00
}
@Override
public String getTitle() {
2019-06-10 04:30:01 -04:00
return getFirst(Episode::getTitle);
2019-06-10 03:07:09 -04:00
}
@Override
public Integer getAbsolute() {
2019-06-10 04:30:01 -04:00
return mapping.getAbsolute(); // always use mapped absolute number
2019-06-10 03:07:09 -04:00
}
@Override
public Integer getSpecial() {
2019-06-10 04:30:01 -04:00
return mapping.getSpecial(); // always use mapped special number
2019-06-10 03:07:09 -04:00
}
@Override
public SimpleDate getAirdate() {
2019-06-10 04:30:01 -04:00
return getFirst(Episode::getAirdate);
2019-06-10 03:07:09 -04:00
}
@Override
public Integer getId() {
2019-06-10 04:30:01 -04:00
return getFirst(Episode::getId);
2019-06-10 03:07:09 -04:00
}
@Override
public Set<String> getSeriesNames() {
2019-06-10 04:30:01 -04:00
return getFirst(Episode::getSeriesNames);
2019-06-10 03:07:09 -04:00
}
@Override
public boolean isAnime() {
2019-06-10 04:30:01 -04:00
return super.isAnime(); // series info is only stored in the original episode object
2019-06-10 03:07:09 -04:00
}
@Override
public boolean isRegular() {
return mapping.isRegular();
}
@Override
public boolean isSpecial() {
return mapping.isSpecial();
}
2019-06-10 04:30:01 -04:00
@Override
public SeriesInfo getSeriesInfo() {
return super.getSeriesInfo(); // series info is only stored in the original episode object
}
2019-06-10 03:07:09 -04:00
@Override
public boolean equals(Object obj) {
2019-06-10 04:30:01 -04:00
return super.equals(obj); // use original episode object for episode comparison
2019-06-10 03:07:09 -04:00
}
@Override
public int hashCode() {
2019-06-10 04:30:01 -04:00
return super.hashCode(); // use original episode object for episode comparison
2019-06-10 03:07:09 -04:00
}
@Override
public MappedEpisode clone() {
return new MappedEpisode(this, mapping);
}
@Override
public MappedEpisode derive(Integer season, Integer episode) {
return new MappedEpisode(this, mapping.derive(season, episode));
}
@Override
public MappedEpisode deriveSpecial(Integer special) {
return new MappedEpisode(this, mapping.deriveSpecial(special));
}
@Override
public MappedEpisode derive(String seriesName, Integer season, Integer episode, Integer absolute, Integer special) {
return new MappedEpisode(this, mapping.derive(seriesName, season, episode, absolute, special));
}
@Override
public String toString() {
2019-06-10 04:30:01 -04:00
return String.format("%s [%s]", getMapping(), getOriginal());
2019-06-10 03:07:09 -04:00
}
}