X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryDatabase.java;h=34c819dd9cb722003d8bd049c22975099e2ff96f;hb=ed19f10e7931fb0b09c042c6070e37dffb23ceac;hp=77ff2f4df24f8f78cd324fbb3bc954e1ccefdc2c;hpb=1e26b571992db3757943c00ac4db6d7131c5aed3;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java b/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java index 77ff2f4..34c819d 100644 --- a/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java +++ b/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java @@ -35,12 +35,11 @@ import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import net.pterodactylus.sone.data.Album; +import net.pterodactylus.sone.data.Image; 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; @@ -51,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; @@ -103,6 +104,10 @@ public class MemoryDatabase extends AbstractService implements Database { private final Set knownPostReplies = new HashSet(); private final Map allAlbums = new HashMap(); + private final ListMultimap albumChildren = ArrayListMultimap.create(); + private final ListMultimap albumImages = ArrayListMultimap.create(); + + private final Map allImages = new HashMap(); /** * Creates a new memory database. @@ -197,7 +202,7 @@ public class MemoryDatabase extends AbstractService implements Database { /** {@inheritDocs} */ @Override public PostBuilder newPostBuilder() { - return new MemoryPostBuilder(this, soneProvider); + return new MemoryPostBuilder(this); } // @@ -432,33 +437,66 @@ public class MemoryDatabase extends AbstractService implements Database { } // - // ALBUMBUILDERFACTORY METHODS + // ALBUMSTORE METHODS + // + + @Override + public void storeAlbum(Album album) { + lock.writeLock().lock(); + try { + allAlbums.put(album.getId(), album); + albumChildren.put(album.getParent().getId(), album.getId()); + } finally { + lock.writeLock().unlock(); + } + } + + @Override + public void removeAlbum(Album album) { + lock.writeLock().lock(); + try { + allAlbums.remove(album.getId()); + albumChildren.remove(album.getParent().getId(), album.getId()); + } finally { + lock.writeLock().unlock(); + } + } + + // + // IMAGEPROVIDER METHODS // @Override - public AlbumBuilder newAlbumBuilder() { - return new AlbumBuilderImpl(); + public Optional getImage(String imageId) { + lock.readLock().lock(); + try { + return fromNullable(allImages.get(imageId)); + } finally { + lock.readLock().unlock(); + } } // - // ALBUMSTORE METHODS + // IMAGESTORE METHODS // @Override - public void storeAlbum(Album album) { + public void storeImage(Image image) { lock.writeLock().lock(); try { - allAlbums.put(album.getId(), album); + allImages.put(image.getId(), image); + albumImages.put(image.getAlbum().getId(), image.getId()); } finally { lock.writeLock().unlock(); } } @Override - public void removeAlbum(Album album) { + public void removeImage(Image image) { lock.writeLock().lock(); try { - allAlbums.remove(album.getId()); + allImages.remove(image.getId()); + albumImages.remove(image.getAlbum().getId(), image.getId()); } finally { lock.writeLock().unlock(); } @@ -543,6 +581,66 @@ public class MemoryDatabase extends AbstractService implements Database { } } + void moveUp(Album album) { + lock.writeLock().lock(); + try { + List 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 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 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 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 //