public DefaultViewConfigResolver()

in deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/DefaultViewConfigResolver.java [57:141]


    public DefaultViewConfigResolver(ViewConfigNode rootViewConfigNode,
                                     ConfigNodeConverter configNodeConverter,
                                     ViewConfigInheritanceStrategy inheritanceStrategy,
                                     List<ConfigDescriptorValidator> configDescriptorValidators)
    {
        Map<Class<? extends ViewConfig>, ViewConfigDescriptor> viewConfigs =
            new HashMap<Class<? extends ViewConfig>, ViewConfigDescriptor>();
        Map<Class, ConfigDescriptor> folderConfigs =
            new HashMap<Class, ConfigDescriptor>();

        Map<String, Class<? extends ViewConfig>> foundViewIds = new HashMap<String, Class<? extends ViewConfig>>();

        Stack<ViewConfigNode> nodesToConvert = new Stack<ViewConfigNode>();

        nodesToConvert.addAll(rootViewConfigNode.getChildren());

        while (!nodesToConvert.empty())
        {
            ViewConfigNode currentNode = nodesToConvert.pop();

            //e.g. @View is optional for users, but required from other parts of DeltaSpike -> ensure that it's in place
            addOptionalMetaDataToConfig(currentNode);

            currentNode.getInheritedMetaData().addAll(inheritanceStrategy.resolveInheritedMetaData(currentNode));
            ConfigDescriptor currentConfigDescriptor = configNodeConverter.convert(currentNode);

            for (ConfigDescriptorValidator validator : configDescriptorValidators)
            {
                if (!validator.isValid(currentConfigDescriptor))
                {
                    throw new IllegalStateException(currentConfigDescriptor.getConfigClass().getName() + " is invalid");
                }
            }

            if (currentConfigDescriptor instanceof ViewConfigDescriptor)
            {
                ViewConfigDescriptor currentViewConfigDescriptor = (ViewConfigDescriptor) currentConfigDescriptor;

                if (foundViewIds.containsKey(currentViewConfigDescriptor.getViewId()))
                {
                    throw new IllegalStateException(currentViewConfigDescriptor.getViewId() + " is configured twice. " +
                        "That isn't allowed - see: " + currentConfigDescriptor.getConfigClass().getName() + " and " +
                        foundViewIds.get(currentViewConfigDescriptor.getViewId()).getName());
                }
                else
                {
                    foundViewIds.put(
                        currentViewConfigDescriptor.getViewId(), currentViewConfigDescriptor.getConfigClass());
                }

                if (this.defaultErrorView == null)
                {
                    if (DefaultErrorView.class.isAssignableFrom(currentViewConfigDescriptor.getConfigClass()))
                    {
                        this.defaultErrorView = currentViewConfigDescriptor;
                    }
                }
                else if (DefaultErrorView.class.isAssignableFrom(currentViewConfigDescriptor.getConfigClass()))
                {
                    throw new IllegalStateException("It isn't allowed to configure multiple default-error-views. " +
                        "Found default-error-views: " + this.defaultErrorView.getConfigClass() + " and " +
                        currentViewConfigDescriptor.getConfigClass().getName());
                }

                if (!viewConfigs.containsKey(currentViewConfigDescriptor.getConfigClass()))
                {
                    viewConfigs.put(currentViewConfigDescriptor.getConfigClass(), currentViewConfigDescriptor);
                }
            }
            else
            {
                if (!folderConfigs.containsKey(currentConfigDescriptor.getConfigClass()))
                {
                    folderConfigs.put(currentConfigDescriptor.getConfigClass(), currentConfigDescriptor);
                }
            }

            nodesToConvert.addAll(currentNode.getChildren());
        }

        this.viewDefinitionToViewDefinitionEntryMapping = Collections.unmodifiableMap(viewConfigs);
        this.folderDefinitionToViewDefinitionEntryMapping = Collections.unmodifiableMap(folderConfigs);

        initCaches();
    }