import com.google.common.collect.ListMultimap;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
+import com.google.common.collect.SetMultimap;
import com.google.common.collect.SortedSetMultimap;
import com.google.common.collect.TreeMultimap;
import com.google.common.util.concurrent.AbstractService;
/** All posts by their Sones. */
private final Multimap<String, Post> sonePosts = HashMultimap.create();
+ private final SetMultimap<String, String> likedPosts = HashMultimap.create();
/** All posts by their recipient. */
private final Multimap<String, Post> recipientPosts = HashMultimap.create();
}
@Override
+ public Function<String, Optional<Sone>> getSone() {
+ return new Function<String, Optional<Sone>>() {
+ @Override
+ public Optional<Sone> apply(String soneId) {
+ return (soneId == null) ? Optional.<Sone>absent() : getSone(soneId);
+ }
+ };
+ }
+
+ @Override
public Optional<Sone> getSone(String soneId) {
lock.readLock().lock();
try {
//
@Override
+ public Function<String, Optional<Post>> getPost() {
+ return new Function<String, Optional<Post>>() {
+ @Override
+ public Optional<Post> apply(String postId) {
+ return (postId == null) ? Optional.<Post>absent() : getPost(postId);
+ }
+ };
+ }
+
+ @Override
public Optional<Post> getPost(String postId) {
lock.readLock().lock();
try {
}
}
+ @Override
+ public void likePost(Post post, Sone localSone) {
+ lock.writeLock().lock();
+ try {
+ likedPosts.put(localSone.getId(), post.getId());
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
+ @Override
+ public void unlikePost(Post post, Sone localSone) {
+ lock.writeLock().lock();
+ try {
+ likedPosts.remove(localSone.getId(), post.getId());
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
//
// POSTSTORE METHODS
//