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