Store album image ID in fingerprint.
[Sone.git] / src / main / java / net / pterodactylus / sone / data / Album.java
index 94eec8f..2bbbb57 100644 (file)
 package net.pterodactylus.sone.data;
 
 import java.util.ArrayList;
-import java.util.LinkedHashMap;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
 import net.pterodactylus.util.collection.Mapper;
 import net.pterodactylus.util.collection.Mappers;
+import net.pterodactylus.util.object.Default;
 import net.pterodactylus.util.validation.Validation;
 
 /**
@@ -47,7 +48,7 @@ public class Album implements Fingerprintable {
        private final List<String> imageIds = new ArrayList<String>();
 
        /** The images in this album. */
-       private final Map<String, Image> images = new LinkedHashMap<String, Image>();
+       private final Map<String, Image> images = new HashMap<String, Image>();
 
        /** The parent album. */
        private Album parent;
@@ -208,6 +209,40 @@ public class Album implements Fingerprintable {
        }
 
        /**
+        * 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
+        */
+       public void moveImageUp(Image image) {
+               Validation.begin().isNotNull("Image", image).check().isEqual("Image Album", image.getAlbum(), this).isEqual("Album Owner", image.getAlbum().getSone(), sone).check();
+               int oldIndex = imageIds.indexOf(image.getId());
+               if (oldIndex <= 0) {
+                       return;
+               }
+               imageIds.remove(image.getId());
+               imageIds.add(oldIndex - 1, image.getId());
+       }
+
+       /**
+        * Move 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
+        */
+       public void moveImageDown(Image image) {
+               Validation.begin().isNotNull("Image", image).check().isEqual("Image Album", image.getAlbum(), this).isEqual("Album Owner", image.getAlbum().getSone(), sone).check();
+               int oldIndex = imageIds.indexOf(image.getId());
+               if ((oldIndex == -1) || (oldIndex >= (imageIds.size() - 1))) {
+                       return;
+               }
+               imageIds.remove(image.getId());
+               imageIds.add(oldIndex + 1, image.getId());
+       }
+
+       /**
         * Returns the album image of this album, or {@code null} if no album image
         * has been set.
         *
@@ -217,7 +252,7 @@ public class Album implements Fingerprintable {
                if (albumImage == null) {
                        return null;
                }
-               return images.get(albumImage);
+               return Default.forNull(images.get(albumImage), images.values().iterator().next());
        }
 
        /**
@@ -332,6 +367,9 @@ public class Album implements Fingerprintable {
                fingerprint.append("ID(").append(id).append(')');
                fingerprint.append("Title(").append(title).append(')');
                fingerprint.append("Description(").append(description).append(')');
+               if (albumImage != null) {
+                       fingerprint.append("AlbumImage(").append(albumImage).append(')');
+               }
 
                /* add nested albums. */
                fingerprint.append("Albums(");