X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FAlbum.java;h=8238b3fc3391acc55ae1ff62fa8fdc633957d881;hp=cb7b4f3aad236355ae51da93507e4aeac83fff69;hb=afdb3c077f9f762f85be2656015609179eff8510;hpb=b2d80d0a83f7cd3880e18349bea3ea102389c316 diff --git a/src/main/java/net/pterodactylus/sone/data/Album.java b/src/main/java/net/pterodactylus/sone/data/Album.java index cb7b4f3..8238b3f 100644 --- a/src/main/java/net/pterodactylus/sone/data/Album.java +++ b/src/main/java/net/pterodactylus/sone/data/Album.java @@ -44,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() { @@ -69,6 +69,15 @@ 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. @@ -77,11 +86,19 @@ public class Album implements Fingerprintable { @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) { - return !album.getImages().isEmpty(); + /* …contains any inserted images. */ + return !album.getImages().isEmpty() && FluentIterable.from(album.getImages()).allMatch(new Predicate() { + + @Override + public boolean apply(Image input) { + return input.isInserted(); + } + }); } }); } @@ -186,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); @@ -392,6 +408,16 @@ public class Album implements Fingerprintable { } /** + * Returns whether this album is an identitiy’s root album. + * + * @return {@code true} if this album is an identity’s root album, {@code + * false} otherwise + */ + public boolean isRoot() { + return parent == null; + } + + /** * Returns the parent album of this album. * * @return The parent album of this album, or {@code null} if this album