Move required parameters for image into the image builder.
[Sone.git] / src / main / java / net / pterodactylus / sone / data / Album.java
index 1e79f89..8864f13 100644 (file)
@@ -26,6 +26,8 @@ import java.util.Comparator;
 import java.util.List;
 import javax.annotation.Nonnull;
 
+import net.pterodactylus.sone.database.ImageBuilder;
+
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
 import com.google.common.collect.FluentIterable;
@@ -178,14 +180,6 @@ public interface Album extends Identified, Fingerprintable {
        List<Image> getImages();
 
        /**
-        * Adds the given image to this album.
-        *
-        * @param image
-        *              The image to add
-        */
-       void addImage(Image image);
-
-       /**
         * Removes the given image from this album.
         *
         * @param image
@@ -224,15 +218,6 @@ public interface Album extends Identified, Fingerprintable {
        Image getAlbumImage();
 
        /**
-        * Sets the ID of the album image.
-        *
-        * @param id
-        *              The ID of the album image
-        * @return This album
-        */
-       Album setAlbumImage(String id);
-
-       /**
         * Returns whether this album contains any other albums or images.
         *
         * @return {@code true} if this album is empty, {@code false} otherwise
@@ -279,28 +264,40 @@ public interface Album extends Identified, Fingerprintable {
        String getTitle();
 
        /**
-        * Sets the title of this album.
+        * Returns the description of this album.
         *
-        * @param title
-        *              The title of this album
-        * @return This album
+        * @return The description of this album
         */
-       Album setTitle(String title);
+       String getDescription();
+
+       ImageBuilder newImageBuilder() throws IllegalStateException;
 
        /**
-        * Returns the description of this album.
+        * Returns a modifier for this album.
         *
-        * @return The description of this album
+        * @return A modifier for this album
+        * @throws IllegalStateException
+        *              if this album can not be modified
         */
-       String getDescription();
+       Modifier modify() throws IllegalStateException;
 
        /**
-        * Sets the description of this album.
+        * Allows modifying an album. Modifications are only performed once {@link
+        * #update()} has succesfully returned a new album with the modifications
+        * made.
         *
-        * @param description
-        *              The description of this album
-        * @return This album
+        * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
         */
-       Album setDescription(String description);
+       interface Modifier {
+
+               Modifier setTitle(String title);
+
+               Modifier setDescription(String description);
+
+               Modifier setAlbumImage(String imageId);
+
+               Album update() throws IllegalStateException;
+
+       }
 
 }