Insert a root album into all Sones to get rid of album manipulation in the Sone.
[Sone.git] / src / main / java / net / pterodactylus / sone / data / Album.java
index 5375d98..aa14ede 100644 (file)
@@ -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;
@@ -67,6 +69,33 @@ public class Album implements Fingerprintable {
                }
        };
 
+       /** Function that transforms an album into the images it contains. */
+       public static final Function<Album, List<Image>> IMAGES = new Function<Album, List<Image>>() {
+
+               @Override
+               public List<Image> 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<Album> NOT_EMPTY = new Predicate<Album>() {
+
+               @Override
+               public boolean apply(Album album) {
+                       return FluentIterable.from(asList(album)).transformAndConcat(FLATTENER).anyMatch(new Predicate<Album>() {
+
+                               @Override
+                               public boolean apply(Album album) {
+                                       return !album.getImages().isEmpty();
+                               }
+                       });
+               }
+       };
+
        /** The ID of this album. */
        private final String id;
 
@@ -166,7 +195,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);