filebot/source/net/filebot/web/Artwork.java

82 lines
1.9 KiB
Java

package net.filebot.web;
import static java.util.Arrays.*;
import static java.util.Collections.*;
import static java.util.stream.Collectors.*;
import java.io.Serializable;
import java.net.URL;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.stream.Stream;
public class Artwork implements Serializable {
protected String[] tags;
protected URL url;
protected String language;
protected Double rating;
public Artwork() {
// used by serializer
}
public Artwork(Stream<?> tags, URL url, Locale language, Double rating) {
this.tags = tags.filter(Objects::nonNull).map(Object::toString).toArray(String[]::new);
this.url = url;
this.language = language == null || language.getLanguage().isEmpty() ? null : language.getLanguage();
this.rating = rating;
}
public List<String> getTags() {
return unmodifiableList(asList(tags));
}
public URL getUrl() {
return url;
}
public Locale getLanguage() {
return language == null ? null : new Locale(language);
}
public double getRating() {
return rating == null ? 0 : rating;
}
public boolean matches(Object... tags) {
if (tags == null || tags.length == 0) {
return true;
}
return stream(tags).filter(Objects::nonNull).map(Object::toString).allMatch(tag -> {
return stream(this.tags).anyMatch(tag::equalsIgnoreCase) || tag.equalsIgnoreCase(language);
});
}
@Override
public int hashCode() {
return url.hashCode();
}
@Override
public boolean equals(Object other) {
if (other instanceof Artwork) {
Artwork artwork = (Artwork) other;
return url.sameFile(artwork.url);
}
return false;
}
@Override
public String toString() {
return Stream.of(String.join("/", tags), language, rating, url).filter(Objects::nonNull).map(Object::toString).collect(joining(", ", "[", "]"));
}
public static final Comparator<Artwork> RATING_ORDER = Comparator.comparing(Artwork::getRating, reverseOrder());
}