X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FAlbum.java;h=cc32f8833b193b20bacbed1ea334693ffae0b694;hb=7ea94de6b3101ad2825b45c97d1d4893d65843f2;hp=7d10e72253c0af1331665c62ec3a8db34b0fe930;hpb=6abf2d1fb158459383a7b9e983c1b730323ff759;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/data/Album.java b/src/main/java/net/pterodactylus/sone/data/Album.java index 7d10e72..cc32f88 100644 --- a/src/main/java/net/pterodactylus/sone/data/Album.java +++ b/src/main/java/net/pterodactylus/sone/data/Album.java @@ -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())) { @@ -208,6 +209,46 @@ 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 + * @return The image that the given image swapped the place with, or + * null if the image did not change its place + */ + 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 null; + } + imageIds.remove(image.getId()); + imageIds.add(oldIndex - 1, image.getId()); + return images.get(imageIds.get(oldIndex)); + } + + /** + * 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 + * @return The image that the given image swapped the place with, or + * null if the image did not change its place + */ + 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 null; + } + imageIds.remove(image.getId()); + imageIds.add(oldIndex + 1, image.getId()); + return images.get(imageIds.get(oldIndex)); + } + + /** * Returns the album image of this album, or {@code null} if no album image * has been set. * @@ -217,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()); } /** @@ -332,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(");