mirror of
https://github.com/mitb-archive/filebot
synced 2024-08-13 17:03:45 -04:00
82 lines
1.9 KiB
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());
|
|
|
|
}
|