+ @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
+ //
+
+ @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();
+ }
+ }
+