package org.jboss.weld.contexts.bound;
import java.lang.annotation.Annotation;
import java.util.Map;
import javax.enterprise.context.RequestScoped;
import org.jboss.weld.contexts.AbstractBoundContext;
import org.jboss.weld.contexts.beanstore.MapBeanStore;
import org.jboss.weld.contexts.beanstore.NamingScheme;
import org.jboss.weld.contexts.beanstore.SimpleNamingScheme;
import org.jboss.weld.context.bound.BoundRequestContext;
import org.jboss.weld.contexts.cache.RequestScopedCache;
public class BoundRequestContextImpl extends AbstractBoundContext<Map<String, Object>> implements BoundRequestContext {
private final NamingScheme namingScheme;
public BoundRequestContextImpl(String contextId) {
super(contextId, false);
this.namingScheme = new SimpleNamingScheme(BoundRequestContext.class.getName());
}
public Class<? extends Annotation> getScope() {
return RequestScoped.class;
}
public boolean associate(Map<String, Object> storage) {
if (getBeanStore() == null) {
setBeanStore(new MapBeanStore(namingScheme, storage, true));
getBeanStore().attach();
return true;
} else {
return false;
}
}
@Override
public void activate() {
super.activate();
RequestScopedCache.beginRequest();
}
@Override
public void deactivate() {
try {
RequestScopedCache.endRequest();
} finally {
super.deactivate();
}
}
@Override
public void invalidate() {
super.invalidate();
getBeanStore().detach();
}
}