Re: [REVIEW] Update NavigationHandlerImpl to produce warnings when no navigation case is matched
r=rogerk
Ryan Lubke wrote:
> Add warning messages to NavigationHandler to provide feedback when
> a matching navication case could not be found for a particular
> fromViewId/outcome/action combination.
>
> SECTION: Modified Files
> ----------------------------
> M src/com/sun/faces/LogStrings.properties
> - add new messages
>
> M src/com/sun/faces/application/ApplicationAssociate.java
> - Generify getNavigationCaseListMappings()
>
> M src/com/sun/faces/application/NavigationHandlerImpl.java
> - Added warnings when no navigation case could be matched.
> - updated determineViewFromActionOutcome to loop though
> the case list once instead of four times
>
>
> SECTION: Diffs
> ----------------------------
> Index: src/com/sun/faces/LogStrings.properties
> ===================================================================
> RCS file:
> /cvs/javaserverfaces-sources/jsf-ri/src/com/sun/faces/LogStrings.properties,v
>
> retrieving revision 1.3
> diff -u -r1.3 LogStrings.properties
> --- src/com/sun/faces/LogStrings.properties 22 Aug 2005 22:10:06
> -0000 1.3
> +++ src/com/sun/faces/LogStrings.properties 3 Nov 2005 18:08:05 -0000
> @@ -33,6 +33,8 @@
> jsf.redirect_failed_error=JSF1008: Redirect to path {0} failed
> jsf.faces_servlet_mapping_cannot_be_determined_error=JSF1009: Unable
> to determine FaceServlet mapping for servlet path {0}.
> jsf.illegal_view_id_error=JSF1010: Illegal view ID {0}. The ID must
> begin with ''/''
> +jsf.navigation.no_matching_outcome="JSF1012: Unable to find matching
> navigation case from view ID ''{0}'' for outcome ''{1}''
> +jsf.navigation.no_matching_outcome_action="JSF1013: Unable to find
> matching navigation case from view ID ''{0}'' for outcome ''{1}'' and
> action ''{2}''
>
> # core tags
> jsf.core.tags.eval_result_not_expected_type=JSF1011: Evaluation of
> expression for attribute ''{0}'' resulted in unexpected type.
> Expected {1}, but received {2}.
> Index: src/com/sun/faces/application/ApplicationAssociate.java
> ===================================================================
> RCS file:
> /cvs/javaserverfaces-sources/jsf-ri/src/com/sun/faces/application/ApplicationAssociate.java,v
>
> retrieving revision 1.22
> diff -u -r1.22 ApplicationAssociate.java
> --- src/com/sun/faces/application/ApplicationAssociate.java 30 Sep
> 2005 03:57:19 -0000 1.22
> +++ src/com/sun/faces/application/ApplicationAssociate.java 3 Nov
> 2005 18:08:05 -0000
> @@ -340,9 +340,9 @@
> *
> * @return Map the map of navigation mappings.
> */
> - public Map getNavigationCaseListMappings() {
> + public Map<String,List<ConfigNavigationCase>>
> getNavigationCaseListMappings() {
> if (caseListMap == null) {
> - return Collections.EMPTY_MAP;
> + return Collections.emptyMap();
> }
> return caseListMap;
> }
> Index: src/com/sun/faces/application/NavigationHandlerImpl.java
> ===================================================================
> RCS file:
> /cvs/javaserverfaces-sources/jsf-ri/src/com/sun/faces/application/NavigationHandlerImpl.java,v
>
> retrieving revision 1.40
> diff -u -r1.40 NavigationHandlerImpl.java
> --- src/com/sun/faces/application/NavigationHandlerImpl.java 26 Aug
> 2005 15:26:59 -0000 1.40
> +++ src/com/sun/faces/application/NavigationHandlerImpl.java 3 Nov
> 2005 18:08:05 -0000
> @@ -177,7 +177,7 @@
> private CaseStruct getViewId(FacesContext context, String fromAction,
> String outcome) {
> String viewId = context.getViewRoot().getViewId();
> - CaseStruct caseStruct = null;
> + CaseStruct caseStruct;
>
> synchronized (this) {
> caseStruct = findExactMatch(viewId, fromAction, outcome);
> @@ -190,6 +190,18 @@
> caseStruct = findDefaultMatch(fromAction, outcome);
> }
> }
> + + if (caseStruct == null &&
> logger.isLoggable(Level.WARNING)) {
> + if (fromAction == null) { +
> logger.log(Level.WARNING,
> + "jsf.navigation.no_matching_outcome",
> + new Object[] {viewId,
> outcome}); + } else {
> + logger.log(Level.WARNING,
> + "jsf.navigation.no_matching_outcome_action",
> + new Object[] {viewId, outcome, fromAction});
> + }
> + }
> return caseStruct;
> }
>
> @@ -217,10 +229,11 @@
> }
>
> - Map caseListMap = associate.getNavigationCaseListMappings();
> + Map<String,List<ConfigNavigationCase>> caseListMap =
> + associate.getNavigationCaseListMappings();
> assert (null != caseListMap);
>
> - List caseList = (List) caseListMap.get(viewId);
> + List<ConfigNavigationCase> caseList = caseListMap.get(viewId);
>
> if (caseList == null) {
> return null;
> @@ -260,9 +273,11 @@
> return null;
> }
>
> - Map caseListMap = associate.getNavigationCaseListMappings();
> + Map<String,List<ConfigNavigationCase>> caseListMap =
> + associate.getNavigationCaseListMappings();
> assert (null != caseListMap);
> - TreeSet<String> wildcardMatchList =
> associate.getNavigationWildCardList();
> + TreeSet<String> wildcardMatchList =
> + associate.getNavigationWildCardList();
> assert (null != wildcardMatchList);
>
> for (String fromViewId : wildcardMatchList) {
> @@ -279,7 +294,7 @@
> // Append the trailing "*" so we can do our map lookup;
>
> String wcFromViewId = fromViewId + "*";
> - List caseList = (List) caseListMap.get(wcFromViewId);
> + List<ConfigNavigationCase> caseList =
> caseListMap.get(wcFromViewId);
>
> if (caseList == null) {
> return null;
> @@ -321,10 +336,11 @@
> return null;
> }
>
> - Map caseListMap = associate.getNavigationCaseListMappings();
> + Map<String,List<ConfigNavigationCase>> caseListMap =
> + associate.getNavigationCaseListMappings();
> assert (null != caseListMap);
>
> - List caseList = (List) caseListMap.get("*");
> + List<ConfigNavigationCase> caseList = caseListMap.get("*");
>
> if (caseList == null) {
> return null;
> @@ -351,19 +367,15 @@
> */
>
> private synchronized
> - CaseStruct determineViewFromActionOutcome(List caseList,
> + CaseStruct
> determineViewFromActionOutcome(List<ConfigNavigationCase> caseList,
> String fromAction,
> String outcome) {
> -
> - String cncFromAction = null;
> - String fromOutcome = null;
> - String toViewId = null;
> + CaseStruct result = new CaseStruct();
> - for (int i = 0; i < caseList.size(); i++) {
> - ConfigNavigationCase cnc = (ConfigNavigationCase)
> caseList.get(i);
> - cncFromAction = cnc.getFromAction();
> - fromOutcome = cnc.getFromOutcome();
> - toViewId = cnc.getToViewId();
> + for (ConfigNavigationCase cnc : caseList) {
> + String cncFromAction = cnc.getFromAction();
> + String fromOutcome = cnc.getFromOutcome();
> + String toViewId = cnc.getToViewId();
> if ((cncFromAction != null) && (fromOutcome != null)) {
> if ((cncFromAction.equals(fromAction)) &&
> (fromOutcome.equals(outcome))) {
> @@ -372,27 +384,15 @@
> return result;
> }
> }
> - }
> -
> - for (int i = 0; i < caseList.size(); i++) {
> - ConfigNavigationCase cnc = (ConfigNavigationCase)
> caseList.get(i);
> - cncFromAction = cnc.getFromAction();
> - fromOutcome = cnc.getFromOutcome();
> - toViewId = cnc.getToViewId();
> - if ((cncFromAction == null) && (fromOutcome != null)) {
> + + if ((cncFromAction == null) && (fromOutcome
> != null)) {
> if (fromOutcome.equals(outcome)) {
> result.viewId = toViewId;
> result.navCase = cnc;
> return result;
> }
> }
> - }
> -
> - for (int i = 0; i < caseList.size(); i++) {
> - ConfigNavigationCase cnc = (ConfigNavigationCase)
> caseList.get(i);
> - cncFromAction = cnc.getFromAction();
> - fromOutcome = cnc.getFromOutcome();
> - toViewId = cnc.getToViewId();
> + if ((cncFromAction != null) && (fromOutcome
> == null)) {
> if (cncFromAction.equals(fromAction)) {
> result.viewId = toViewId;
> @@ -400,19 +400,13 @@
> return result;
> }
> }
> - }
> -
> - for (int i = 0; i < caseList.size(); i++) {
> - ConfigNavigationCase cnc = (ConfigNavigationCase)
> caseList.get(i);
> - cncFromAction = cnc.getFromAction();
> - fromOutcome = cnc.getFromOutcome();
> - toViewId = cnc.getToViewId();
> + if ((cncFromAction == null) && (fromOutcome
> == null)) {
> result.viewId = toViewId;
> result.navCase = cnc;
> return result;
> }
> - }
> + }
> return null;
> }
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe_at_javaserverfaces.dev.java.net
> For additional commands, e-mail: dev-help_at_javaserverfaces.dev.java.net
>