X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2Fimpl%2FDefaultAlbum.java;h=cbef5da55c9b246c56ade3bb782967a75ee2cbc5;hp=74b66e795e934ed4c7b23d6d5267c0deefa13c45;hb=f0c0d175ae5058661d3af7cc99d0c188616a4d8f;hpb=1f15b9eae9ca9453452f16b1cc76e05b3bcfb696 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 74b66e7..cbef5da 100644 --- a/src/main/java/net/pterodactylus/sone/data/impl/DefaultAlbum.java +++ b/src/main/java/net/pterodactylus/sone/data/impl/DefaultAlbum.java @@ -19,6 +19,7 @@ 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.Preconditions.checkState; import java.util.ArrayList; import java.util.HashMap; @@ -47,6 +48,9 @@ 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(); @@ -56,12 +60,9 @@ public class DefaultAlbum extends AbstractAlbum { /** The images in this album. */ final Map images = new HashMap(); - /** The parent album. */ - private Album parent; - /** 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,15 +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"); @@ -182,20 +175,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(); @@ -221,4 +202,24 @@ public class DefaultAlbum extends AbstractAlbum { }; } + @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(); + } + } + }