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;
* 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
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.
* @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;
}
/**
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);