package net.pterodactylus.sone.data;
+import static com.google.common.base.Optional.absent;
+
import java.util.Comparator;
import com.google.common.base.Optional;
*/
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;
+ }
+
+ }
+
}
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;
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
- 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 {