X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FAlbum.java;h=0c8780c14084f9d118e9713ebf1bca3712656106;hb=7b8fc206a4da09d1b4f61e8eea674ca0bbe5872b;hp=5375d983dabae801be1e3053e39bbcb93bdcbda6;hpb=0382e0afaa2bf1c193f4092a6468c99ff942df0c;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/data/Album.java b/src/main/java/net/pterodactylus/sone/data/Album.java index 5375d98..0c8780c 100644 --- a/src/main/java/net/pterodactylus/sone/data/Album.java +++ b/src/main/java/net/pterodactylus/sone/data/Album.java @@ -20,6 +20,7 @@ package net.pterodactylus.sone.data; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; +import static java.util.Arrays.asList; import java.util.ArrayList; import java.util.Comparator; @@ -30,6 +31,7 @@ import java.util.UUID; import com.google.common.base.Function; import com.google.common.base.Optional; +import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Collections2; import com.google.common.collect.FluentIterable; @@ -42,7 +44,7 @@ import com.google.common.hash.Hashing; * * @author David ‘Bombe’ Roden */ -public class Album implements Fingerprintable { +public class Album implements Identified, Fingerprintable { /** Compares two {@link Album}s by {@link #getTitle()}. */ public static final Comparator TITLE_COMPARATOR = new Comparator() { @@ -67,6 +69,41 @@ public class Album implements Fingerprintable { } }; + /** Function that transforms an album into the images it contains. */ + public static final Function> IMAGES = new Function>() { + + @Override + public List apply(Album album) { + return album.getImages(); + } + }; + + /** + * Filter that removes all albums that do not have any images in any album + * below it. + */ + public static final Predicate NOT_EMPTY = new Predicate() { + + @Override + public boolean apply(Album album) { + /* so, we flatten all albums below the given one and check whether at least one album… */ + return FluentIterable.from(asList(album)).transformAndConcat(FLATTENER).anyMatch(new Predicate() { + + @Override + public boolean apply(Album album) { + /* …contains any inserted images. */ + return !album.getImages().isEmpty() && FluentIterable.from(album.getImages()).allMatch(new Predicate() { + + @Override + public boolean apply(Image input) { + return input.isInserted(); + } + }); + } + }); + } + }; + /** The ID of this album. */ private final String id; @@ -166,7 +203,6 @@ public class Album implements Fingerprintable { public void addAlbum(Album album) { checkNotNull(album, "album must not be null"); checkArgument(album.getSone().equals(sone), "album must belong to the same Sone as this album"); - checkState((this.parent == null) || (this.parent.equals(album.parent)), "album must not already be set to some other Sone"); album.setParent(this); if (!albums.contains(album)) { albums.add(album);