Creating folders is now working.
[photos] / src / main / java / org / wamblee / photos / model / authorization / AuthorizedAlbum.java
index f76fd09a1730005ef7364522f47a002f2e96d653..b59aafeb9a0d13650dd09d49b6b09307114e2dd1 100644 (file)
@@ -66,8 +66,7 @@ public class AuthorizedAlbum extends AuthorizedPhotoEntry implements Album {
             @PhotoCache Cache<String, ArrayList<PhotoEntry>> aCache, HttpSession aSession) {
         super(aAlbum);
         _authorizer = aService;
-        _authorizedEntries = new CachedObject<String, ArrayList<PhotoEntry>>(aCache,
-                "session:" + aSession.getId() + "/" + aAlbum.getPath(),
+        _authorizedEntries = new CachedObject<>(aCache, "session:" + aSession.getId() + "/" + aAlbum.getPath(),
                 new CachedObject.Computation<String, ArrayList<PhotoEntry>>() {
                     public ArrayList<PhotoEntry> getObject(String aObjectKey) {
                         return AuthorizedAlbum.this.compute();
@@ -83,7 +82,7 @@ public class AuthorizedAlbum extends AuthorizedPhotoEntry implements Album {
      */
     private synchronized ArrayList<PhotoEntry> compute() {
         LOGGER.info("Refreshing cache " + getPath());
-        ArrayList<PhotoEntry> result = new ArrayList<PhotoEntry>();
+        ArrayList<PhotoEntry> result = new ArrayList<>();
         for (int i = 0; i < decorated().size(); i++) {
             PhotoEntry entry = decorated().getEntry(i);
             if (_authorizer.isAllowed(entry, new ReadOperation())) {
@@ -182,13 +181,11 @@ public class AuthorizedAlbum extends AuthorizedPhotoEntry implements Album {
      *      java.io.InputStream)
      */
     public void addImage(String aId, InputStream aImage) throws IOException {
-        _authorizer.check(this, new WriteOperation());
-        int oldsize = _authorizedEntries.get().size();
-        _authorizedEntries.invalidate();
-        decorated().addImage(aId, aImage);
-        int newsize = _authorizedEntries.get().size();
-        if (newsize != oldsize + 1) {
-            throw new RuntimeException("cache was not refreshed property");
+        try {
+            _authorizer.check(this, new WriteOperation());
+            decorated().addImage(aId, aImage);
+        } finally {
+            _authorizedEntries.invalidate();
         }
     }
 
@@ -198,9 +195,12 @@ public class AuthorizedAlbum extends AuthorizedPhotoEntry implements Album {
      * @see org.wamblee.photos.model.Album#addAlbum(java.lang.String)
      */
     public void addAlbum(String aId) throws IOException {
-        _authorizer.check(this, new WriteOperation());
-        _authorizedEntries.invalidate();
-        decorated().addAlbum(aId);
+        try {
+            _authorizer.check(this, new WriteOperation());
+            decorated().addAlbum(aId);
+        } finally {
+            _authorizedEntries.invalidate();
+        }
     }
 
     /*
@@ -209,10 +209,14 @@ public class AuthorizedAlbum extends AuthorizedPhotoEntry implements Album {
      * @see org.wamblee.photos.model.Album#removeEntry(java.lang.String)
      */
     public void removeEntry(String aId) throws IOException {
-        // Check whether deletion is allowed.
-        PhotoEntry entry = _authorizer.check(decorated().getEntry("/" + aId), new DeleteOperation());
-        _authorizedEntries.invalidate();
-        decorated().removeEntry(aId);
+        try {
+            // Check whether deletion is allowed.
+            PhotoEntry entry = _authorizer.check(decorated().getEntry("/" + aId), new DeleteOperation());
+            _authorizedEntries.invalidate();
+            decorated().removeEntry(aId);
+        } finally {
+            _authorizedEntries.invalidate();
+        }
     }
 
     public Photo findPhotoBefore(String aId) {