Let Sone and Album implement AlbumBuilderFactory.
[Sone.git] / src / main / java / net / pterodactylus / sone / data / Album.java
index 5b9d368..7b245f9 100644 (file)
@@ -26,10 +26,11 @@ import java.util.Comparator;
 import java.util.List;
 import javax.annotation.Nonnull;
 
-import net.pterodactylus.sone.database.AlbumBuilder;
+import net.pterodactylus.sone.database.AlbumBuilderFactory;
 import net.pterodactylus.sone.database.ImageBuilder;
 
 import com.google.common.base.Function;
+import com.google.common.base.Optional;
 import com.google.common.base.Predicate;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableList;
@@ -39,7 +40,7 @@ import com.google.common.collect.ImmutableList;
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
-public interface Album extends Identified, Fingerprintable {
+public interface Album extends Identified, Fingerprintable, AlbumBuilderFactory {
 
        /** Compares two {@link Album}s by {@link #getTitle()}. */
        Comparator<Album> TITLE_COMPARATOR = new Comparator<Album>() {
@@ -121,71 +122,13 @@ public interface Album extends Identified, Fingerprintable {
        List<Album> getAlbums();
 
        /**
-        * Removes an album from this album.
-        *
-        * @param album
-        *              The album to remove
-        */
-       void removeAlbum(Album album);
-
-       /**
-        * Moves the given album up in this album’s albums. If the album is already the
-        * first album, nothing happens.
-        *
-        * @param album
-        *              The album to move up
-        * @return The album that the given album swapped the place with, or
-        *         <code>null</code> if the album did not change its place
-        */
-       Album moveAlbumUp(Album album);
-
-       /**
-        * Moves the given album down in this album’s albums. If the album is already
-        * the last album, nothing happens.
-        *
-        * @param album
-        *              The album to move down
-        * @return The album that the given album swapped the place with, or
-        *         <code>null</code> if the album did not change its place
-        */
-       Album moveAlbumDown(Album album);
-
-       /**
         * Returns the images in this album.
         *
         * @return The images in this album
         */
        List<Image> getImages();
 
-       /**
-        * Moves the given image up in this album’s images. If the image is already the
-        * first image, nothing happens.
-        *
-        * @param image
-        *              The image to move up
-        * @return The image that the given image swapped the place with, or
-        *         <code>null</code> if the image did not change its place
-        */
-       Image moveImageUp(Image image);
-
-       /**
-        * Moves the given image down in this album’s images. If the image is already
-        * the last image, nothing happens.
-        *
-        * @param image
-        *              The image to move down
-        * @return The image that the given image swapped the place with, or
-        *         <code>null</code> if the image did not change its place
-        */
-       Image moveImageDown(Image image);
-
-       /**
-        * Returns the album image of this album, or {@code null} if no album image has
-        * been set.
-        *
-        * @return The image to show when this album is listed
-        */
-       Image getAlbumImage();
+       Optional<Image> getAlbumImage();
 
        /**
         * Returns whether this album contains any other albums or images.
@@ -211,22 +154,6 @@ public interface Album extends Identified, Fingerprintable {
        Album getParent();
 
        /**
-        * Sets the parent album of this album.
-        *
-        * @param parent
-        *              The new parent album of this album
-        * @return This album
-        */
-       Album setParent(Album parent);
-
-       /**
-        * Removes the parent album of this album.
-        *
-        * @return This album
-        */
-       Album removeParent();
-
-       /**
         * Returns the title of this album.
         *
         * @return The title of this album
@@ -240,8 +167,6 @@ public interface Album extends Identified, Fingerprintable {
         */
        String getDescription();
 
-       AlbumBuilder newAlbumBuilder() throws IllegalStateException;
-
        ImageBuilder newImageBuilder() throws IllegalStateException;
 
        /**
@@ -253,6 +178,12 @@ public interface Album extends Identified, Fingerprintable {
         */
        Modifier modify() throws IllegalStateException;
 
+       void moveUp();
+
+       void moveDown();
+
+       void remove() throws IllegalStateException;
+
        /**
         * Allows modifying an album. Modifications are only performed once {@link
         * #update()} has succesfully returned a new album with the modifications