Store albums and images per-Sone in database.
[Sone.git] / src / main / java / net / pterodactylus / sone / database / memory / MemoryDatabase.java
index 67ea671..cd3be84 100644 (file)
@@ -58,12 +58,14 @@ import com.google.common.collect.SortedSetMultimap;
 import com.google.common.collect.TreeMultimap;
 import com.google.common.util.concurrent.AbstractService;
 import com.google.inject.Inject;
+import com.google.inject.Singleton;
 
 /**
  * Memory-based {@link PostDatabase} implementation.
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@Singleton
 public class MemoryDatabase extends AbstractService implements Database {
 
        /** The lock. */
@@ -112,8 +114,10 @@ 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 Multimap<String, Album> soneAlbums = HashMultimap.create();
 
        private final Map<String, Image> allImages = new HashMap<String, Image>();
+       private final Multimap<String, Image> soneImages = HashMultimap.create();
 
        /**
         * Creates a new memory database.
@@ -445,6 +449,7 @@ public class MemoryDatabase extends AbstractService implements Database {
                lock.writeLock().lock();
                try {
                        allAlbums.put(album.getId(), album);
+                       soneAlbums.put(album.getSone().getId(), album);
                } finally {
                        lock.writeLock().unlock();
                }
@@ -455,6 +460,7 @@ public class MemoryDatabase extends AbstractService implements Database {
                lock.writeLock().lock();
                try {
                        allAlbums.remove(album.getId());
+                       soneAlbums.remove(album.getSone().getId(), album);
                } finally {
                        lock.writeLock().unlock();
                }
@@ -492,6 +498,7 @@ public class MemoryDatabase extends AbstractService implements Database {
                lock.writeLock().lock();
                try {
                        allImages.put(image.getId(), image);
+                       soneImages.put(image.getSone().getId(), image);
                } finally {
                        lock.writeLock().unlock();
                }
@@ -502,6 +509,7 @@ public class MemoryDatabase extends AbstractService implements Database {
                lock.writeLock().lock();
                try {
                        allImages.remove(image.getId());
+                       soneImages.remove(image.getSone().getId(), image);
                } finally {
                        lock.writeLock().unlock();
                }