Improved mapping behaviour

This commit is contained in:
Reinhard Pointner 2019-06-10 15:30:01 +07:00
parent b0734f74c4
commit 8328d0d94b
3 changed files with 35 additions and 20 deletions

View File

@ -154,7 +154,7 @@ public class Episode implements Serializable {
} }
public Episode derive(String seriesName, Integer season, Integer episode, Integer absolute, Integer special) { public Episode derive(String seriesName, Integer season, Integer episode, Integer absolute, Integer special) {
return new Episode(seriesName, season, episode, getTitle(), absolute, special, getAirdate(), getId(), new SeriesInfo(getSeriesInfo())); return new Episode(seriesName, season, episode, null, absolute, special, null, null, null);
} }
@Override @Override

View File

@ -55,7 +55,10 @@ public class EpisodeFormat extends Format {
sb.append(" - ").append("Special " + episode.getSpecial()); sb.append(" - ").append("Special " + episode.getSpecial());
} }
} }
sb.append(" - ").append(episode.getTitle());
if (episode.getTitle() != null) {
sb.append(" - ").append(episode.getTitle());
}
return sb; return sb;
} }

View File

@ -1,11 +1,17 @@
package net.filebot.web; package net.filebot.web;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.function.Function;
public class MappedEpisode extends Episode { public class MappedEpisode extends Episode {
protected Episode mapping; protected Episode mapping;
public MappedEpisode() {
// used by deserializer
}
public MappedEpisode(Episode original, Episode mapping) { public MappedEpisode(Episode original, Episode mapping) {
super(original); super(original);
this.mapping = mapping; this.mapping = mapping;
@ -19,59 +25,60 @@ public class MappedEpisode extends Episode {
return mapping; return mapping;
} }
private <T> T getFirst(Function<Episode, T> getter) {
return Optional.ofNullable(getter.apply(mapping)).orElseGet(() -> {
return Optional.ofNullable(getter.apply(getOriginal())).orElse(null);
});
}
@Override @Override
public String getSeriesName() { public String getSeriesName() {
return mapping.getSeriesName(); return getFirst(Episode::getSeriesName);
} }
@Override @Override
public Integer getEpisode() { public Integer getEpisode() {
return mapping.getEpisode(); return mapping.getEpisode(); // always use mapped episode number
} }
@Override @Override
public Integer getSeason() { public Integer getSeason() {
return mapping.getSeason(); return mapping.getSeason(); // always use mapped season number
} }
@Override @Override
public String getTitle() { public String getTitle() {
return mapping.getTitle(); return getFirst(Episode::getTitle);
} }
@Override @Override
public Integer getAbsolute() { public Integer getAbsolute() {
return mapping.getAbsolute(); return mapping.getAbsolute(); // always use mapped absolute number
} }
@Override @Override
public Integer getSpecial() { public Integer getSpecial() {
return mapping.getSpecial(); return mapping.getSpecial(); // always use mapped special number
} }
@Override @Override
public SimpleDate getAirdate() { public SimpleDate getAirdate() {
return mapping.getAirdate(); return getFirst(Episode::getAirdate);
} }
@Override @Override
public Integer getId() { public Integer getId() {
return mapping.getId(); return getFirst(Episode::getId);
}
@Override
public SeriesInfo getSeriesInfo() {
return mapping.getSeriesInfo();
} }
@Override @Override
public Set<String> getSeriesNames() { public Set<String> getSeriesNames() {
return mapping.getSeriesNames(); return getFirst(Episode::getSeriesNames);
} }
@Override @Override
public boolean isAnime() { public boolean isAnime() {
return mapping.isAnime(); return super.isAnime(); // series info is only stored in the original episode object
} }
@Override @Override
@ -84,14 +91,19 @@ public class MappedEpisode extends Episode {
return mapping.isSpecial(); return mapping.isSpecial();
} }
@Override
public SeriesInfo getSeriesInfo() {
return super.getSeriesInfo(); // series info is only stored in the original episode object
}
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
return mapping.equals(obj); return super.equals(obj); // use original episode object for episode comparison
} }
@Override @Override
public int hashCode() { public int hashCode() {
return mapping.hashCode(); return super.hashCode(); // use original episode object for episode comparison
} }
@Override @Override
@ -116,7 +128,7 @@ public class MappedEpisode extends Episode {
@Override @Override
public String toString() { public String toString() {
return mapping.toString(); return String.format("%s [%s]", getMapping(), getOriginal());
} }
} }