in jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/view/ViewScopedContext.java [92:147]
public <T> T get(Contextual<T> component, CreationalContext<T> creationalContext)
{
if(!(component instanceof PassivationCapable))
{
throw new IllegalStateException(component.toString() +
" doesn't implement " + PassivationCapable.class.getName());
}
checkActive();
Map<String, Object> viewMap = getViewMap();
@SuppressWarnings(UNCHECKED)
Map<String, Object> componentIdMap = (Map<String, Object>) viewMap.get(COMPONENT_ID_MAP_NAME);
if(componentIdMap == null)
{
// TODO we now need to start being carefull with reentrancy...
componentIdMap = new ConcurrentHashMap<String, Object>();
viewMap.put(COMPONENT_ID_MAP_NAME, componentIdMap);
}
@SuppressWarnings(UNCHECKED)
T instance = (T) componentIdMap.get(((PassivationCapable)component).getId());
if (instance != null)
{
return instance;
}
if(creationalContext == null)
{
return null;
}
instance = component.create(creationalContext);
if (instance == null)
{
return null;
}
@SuppressWarnings(UNCHECKED)
Map<String, CreationalContext<?>> creationalContextMap
= (Map<String, CreationalContext<?>>) viewMap.get(CREATIONAL_MAP_NAME);
if(creationalContextMap == null)
{
creationalContextMap = new ConcurrentHashMap<String, CreationalContext<?>>();
viewMap.put(CREATIONAL_MAP_NAME, creationalContextMap);
}
componentIdMap.put(((PassivationCapable)component).getId(), instance);
creationalContextMap.put(((PassivationCapable)component).getId(), creationalContext);
return instance;
}