Authorized album is now working fully.
[photos] / src / main / java / org / wamblee / photos / model / authorization / AuthorizedAlbum.java
index 96610a6c940a92e05967aed7f98bd40579179530..48fb47ace6be662593ceb477ad20e399278120aa 100644 (file)
@@ -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<String, ArrayList<PhotoEntry>> _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<String, ArrayList<PhotoEntry>> aCache,
+        HttpSession aSession) {
         super(aAlbum);
         _authorizer = aService;
         _authorizedEntries = new CachedObject<String, ArrayList<PhotoEntry>>(
-            aCache, aSessionId + "/" + aAlbum.getPath(),
+            aCache, aSession.getId() + "/" + aAlbum.getPath(),
             new CachedObject.Computation<String, ArrayList<PhotoEntry>>() {
                 public ArrayList<PhotoEntry> 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);