use of org.apache.deltaspike.core.api.config.view.navigation.event.PreViewConfigNavigateEvent in project deltaspike by apache.
the class ViewConfigAwareNavigationHandler method handleNavigation.
//Security checks will be performed by the view-handler provided by ds
@Override
public void handleNavigation(FacesContext facesContext, String fromAction, String outcome) {
lazyInit();
if (outcome != null && outcome.contains(".")) {
String originalOutcome = outcome;
if (!this.otherOutcomes.contains(outcome)) {
//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 = this.viewConfigResolver.getDefaultErrorViewConfigDescriptor();
}
}
boolean allowCaching = true;
if (entry == null) {
Class<?> loadedClass = ClassUtils.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(View.class) == null && loadedClass.getSuperclass().getAnnotation(View.class) != null) {
allowCaching = false;
addConfiguredViewParameters(loadedClass);
loadedClass = loadedClass.getSuperclass();
}
entry = this.viewConfigResolver.getViewConfigDescriptor((Class<? extends ViewConfig>) loadedClass);
}
}
if (entry != null) {
//in case of false it has been added already
if (allowCaching) {
this.viewConfigs.put(outcome, entry);
addConfiguredViewParameters(entry.getConfigClass());
}
String oldViewId = null;
if (facesContext.getViewRoot() != null) {
oldViewId = facesContext.getViewRoot().getViewId();
}
PreViewConfigNavigateEvent navigateEvent = firePreViewConfigNavigateEvent(oldViewId, entry);
entry = tryToUpdateEntry(entry, navigateEvent);
if (entry != null) {
outcome = convertEntryToOutcome(facesContext.getExternalContext(), entry);
}
}
}
}
this.navigationHandler.handleNavigation(facesContext, fromAction, outcome);
}
use of org.apache.deltaspike.core.api.config.view.navigation.event.PreViewConfigNavigateEvent in project deltaspike by apache.
the class ViewConfigAwareNavigationHandler method firePreViewConfigNavigateEvent.
private PreViewConfigNavigateEvent firePreViewConfigNavigateEvent(String oldViewId, ViewConfigDescriptor newViewConfigDescriptor) {
ViewConfigDescriptor oldViewConfigDescriptor = this.viewConfigResolver.getViewConfigDescriptor(oldViewId);
PreViewConfigNavigateEvent navigateEvent;
if (oldViewConfigDescriptor != null) {
navigateEvent = new PreViewConfigNavigateEvent(oldViewConfigDescriptor.getConfigClass(), newViewConfigDescriptor.getConfigClass());
} else {
navigateEvent = new PreViewConfigNavigateEvent(ViewRef.Manual.class, newViewConfigDescriptor.getConfigClass());
}
this.beanManager.fireEvent(navigateEvent);
return navigateEvent;
}
Aggregations