Allow moving top-level albums.
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 25 Sep 2011 17:20:46 +0000 (19:20 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 25 Sep 2011 17:20:46 +0000 (19:20 +0200)
src/main/java/net/pterodactylus/sone/data/Sone.java
src/main/java/net/pterodactylus/sone/web/ajax/EditAlbumAjaxPage.java

index 8ffeed5..e124387 100644 (file)
@@ -681,6 +681,46 @@ public class Sone implements Fingerprintable, Comparable<Sone> {
        }
 
        /**
        }
 
        /**
+        * 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
+        *         <code>null</code> if the album did not change its place
+        */
+       public Album moveAlbumUp(Album album) {
+               Validation.begin().isNotNull("Album", album).check().isEqual("Album Owner", album.getSone(), this).isNull("Album Parent", album.getParent()).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
+        *         <code>null</code> if the album did not change its place
+        */
+       public Album moveAlbumDown(Album album) {
+               Validation.begin().isNotNull("Album", album).check().isEqual("Album Owner", album.getSone(), this).isNull("Album Parent", album.getParent()).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 Sone-specific options.
         *
         * @return The options of this Sone
         * Returns Sone-specific options.
         *
         * @return The options of this Sone
index b530526..53f0466 100644 (file)
@@ -57,12 +57,12 @@ public class EditAlbumAjaxPage extends JsonPage {
                        return createErrorJsonObject("not-authorized");
                }
                if ("true".equals(request.getHttpRequest().getParam("moveLeft"))) {
                        return createErrorJsonObject("not-authorized");
                }
                if ("true".equals(request.getHttpRequest().getParam("moveLeft"))) {
-                       Album swappedAlbum = album.getParent().moveAlbumUp(album);
+                       Album swappedAlbum = (album.getParent() != null) ? album.getParent().moveAlbumUp(album) : album.getSone().moveAlbumUp(album);
                        webInterface.getCore().touchConfiguration();
                        return createSuccessJsonObject().put("sourceAlbumId", album.getId()).put("destinationAlbumId", swappedAlbum.getId());
                }
                if ("true".equals(request.getHttpRequest().getParam("moveRight"))) {
                        webInterface.getCore().touchConfiguration();
                        return createSuccessJsonObject().put("sourceAlbumId", album.getId()).put("destinationAlbumId", swappedAlbum.getId());
                }
                if ("true".equals(request.getHttpRequest().getParam("moveRight"))) {
-                       Album swappedAlbum = album.getParent().moveAlbumDown(album);
+                       Album swappedAlbum = (album.getParent() != null) ? album.getParent().moveAlbumDown(album) : album.getSone().moveAlbumDown(album);
                        webInterface.getCore().touchConfiguration();
                        return createSuccessJsonObject().put("sourceAlbumId", album.getId()).put("destinationAlbumId", swappedAlbum.getId());
                }
                        webInterface.getCore().touchConfiguration();
                        return createSuccessJsonObject().put("sourceAlbumId", album.getId()).put("destinationAlbumId", swappedAlbum.getId());
                }