Return empty posts for not-yet loaded bookmarks.
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 9 Nov 2014 10:56:24 +0000 (11:56 +0100)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sat, 22 Nov 2014 11:38:27 +0000 (12:38 +0100)
src/main/java/net/pterodactylus/sone/data/Post.java
src/main/java/net/pterodactylus/sone/database/memory/MemoryBookmarkDatabase.java

index 09198fd..95abae6 100644 (file)
@@ -17,6 +17,8 @@
 
 package net.pterodactylus.sone.data;
 
 
 package net.pterodactylus.sone.data;
 
+import static com.google.common.base.Optional.absent;
+
 import java.util.Comparator;
 
 import com.google.common.base.Optional;
 import java.util.Comparator;
 
 import com.google.common.base.Optional;
@@ -122,4 +124,65 @@ public interface Post extends Identified {
         */
        public Post setKnown(boolean known);
 
         */
        public Post setKnown(boolean known);
 
+       /**
+        * Shell for a post that has not yet been loaded.
+        *
+        * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’
+        *         Roden</a>
+        */
+       public static class EmptyPost implements Post {
+
+               private final String id;
+
+               public EmptyPost(String id) {
+                       this.id = id;
+               }
+
+               @Override
+               public String getId() {
+                       return id;
+               }
+
+               @Override
+               public boolean isLoaded() {
+                       return false;
+               }
+
+               @Override
+               public Sone getSone() {
+                       return null;
+               }
+
+               @Override
+               public Optional<String> getRecipientId() {
+                       return absent();
+               }
+
+               @Override
+               public Optional<Sone> getRecipient() {
+                       return absent();
+               }
+
+               @Override
+               public long getTime() {
+                       return 0;
+               }
+
+               @Override
+               public String getText() {
+                       return null;
+               }
+
+               @Override
+               public boolean isKnown() {
+                       return false;
+               }
+
+               @Override
+               public Post setKnown(boolean known) {
+                       return this;
+               }
+
+       }
+
 }
 }
index 38c5bd0..594cf2b 100644 (file)
@@ -8,6 +8,7 @@ import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import net.pterodactylus.sone.data.Post;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import net.pterodactylus.sone.data.Post;
+import net.pterodactylus.sone.data.Post.EmptyPost;
 import net.pterodactylus.sone.database.BookmarkDatabase;
 
 import com.google.common.base.Function;
 import net.pterodactylus.sone.database.BookmarkDatabase;
 
 import com.google.common.base.Function;
@@ -94,11 +95,12 @@ public class MemoryBookmarkDatabase implements BookmarkDatabase {
        public Set<Post> getBookmarkedPosts() {
                lock.readLock().lock();
                try {
        public Set<Post> getBookmarkedPosts() {
                lock.readLock().lock();
                try {
-                       return from(bookmarkedPosts).transformAndConcat(
-                                       new Function<String, Iterable<Post>>() {
+                       return from(bookmarkedPosts).transform(
+                                       new Function<String, Post>() {
                                                @Override
                                                @Override
-                                               public Iterable<Post> apply(String postId) {
-                                                       return memoryDatabase.getPost(postId).asSet();
+                                               public Post apply(String postId) {
+                                                       return memoryDatabase.getPost(postId)
+                                                                       .or(new EmptyPost(postId));
                                                }
                                        }).toSet();
                } finally {
                                                }
                                        }).toSet();
                } finally {