//it isn't possible to support interfaces due to cdi restrictions
if(outcome.startsWith("class "))
{
outcome = outcome.substring(6);
}
ViewConfigDescriptor entry = this.viewConfigs.get(outcome);
if(entry == null)
{
if(DefaultErrorView.class.getName().equals(originalOutcome))
{
entry = ViewConfigCache.getDefaultErrorViewConfigDescriptor();
}
}
boolean allowCaching = true;
if(entry == null)
{
Class<?> loadedClass = tryToLoadClassForName(outcome);
if(loadedClass == null)
{
this.otherOutcomes.add(originalOutcome);
}
else if(ViewConfig.class.isAssignableFrom(loadedClass))
{
//a sub-classed page-config for annotating it with different view params
if(loadedClass.getAnnotation(Page.class) == null &&
loadedClass.getSuperclass().getAnnotation(Page.class) != null)
{
allowCaching = false;
addConfiguredViewParameters(loadedClass);
loadedClass = loadedClass.getSuperclass();
}
//noinspection unchecked
entry = ViewConfigCache.getViewConfigDescriptor((Class<? extends ViewConfig>) loadedClass);
}
}
if(entry != null)
{
if(allowCaching)
{
this.viewConfigs.put(outcome, entry);
addConfiguredViewParameters(entry.getViewConfig()); //in case of false it has been added already
}
PreViewConfigNavigateEvent navigateEvent = firePreViewConfigNavigateEvent(oldViewId, entry);
entry = tryToUpdateEntry(entry, navigateEvent);