X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FAlbum.java;h=9d990fe4f4b8711d7db254c629634c1e81d4e667;hp=56bddb2b3f0635c66c20ee393f3383fd5f630705;hb=a47643aed43d118ca68044f95451bb5374cdb332;hpb=262f8b38695a4e3141bc0b828edd16e9eb2ea8ef diff --git a/src/main/java/net/pterodactylus/sone/data/Album.java b/src/main/java/net/pterodactylus/sone/data/Album.java index 56bddb2..9d990fe 100644 --- a/src/main/java/net/pterodactylus/sone/data/Album.java +++ b/src/main/java/net/pterodactylus/sone/data/Album.java @@ -1,5 +1,5 @@ /* - * Sone - Album.java - Copyright © 2011 David Roden + * Sone - Album.java - Copyright © 2011–2012 David Roden * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,6 +18,7 @@ package net.pterodactylus.sone.data; import java.util.ArrayList; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -35,6 +36,15 @@ import net.pterodactylus.util.validation.Validation; */ public class Album implements Fingerprintable { + /** Compares two {@link Album}s by {@link #getTitle()}. */ + public static final Comparator TITLE_COMPARATOR = new Comparator() { + + @Override + public int compare(Album leftAlbum, Album rightAlbum) { + return leftAlbum.getTitle().compareToIgnoreCase(rightAlbum.getTitle()); + } + }; + /** The ID of this album. */ private final String id; @@ -152,6 +162,46 @@ public class Album implements Fingerprintable { } /** + * Moves the given album up in this album’s albums. If the album is already + * the first album, nothing happens. + * + * @param album + * The album to move up + * @return The album that the given album swapped the place with, or + * null if the album did not change its place + */ + public Album moveAlbumUp(Album album) { + Validation.begin().isNotNull("Album", album).check().isEqual("Album Owner", album.sone, sone).isEqual("Album Parent", album.parent, this).check(); + int oldIndex = albums.indexOf(album); + if (oldIndex <= 0) { + return null; + } + albums.remove(oldIndex); + albums.add(oldIndex - 1, album); + return albums.get(oldIndex); + } + + /** + * Moves the given album down in this album’s albums. If the album is + * already the last album, nothing happens. + * + * @param album + * The album to move down + * @return The album that the given album swapped the place with, or + * null if the album did not change its place + */ + public Album moveAlbumDown(Album album) { + Validation.begin().isNotNull("Album", album).check().isEqual("Album Owner", album.sone, sone).isEqual("Album Parent", album.parent, this).check(); + int oldIndex = albums.indexOf(album); + if ((oldIndex < 0) || (oldIndex >= (albums.size() - 1))) { + return null; + } + albums.remove(oldIndex); + albums.add(oldIndex + 1, album); + return albums.get(oldIndex); + } + + /** * Returns the images in this album. * * @return The images in this album @@ -214,32 +264,38 @@ public class Album implements Fingerprintable { * * @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 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)); } /** - * Move the given image down in this album’s images. If the image is already - * the last image, nothing happens. + * Moves 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 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)); } /** @@ -380,7 +436,7 @@ public class Album implements Fingerprintable { /* add images. */ fingerprint.append("Images("); - for (Image image : images.values()) { + for (Image image : getImages()) { if (image.isInserted()) { fingerprint.append(image.getFingerprint()); }