+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
+ //
+ // ALBUMPROVDER METHODS
+ //
+
+ @Override
+ public Optional<Album> getAlbum(String albumId) {
+ lock.readLock().lock();
+ try {
+ return fromNullable(allAlbums.get(albumId));
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+
+ //
+ // ALBUMBUILDERFACTORY METHODS
+ //
+
+ @Override
+ public AlbumBuilder newAlbumBuilder() {
+ return new AlbumBuilderImpl();
+ }
+
+ //
+ // ALBUMSTORE METHODS
+ //
+
+ @Override
+ public void storeAlbum(Album album) {
+ lock.writeLock().lock();
+ try {
+ allAlbums.put(album.getId(), album);
+ soneAlbums.put(album.getSone().getId(), album);
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
+ @Override
+ public void removeAlbum(Album album) {
+ lock.writeLock().lock();
+ try {
+ allAlbums.remove(album.getId());
+ soneAlbums.remove(album.getSone().getId(), album);
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
+ //
+ // IMAGEPROVIDER METHODS
+ //
+
+ @Override
+ public Optional<Image> getImage(String imageId) {
+ lock.readLock().lock();
+ try {
+ return fromNullable(allImages.get(imageId));