X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fwamblee%2Fphotos%2Fmodel%2Fauthorization%2FAuthorizedAlbum.java;h=48fb47ace6be662593ceb477ad20e399278120aa;hb=be2dfde47261118e3f67f1c100bb935bc0a1b581;hp=96610a6c940a92e05967aed7f98bd40579179530;hpb=06bf9182a5cd8b626d8e66c1fde4e8e6c722a0b5;p=photos diff --git a/src/main/java/org/wamblee/photos/model/authorization/AuthorizedAlbum.java b/src/main/java/org/wamblee/photos/model/authorization/AuthorizedAlbum.java index 96610a6..48fb47a 100644 --- a/src/main/java/org/wamblee/photos/model/authorization/AuthorizedAlbum.java +++ b/src/main/java/org/wamblee/photos/model/authorization/AuthorizedAlbum.java @@ -21,12 +21,19 @@ import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; +import javax.enterprise.context.SessionScoped; +import javax.inject.Inject; +import javax.servlet.http.HttpSession; + import org.wamblee.cache.Cache; import org.wamblee.cache.CachedObject; import org.wamblee.photos.model.Album; import org.wamblee.photos.model.Path; import org.wamblee.photos.model.Photo; import org.wamblee.photos.model.PhotoEntry; +import org.wamblee.photos.model.plumbing.AllPhotos; +import org.wamblee.photos.model.plumbing.AuthorizedPhotos; +import org.wamblee.photos.model.plumbing.PhotoCache; import org.wamblee.security.authorization.AllOperation; import org.wamblee.security.authorization.AuthorizationService; import org.wamblee.security.authorization.DeleteOperation; @@ -37,6 +44,8 @@ import org.wamblee.security.authorization.WriteOperation; * Decorator for an album providing defined behavior when used in a concurrent * setting. */ +@SessionScoped +@AuthorizedPhotos public class AuthorizedAlbum extends AuthorizedPhotoEntry implements Album { private static final Logger LOGGER = Logger.getLogger(AuthorizedAlbum.class @@ -46,7 +55,12 @@ public class AuthorizedAlbum extends AuthorizedPhotoEntry implements Album { private CachedObject> _authorizedEntries; - private String _sessionId; + private HttpSession _session; + + protected AuthorizedAlbum() { + super(null); + // for CDI + } /** * Constructs concurrent album as a decorator for an album implementation. @@ -54,18 +68,21 @@ public class AuthorizedAlbum extends AuthorizedPhotoEntry implements Album { * @param aAlbum * Album to decorate. */ - public AuthorizedAlbum(Album aAlbum, AuthorizationService aService, - Cache aCache, String aSessionId) { + @Inject + public AuthorizedAlbum(@AllPhotos Album aAlbum, + AuthorizationService aService, + @PhotoCache Cache> aCache, + HttpSession aSession) { super(aAlbum); _authorizer = aService; _authorizedEntries = new CachedObject>( - aCache, aSessionId + "/" + aAlbum.getPath(), + aCache, aSession.getId() + "/" + aAlbum.getPath(), new CachedObject.Computation>() { public ArrayList getObject(String aObjectKey) { return AuthorizedAlbum.this.compute(); } }); - _sessionId = aSessionId; + _session = aSession; } /** @@ -105,7 +122,7 @@ public class AuthorizedAlbum extends AuthorizedPhotoEntry implements Album { return (T) new AuthorizedPhoto((Photo) aEntry); } else if (aEntry instanceof Album) { return (T) new AuthorizedAlbum((Album) aEntry, _authorizer, - _authorizedEntries.getCache(), _sessionId); + _authorizedEntries.getCache(), _session); } else { throw new IllegalArgumentException( "Entry is neither a photo nor an album: " + aEntry);