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