+ Album getParent();
+
+ /**
+ * Returns the title of this album.
+ *
+ * @return The title of this album
+ */
+ String getTitle();
+
+ /**
+ * Returns the description of this album.
+ *
+ * @return The description of this album
+ */
+ String getDescription();
+
+ ImageBuilder newImageBuilder() throws IllegalStateException;
+
+ /**
+ * Returns a modifier for this album.
+ *
+ * @return A modifier for this album
+ * @throws IllegalStateException
+ * if this album can not be modified
+ */
+ 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
+ * made.
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+ interface Modifier {
+
+ Modifier setTitle(String title);
+
+ Modifier setDescription(String description);
+
+ Modifier setAlbumImage(String imageId);
+
+ Album update() throws IllegalStateException;
+