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.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;
/** Whether post replies are known. */
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>();
+
/**
* Creates a new memory database.
*
/** {@inheritDocs} */
@Override
public PostBuilder newPostBuilder() {
- return new MemoryPostBuilder(this, soneProvider);
+ return new MemoryPostBuilder(this);
}
//
}
//
+ // ALBUMPROVDER METHODS
+ //
+
+ @Override
+ public Optional<Album> getAlbum(String albumId) {
+ lock.readLock().lock();
+ try {
+ return fromNullable(allAlbums.get(albumId));
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+
+ //
+ // 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 Optional<Image> getImage(String imageId) {
+ lock.readLock().lock();
+ try {
+ return fromNullable(allImages.get(imageId));
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+
+ //
+ // IMAGESTORE METHODS
+ //
+
+ @Override
+ public void storeImage(Image image) {
+ lock.writeLock().lock();
+ try {
+ allImages.put(image.getId(), image);
+ albumImages.put(image.getAlbum().getId(), image.getId());
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
+ @Override
+ public void removeImage(Image image) {
+ lock.writeLock().lock();
+ try {
+ allImages.remove(image.getId());
+ albumImages.remove(image.getAlbum().getId(), image.getId());
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
+ //
// PACKAGE-PRIVATE METHODS
//
}
}
+ 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
//