Return an Optional for the album image.
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 13 Oct 2013 00:42:53 +0000 (02:42 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Fri, 28 Feb 2014 21:25:24 +0000 (22:25 +0100)
src/main/java/net/pterodactylus/sone/core/Core.java
src/main/java/net/pterodactylus/sone/data/Album.java
src/main/java/net/pterodactylus/sone/data/impl/DefaultAlbum.java
src/main/java/net/pterodactylus/sone/template/AlbumAccessor.java

index e61a58f..5dc733b 100644 (file)
@@ -19,6 +19,7 @@ package net.pterodactylus.sone.core;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
+import static net.pterodactylus.sone.data.Identified.GET_ID;
 
 import java.net.MalformedURLException;
 import java.util.Collection;
@@ -1724,7 +1725,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider,
                                configuration.getStringValue(albumPrefix + "/Title").setValue(album.getTitle());
                                configuration.getStringValue(albumPrefix + "/Description").setValue(album.getDescription());
                                configuration.getStringValue(albumPrefix + "/Parent").setValue(album.getParent().equals(sone.getRootAlbum()) ? null : album.getParent().getId());
-                               configuration.getStringValue(albumPrefix + "/AlbumImage").setValue(album.getAlbumImage() == null ? null : album.getAlbumImage().getId());
+                               configuration.getStringValue(albumPrefix + "/AlbumImage").setValue(album.getAlbumImage().transform(GET_ID).orNull());
                        }
                        configuration.getStringValue(sonePrefix + "/Albums/" + albumCounter + "/ID").setValue(null);
 
index e8efb59..a173e19 100644 (file)
@@ -30,6 +30,7 @@ import net.pterodactylus.sone.database.AlbumBuilder;
 import net.pterodactylus.sone.database.ImageBuilder;
 
 import com.google.common.base.Function;
+import com.google.common.base.Optional;
 import com.google.common.base.Predicate;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableList;
@@ -127,13 +128,7 @@ public interface Album extends Identified, Fingerprintable {
         */
        List<Image> getImages();
 
-       /**
-        * Returns the album image of this album, or {@code null} if no album image has
-        * been set.
-        *
-        * @return The image to show when this album is listed
-        */
-       Image getAlbumImage();
+       Optional<Image> getAlbumImage();
 
        /**
         * Returns whether this album contains any other albums or images.
index 32052d5..7102bfe 100644 (file)
@@ -17,6 +17,8 @@
 
 package net.pterodactylus.sone.data.impl;
 
+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;
@@ -102,11 +104,11 @@ public class DefaultAlbum extends AbstractAlbum {
        }
 
        @Override
-       public Image getAlbumImage() {
+       public Optional<Image> 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
index 9ef168a..51cd974 100644 (file)
@@ -49,6 +49,8 @@ public class AlbumAccessor extends ReflectionAccessor {
                        }
                        backlinks.add(0, new Link("imageBrowser.html?sone=" + album.getSone().getId(), SoneAccessor.getNiceName(album.getSone())));
                        return backlinks;
+               } else if ("albumImage".equals(member)) {
+                       return album.getAlbumImage().orNull();
                }
                return super.get(templateContext, object, member);
        }