Use database instead of Sone provider in post and post builder.
[Sone.git] / src / main / java / net / pterodactylus / sone / database / memory / MemoryDatabase.java
index 4437baf..9a2637d 100644 (file)
@@ -21,6 +21,7 @@ import static com.google.common.base.Optional.fromNullable;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Predicates.not;
 import static com.google.common.collect.FluentIterable.from;
+import static java.util.Collections.emptyList;
 import static net.pterodactylus.sone.data.Sone.LOCAL_SONE_FILTER;
 
 import java.util.ArrayList;
@@ -52,6 +53,7 @@ import net.pterodactylus.sone.database.SoneBuilder;
 import net.pterodactylus.util.config.Configuration;
 import net.pterodactylus.util.config.ConfigurationException;
 
+import com.google.common.base.Function;
 import com.google.common.base.Optional;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ListMultimap;
@@ -361,7 +363,7 @@ public class MemoryDatabase extends AbstractService implements Database {
                lock.readLock().lock();
                try {
                        if (!postReplies.containsKey(postId)) {
-                               return Collections.emptyList();
+                               return emptyList();
                        }
                        return new ArrayList<PostReply>(postReplies.get(postId));
                } finally {
@@ -480,6 +482,48 @@ public class MemoryDatabase extends AbstractService implements Database {
                }
        }
 
+       @Override
+       public List<Album> getAlbums(Album parent) {
+               lock.readLock().lock();
+               try {
+                       return from(albumChildren.get(parent.getId())).transformAndConcat(getAlbum()).toList();
+               } finally {
+                       lock.readLock().unlock();
+               }
+       }
+
+       @Override
+       public void moveUp(Album album) {
+               lock.writeLock().lock();
+               try {
+                       List<String> albums = albumChildren.get(album.getParent().getId());
+                       int currentIndex = albums.indexOf(album.getId());
+                       if (currentIndex == 0) {
+                               return;
+                       }
+                       albums.remove(album.getId());
+                       albums.add(currentIndex - 1, album.getId());
+               } finally {
+                       lock.writeLock().unlock();
+               }
+       }
+
+       @Override
+       public void moveDown(Album album) {
+               lock.writeLock().lock();
+               try {
+                       List<String> albums = albumChildren.get(album.getParent().getId());
+                       int currentIndex = albums.indexOf(album.getId());
+                       if (currentIndex == (albums.size() - 1)) {
+                               return;
+                       }
+                       albums.remove(album.getId());
+                       albums.add(currentIndex + 1, album.getId());
+               } finally {
+                       lock.writeLock().unlock();
+               }
+       }
+
        //
        // ALBUMSTORE METHODS
        //
@@ -520,6 +564,48 @@ public class MemoryDatabase extends AbstractService implements Database {
                }
        }
 
+       @Override
+       public List<Image> getImages(Album parent) {
+               lock.readLock().lock();
+               try {
+                       return from(albumImages.get(parent.getId())).transformAndConcat(getImage()).toList();
+               } finally {
+                       lock.readLock().unlock();
+               }
+       }
+
+       @Override
+       public void moveUp(Image image) {
+               lock.writeLock().lock();
+               try {
+                       List<String> images = albumImages.get(image.getAlbum().getId());
+                       int currentIndex = images.indexOf(image.getId());
+                       if (currentIndex == 0) {
+                               return;
+                       }
+                       images.remove(image.getId());
+                       images.add(currentIndex - 1, image.getId());
+               } finally {
+                       lock.writeLock().unlock();
+               }
+       }
+
+       @Override
+       public void moveDown(Image image) {
+               lock.writeLock().lock();
+               try {
+                       List<String> images = albumChildren.get(image.getAlbum().getId());
+                       int currentIndex = images.indexOf(image.getId());
+                       if (currentIndex == (images.size() - 1)) {
+                               return;
+                       }
+                       images.remove(image.getId());
+                       images.add(currentIndex + 1, image.getId());
+               } finally {
+                       lock.writeLock().unlock();
+               }
+       }
+
        //
        // IMAGESTORE METHODS
        //
@@ -625,66 +711,6 @@ public class MemoryDatabase extends AbstractService implements Database {
                }
        }
 
-       void moveUp(Album album) {
-               lock.writeLock().lock();
-               try {
-                       List<String> albums = albumChildren.get(album.getParent().getId());
-                       int currentIndex = albums.indexOf(album.getId());
-                       if (currentIndex == 0) {
-                               return;
-                       }
-                       albums.remove(album.getId());
-                       albums.add(currentIndex - 1, album.getId());
-               } finally {
-                       lock.writeLock().unlock();
-               }
-       }
-
-       void moveDown(Album album) {
-               lock.writeLock().lock();
-               try {
-                       List<String> albums = albumChildren.get(album.getParent().getId());
-                       int currentIndex = albums.indexOf(album.getId());
-                       if (currentIndex == (albums.size() - 1)) {
-                               return;
-                       }
-                       albums.remove(album.getId());
-                       albums.add(currentIndex + 1, album.getId());
-               } finally {
-                       lock.writeLock().unlock();
-               }
-       }
-
-       void moveUp(Image image) {
-               lock.writeLock().lock();
-               try {
-                       List<String> images = albumImages.get(image.getAlbum().getId());
-                       int currentIndex = images.indexOf(image.getId());
-                       if (currentIndex == 0) {
-                               return;
-                       }
-                       images.remove(image.getId());
-                       images.add(currentIndex - 1, image.getId());
-               } finally {
-                       lock.writeLock().unlock();
-               }
-       }
-
-       void moveDown(Image image) {
-               lock.writeLock().lock();
-               try {
-                       List<String> images = albumChildren.get(image.getAlbum().getId());
-                       int currentIndex = images.indexOf(image.getId());
-                       if (currentIndex == (images.size() - 1)) {
-                               return;
-                       }
-                       images.remove(image.getId());
-                       images.add(currentIndex + 1, image.getId());
-               } finally {
-                       lock.writeLock().unlock();
-               }
-       }
-
        //
        // PRIVATE METHODS
        //
@@ -846,4 +872,22 @@ public class MemoryDatabase extends AbstractService implements Database {
                }
        }
 
+       private Function<String, Iterable<Album>> getAlbum() {
+               return new Function<String, Iterable<Album>>() {
+                       @Override
+                       public Iterable<Album> apply(String input) {
+                               return (input == null) ? Collections.<Album>emptyList() : getAlbum(input).asSet();
+                       }
+               };
+       }
+
+       private Function<String, Iterable<Image>> getImage() {
+               return new Function<String, Iterable<Image>>() {
+                       @Override
+                       public Iterable<Image> apply(String input) {
+                               return (input == null) ? Collections.<Image>emptyList() : getImage(input).asSet();
+                       }
+               };
+       }
+
 }