Search in sources :

Example 1 with PreViewConfigNavigateEvent

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);
}
Also used : PreViewConfigNavigateEvent(org.apache.deltaspike.core.api.config.view.navigation.event.PreViewConfigNavigateEvent) DefaultErrorView(org.apache.deltaspike.core.api.config.view.DefaultErrorView) ViewConfig(org.apache.deltaspike.core.api.config.view.ViewConfig) ViewConfigDescriptor(org.apache.deltaspike.core.api.config.view.metadata.ViewConfigDescriptor) View(org.apache.deltaspike.jsf.api.config.view.View) DefaultErrorView(org.apache.deltaspike.core.api.config.view.DefaultErrorView)

Example 2 with PreViewConfigNavigateEvent

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;
}
Also used : PreViewConfigNavigateEvent(org.apache.deltaspike.core.api.config.view.navigation.event.PreViewConfigNavigateEvent) ViewConfigDescriptor(org.apache.deltaspike.core.api.config.view.metadata.ViewConfigDescriptor)

Aggregations

ViewConfigDescriptor (org.apache.deltaspike.core.api.config.view.metadata.ViewConfigDescriptor)2 PreViewConfigNavigateEvent (org.apache.deltaspike.core.api.config.view.navigation.event.PreViewConfigNavigateEvent)2 DefaultErrorView (org.apache.deltaspike.core.api.config.view.DefaultErrorView)1 ViewConfig (org.apache.deltaspike.core.api.config.view.ViewConfig)1 View (org.apache.deltaspike.jsf.api.config.view.View)1