X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2Fimpl%2FDefaultAlbum.java;h=7102bfe2935efb9f03d7298ccb1d6156c8c7b86d;hb=28b2e2b0d2ff2320f5b6a5ac36a858a604c7c7ba;hp=3235f17f830b148cc8441cf52ed708b685374bb4;hpb=414ee1b03f7155ccb5049ede303dd01020ddcd94;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/data/impl/DefaultAlbum.java b/src/main/java/net/pterodactylus/sone/data/impl/DefaultAlbum.java index 3235f17..7102bfe 100644 --- a/src/main/java/net/pterodactylus/sone/data/impl/DefaultAlbum.java +++ b/src/main/java/net/pterodactylus/sone/data/impl/DefaultAlbum.java @@ -17,8 +17,9 @@ package net.pterodactylus.sone.data.impl; -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Optional.absent; +import static com.google.common.base.Optional.fromNullable; +import static com.google.common.base.Preconditions.checkState; import java.util.ArrayList; import java.util.HashMap; @@ -47,21 +48,21 @@ public class DefaultAlbum extends AbstractAlbum { /** The Sone this album belongs to. */ private Sone sone; + /** The parent album. */ + private final DefaultAlbum parent; + /** Nested albums. */ private final List albums = new ArrayList(); /** The image IDs in order. */ - private final List imageIds = new ArrayList(); + final List imageIds = new ArrayList(); /** The images in this album. */ - private final Map images = new HashMap(); - - /** The parent album. */ - private Album parent; + final Map images = new HashMap(); /** Creates a new album with a random ID. */ - public DefaultAlbum(Sone sone) { - this(UUID.randomUUID().toString(), sone); + public DefaultAlbum(Sone sone, DefaultAlbum parent) { + this(UUID.randomUUID().toString(), sone, parent); } /** @@ -70,9 +71,10 @@ public class DefaultAlbum extends AbstractAlbum { * @param id * The ID of the album */ - public DefaultAlbum(String id, Sone sone) { + public DefaultAlbum(String id, Sone sone, DefaultAlbum parent) { super(id); this.sone = sone; + this.parent = parent; } // @@ -90,43 +92,6 @@ public class DefaultAlbum extends AbstractAlbum { } @Override - public void removeAlbum(Album album) { - checkNotNull(album, "album must not be null"); - checkArgument(album.getSone().equals(sone), "album must belong this album’s Sone"); - checkArgument(equals(album.getParent()), "album must belong to this album"); - albums.remove(album); - album.removeParent(); - } - - @Override - public Album moveAlbumUp(Album album) { - checkNotNull(album, "album must not be null"); - checkArgument(album.getSone().equals(sone), "album must belong to the same Sone as this album"); - checkArgument(equals(album.getParent()), "album must belong to this album"); - int oldIndex = albums.indexOf(album); - if (oldIndex <= 0) { - return null; - } - albums.remove(oldIndex); - albums.add(oldIndex - 1, album); - return albums.get(oldIndex); - } - - @Override - public Album moveAlbumDown(Album album) { - checkNotNull(album, "album must not be null"); - checkArgument(album.getSone().equals(sone), "album must belong to the same Sone as this album"); - checkArgument(equals(album.getParent()), "album must belong to this album"); - 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); - } - - @Override public List getImages() { return new ArrayList(Collections2.filter(Collections2.transform(imageIds, new Function() { @@ -139,57 +104,11 @@ public class DefaultAlbum extends AbstractAlbum { } @Override - public void removeImage(Image image) { - checkNotNull(image, "image must not be null"); - checkNotNull(image.getSone(), "image must have an owner"); - checkArgument(image.getSone().equals(sone), "image must belong to the same Sone as this album"); - imageIds.remove(image.getId()); - images.remove(image.getId()); - if (image.getId().equals(albumImage)) { - if (images.isEmpty()) { - albumImage = null; - } else { - albumImage = images.values().iterator().next().getId(); - } - } - } - - @Override - public Image moveImageUp(Image image) { - checkNotNull(image, "image must not be null"); - checkNotNull(image.getSone(), "image must have an owner"); - checkArgument(image.getSone().equals(sone), "image must belong to the same Sone as this album"); - checkArgument(image.getAlbum().equals(this), "image must belong to this album"); - 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)); - } - - @Override - public Image moveImageDown(Image image) { - checkNotNull(image, "image must not be null"); - checkNotNull(image.getSone(), "image must have an owner"); - checkArgument(image.getSone().equals(sone), "image must belong to the same Sone as this album"); - checkArgument(image.getAlbum().equals(this), "image must belong to this album"); - 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)); - } - - @Override - public Image getAlbumImage() { + public Optional getAlbumImage() { if (albumImage == null) { - return null; + return absent(); } - return Optional.fromNullable(images.get(albumImage)).or(images.values().iterator().next()); + return fromNullable(fromNullable(images.get(albumImage)).or(images.values().iterator().next())); } @Override @@ -198,20 +117,8 @@ public class DefaultAlbum extends AbstractAlbum { } @Override - public Album setParent(Album parent) { - this.parent = checkNotNull(parent, "parent must not be null"); - return this; - } - - @Override - public Album removeParent() { - this.parent = null; - return this; - } - - @Override public AlbumBuilder newAlbumBuilder() { - return new DefaultAlbumBuilder(sone) { + return new DefaultAlbumBuilder(sone, this) { @Override public Album build() throws IllegalStateException { Album album = super.build(); @@ -237,4 +144,38 @@ public class DefaultAlbum extends AbstractAlbum { }; } + @Override + public void moveUp() { + int oldIndex = parent.albums.indexOf(this); + parent.albums.remove(this); + parent.albums.add(Math.max(0, oldIndex - 1), this); + } + + @Override + public void moveDown() { + int oldIndex = parent.albums.indexOf(this); + parent.albums.remove(this); + parent.albums.add(Math.min(parent.albums.size(), oldIndex + 1), this); + } + + @Override + public void remove() throws IllegalStateException { + checkState(!isRoot(), "can not remove root album"); + removeAllAlbums(); + removeAllImages(); + parent.albums.remove(this); + } + + private void removeAllImages() { + for (Image image : images.values()) { + image.remove(); + } + } + + private void removeAllAlbums() { + for (Album album: albums) { + album.remove(); + } + } + }