public T get()

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;
    }