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;
import java.util.Collection;
import net.pterodactylus.sone.database.PostBuilder;
import net.pterodactylus.sone.database.PostDatabase;
import net.pterodactylus.sone.database.PostReplyBuilder;
-import net.pterodactylus.sone.database.SoneProvider;
+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;
/** The lock. */
private final ReadWriteLock lock = new ReentrantReadWriteLock();
- /** The Sone provider. */
- private final SoneProvider soneProvider;
-
/** The configuration. */
private final Configuration configuration;
+ private final Map<String, Sone> sones = new HashMap<String, Sone>();
+
/** All posts by their ID. */
private final Map<String, Post> allPosts = new HashMap<String, Post>();
/**
* Creates a new memory database.
*
- * @param soneProvider
- * The Sone provider
* @param configuration
* The configuration for loading and saving elements
*/
@Inject
- public MemoryDatabase(SoneProvider soneProvider, Configuration configuration) {
- this.soneProvider = soneProvider;
+ public MemoryDatabase(Configuration configuration) {
this.configuration = configuration;
}
}
}
+ @Override
+ public Optional<Sone> getSone(String soneId) {
+ lock.readLock().lock();
+ try {
+ return fromNullable(sones.get(soneId));
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+
+ @Override
+ public Collection<Sone> getSones() {
+ lock.readLock().lock();
+ try {
+ return Collections.unmodifiableCollection(sones.values());
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+
+ @Override
+ public Collection<Sone> getLocalSones() {
+ lock.readLock().lock();
+ try {
+ return from(getSones()).filter(LOCAL_SONE_FILTER).toSet();
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+
+ @Override
+ public Collection<Sone> getRemoteSones() {
+ lock.readLock().lock();
+ try {
+ return from(getSones()).filter(not(LOCAL_SONE_FILTER)).toSet();
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+
+ @Override
+ public SoneBuilder newSoneBuilder() {
+ return null;
+ }
+
//
// POSTPROVIDER METHODS
//
/** {@inheritDocs} */
@Override
public PostBuilder newPostBuilder() {
- return new MemoryPostBuilder(this, soneProvider);
+ return new MemoryPostBuilder(this);
}
//
lock.readLock().lock();
try {
if (!postReplies.containsKey(postId)) {
- return Collections.emptyList();
+ return emptyList();
}
return new ArrayList<PostReply>(postReplies.get(postId));
} finally {
/** {@inheritDocs} */
@Override
public PostReplyBuilder newPostReplyBuilder() {
- return new MemoryPostReplyBuilder(this, soneProvider);
+ return new MemoryPostReplyBuilder(this, this);
}
//
}
}
+ @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
//
}
}
+ @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
//
}
}
- 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
//
}
}
+ 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();
+ }
+ };
+ }
+
}