public NavigationCase getNavigationCase()

in jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/CodiNavigationHandler.java [118:176]


    public NavigationCase getNavigationCase(FacesContext context, String action, String outcome)
    {
        if (this.wrapped instanceof ConfigurableNavigationHandler)
        {
            if(action == null && outcome != null && outcome.contains(".") && outcome.startsWith("class ") &&
                    !otherOutcomes.contains(outcome))
            {
                String originalOutcome = outcome;

                NavigationCase navigationCase = this.viewConfigBasedNavigationCaseCache.get(originalOutcome);

                if (navigationCase != null)
                {
                    return navigationCase;
                }

                outcome = outcome.substring(6);

                ViewConfigDescriptor entry = null;

                if(DefaultErrorView.class.getName().equals(originalOutcome))
                {
                    entry = ViewConfigCache.getDefaultErrorViewConfigDescriptor();
                }

                if(entry == null)
                {
                    Object loadedClass = tryToLoadClassForName(outcome);

                    if(loadedClass == null)
                    {
                        this.otherOutcomes.add(originalOutcome);
                    }
                    else if(ViewConfig.class.isAssignableFrom((Class)loadedClass))
                    {
                        //noinspection unchecked
                        entry = ViewConfigCache.getViewConfigDescriptor((Class<? extends ViewConfig>) loadedClass);
                    }
                }

                if(entry != null)
                {
                    navigationCase = new NavigationCase("*",
                                                        null,
                                                        null,
                                                        null,
                                                        entry.getViewId(),
                                                        null,
                                                        Page.NavigationMode.REDIRECT.equals(entry.getNavigationMode()),
                                                        false);
                    this.viewConfigBasedNavigationCaseCache.put(originalOutcome, navigationCase);
                    return navigationCase;
                }
            }
            return ((ConfigurableNavigationHandler) this.wrapped).getNavigationCase(context, action, outcome);
        }
        //TODO add support for implicit navigation in combination with view-config based typesafe navigation
        return null;
    }