Return the image the given image was swapped with.
[Sone.git] / src / main / java / net / pterodactylus / sone / data / Album.java
index ab5822b..cc32f88 100644 (file)
@@ -25,6 +25,7 @@ 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;
 
 /**
@@ -179,7 +180,7 @@ public class Album implements Fingerprintable {
                        image.getAlbum().removeImage(image);
                }
                image.setAlbum(this);
-               if (imageIds.isEmpty()) {
+               if (imageIds.isEmpty() && (albumImage == null)) {
                        albumImage = image.getId();
                }
                if (!imageIds.contains(image.getId())) {
@@ -213,15 +214,18 @@ public class Album implements Fingerprintable {
         *
         * @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
         */
-       public void moveImageUp(Image image) {
+       public Image 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;
+                       return null;
                }
                imageIds.remove(image.getId());
                imageIds.add(oldIndex - 1, image.getId());
+               return images.get(imageIds.get(oldIndex));
        }
 
        /**
@@ -230,15 +234,18 @@ public class Album implements Fingerprintable {
         *
         * @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
         */
-       public void moveImageDown(Image image) {
+       public Image 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;
+                       return null;
                }
                imageIds.remove(image.getId());
                imageIds.add(oldIndex + 1, image.getId());
+               return images.get(imageIds.get(oldIndex));
        }
 
        /**
@@ -251,7 +258,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());
        }
 
        /**
@@ -366,6 +373,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(");