Don’t store sone provider in abstract post builder.
[Sone.git] / src / main / java / net / pterodactylus / sone / database / memory / MemoryDatabase.java
index dc827f0..34c819d 100644 (file)
@@ -40,8 +40,6 @@ import net.pterodactylus.sone.data.Post;
 import net.pterodactylus.sone.data.PostReply;
 import net.pterodactylus.sone.data.Reply;
 import net.pterodactylus.sone.data.Sone;
-import net.pterodactylus.sone.data.impl.AlbumBuilderImpl;
-import net.pterodactylus.sone.database.AlbumBuilder;
 import net.pterodactylus.sone.database.Database;
 import net.pterodactylus.sone.database.DatabaseException;
 import net.pterodactylus.sone.database.PostBuilder;
@@ -52,6 +50,8 @@ import net.pterodactylus.util.config.Configuration;
 import net.pterodactylus.util.config.ConfigurationException;
 
 import com.google.common.base.Optional;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ListMultimap;
 import com.google.common.collect.SortedSetMultimap;
 import com.google.common.collect.TreeMultimap;
 import com.google.common.util.concurrent.AbstractService;
@@ -104,6 +104,8 @@ public class MemoryDatabase extends AbstractService implements Database {
        private final Set<String> knownPostReplies = new HashSet<String>();
 
        private final Map<String, Album> allAlbums = new HashMap<String, Album>();
+       private final ListMultimap<String, String> albumChildren = ArrayListMultimap.create();
+       private final ListMultimap<String, String> albumImages = ArrayListMultimap.create();
 
        private final Map<String, Image> allImages = new HashMap<String, Image>();
 
@@ -200,7 +202,7 @@ public class MemoryDatabase extends AbstractService implements Database {
        /** {@inheritDocs} */
        @Override
        public PostBuilder newPostBuilder() {
-               return new MemoryPostBuilder(this, soneProvider);
+               return new MemoryPostBuilder(this);
        }
 
        //
@@ -435,15 +437,6 @@ public class MemoryDatabase extends AbstractService implements Database {
        }
 
        //
-       // ALBUMBUILDERFACTORY METHODS
-       //
-
-       @Override
-       public AlbumBuilder newAlbumBuilder() {
-               return new AlbumBuilderImpl();
-       }
-
-       //
        // ALBUMSTORE METHODS
        //
 
@@ -452,6 +445,7 @@ public class MemoryDatabase extends AbstractService implements Database {
                lock.writeLock().lock();
                try {
                        allAlbums.put(album.getId(), album);
+                       albumChildren.put(album.getParent().getId(), album.getId());
                } finally {
                        lock.writeLock().unlock();
                }
@@ -462,6 +456,7 @@ public class MemoryDatabase extends AbstractService implements Database {
                lock.writeLock().lock();
                try {
                        allAlbums.remove(album.getId());
+                       albumChildren.remove(album.getParent().getId(), album.getId());
                } finally {
                        lock.writeLock().unlock();
                }
@@ -490,6 +485,7 @@ public class MemoryDatabase extends AbstractService implements Database {
                lock.writeLock().lock();
                try {
                        allImages.put(image.getId(), image);
+                       albumImages.put(image.getAlbum().getId(), image.getId());
                } finally {
                        lock.writeLock().unlock();
                }
@@ -500,6 +496,7 @@ public class MemoryDatabase extends AbstractService implements Database {
                lock.writeLock().lock();
                try {
                        allImages.remove(image.getId());
+                       albumImages.remove(image.getAlbum().getId(), image.getId());
                } finally {
                        lock.writeLock().unlock();
                }
@@ -584,6 +581,66 @@ 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
        //