You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shale.apache.org by cr...@apache.org on 2006/09/12 00:33:33 UTC

svn commit: r442376 - in /shale/sandbox: shale-dialog2-legacy/src/main/java/org/apache/shale/dialog2/legacy/ shale-dialog2-scxml/src/main/java/org/apache/shale/dialog2/scxml/ shale-dialog2/src/main/java/org/apache/shale/dialog2/ shale-dialog2/src/main/...

Author: craigmcc
Date: Mon Sep 11 15:33:31 2006
New Revision: 442376

URL: http://svn.apache.org/viewvc?view=rev&rev=442376
Log:
Abstract the post-advance navigation inside the advance() method,
analogous to the way it works in the start() method.  Also, tighten up
contracts on throwing ISE from advance(), start(), and stop().

Modified:
    shale/sandbox/shale-dialog2-legacy/src/main/java/org/apache/shale/dialog2/legacy/LegacyDialogContext.java
    shale/sandbox/shale-dialog2-scxml/src/main/java/org/apache/shale/dialog2/scxml/SCXMLDialogContext.java
    shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/DialogContext.java
    shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/faces/Dialog2NavigationHandler.java
    shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/faces/Dialog2PhaseListener.java
    shale/sandbox/shale-dialog2/src/test/java/org/apache/shale/dialog2/faces/Dialog2NavigationHandlerTest.java

Modified: shale/sandbox/shale-dialog2-legacy/src/main/java/org/apache/shale/dialog2/legacy/LegacyDialogContext.java
URL: http://svn.apache.org/viewvc/shale/sandbox/shale-dialog2-legacy/src/main/java/org/apache/shale/dialog2/legacy/LegacyDialogContext.java?view=diff&rev=442376&r1=442375&r2=442376
==============================================================================
--- shale/sandbox/shale-dialog2-legacy/src/main/java/org/apache/shale/dialog2/legacy/LegacyDialogContext.java (original)
+++ shale/sandbox/shale-dialog2-legacy/src/main/java/org/apache/shale/dialog2/legacy/LegacyDialogContext.java Mon Sep 11 15:33:31 2006
@@ -240,21 +240,25 @@
 
 
     /** {@inheritDoc} */
-    public String advance(FacesContext context, String outcome) {
+    public void advance(FacesContext context, String outcome) {
 
-        started = true;
-        Position position = peek();
-
-        try {
-            transition(position, outcome);
-        } catch (IllegalStateException ie) {
-            // The transition method didn't like our outcome but its possible we can
-            // recover if the outcome was intended for a different NavigationHandler
-            return null;
+        if (!started) {
+            throw new IllegalStateException("Dialog instance '"
+                    + getId() + "' for dialog name '"
+                    + getName() + "' has not yet been started");
         }
 
+        // Perform an initial transition from the current state based on
+        // the logical outcome received from the (current) view state
+        Position position = peek();
+        transition(position, outcome);
         State state = position.getState();
+        String viewId = null;
+
+        // Advance through states until we again encounter the
+        // need to render a view state
         while (true) {
+
             if (state instanceof ActionState) {
                 ActionState astate = (ActionState) state;
                 MethodBinding mb = context.getApplication().
@@ -269,7 +273,8 @@
                 if (position == null) {
                     stop(context);
                 }
-                return ((EndState) state).getViewId();
+                viewId = ((EndState) state).getViewId();
+                break;
             } else if (state instanceof SubdialogState) {
                 SubdialogState sstate = (SubdialogState) state;
                 Dialog subdialog = (Dialog) dialogs(context).get(sstate.getDialogName());
@@ -281,7 +286,8 @@
                 position = peek();
                 continue;
             } else if (state instanceof ViewState) {
-                return ((ViewState) state).getViewId();
+                viewId = ((ViewState) state).getViewId();
+                break;
             } else {
                 throw new IllegalStateException
                   ("State '" + state.getName()
@@ -290,6 +296,15 @@
             }
         }
 
+        // Navigate to the requested view identifier (if any)
+        if (viewId == null) {
+            return;
+        }
+        ViewHandler vh = context.getApplication().getViewHandler();
+        UIViewRoot view = vh.createView(context, viewId);
+        view.setViewId(viewId);
+        context.setViewRoot(view);
+        context.renderResponse();
 
     }
 
@@ -305,15 +320,8 @@
         started = true;
 
         // Advance the computation of our dialog until a view state
-        // is encountered
-        String viewId = advance(context, null);
-
-        // Navigate to the requested view
-        ViewHandler vh = context.getApplication().getViewHandler();
-        UIViewRoot view = vh.createView(context, viewId);
-        view.setViewId(viewId);
-        context.setViewRoot(view);
-        context.renderResponse();
+        // is encountered, then navigate to it
+        advance(context, null);
 
     }
 

Modified: shale/sandbox/shale-dialog2-scxml/src/main/java/org/apache/shale/dialog2/scxml/SCXMLDialogContext.java
URL: http://svn.apache.org/viewvc/shale/sandbox/shale-dialog2-scxml/src/main/java/org/apache/shale/dialog2/scxml/SCXMLDialogContext.java?view=diff&rev=442376&r1=442375&r2=442376
==============================================================================
--- shale/sandbox/shale-dialog2-scxml/src/main/java/org/apache/shale/dialog2/scxml/SCXMLDialogContext.java (original)
+++ shale/sandbox/shale-dialog2-scxml/src/main/java/org/apache/shale/dialog2/scxml/SCXMLDialogContext.java Mon Sep 11 15:33:31 2006
@@ -161,8 +161,10 @@
 
 
     /** {@inheritDoc} */
-    public String advance(FacesContext context, String outcome) {
+    public void advance(FacesContext context, String outcome) {
 
+        throw new UnsupportedOperationException(); // FIXME - implement revised contract for this
+/*
         ((ShaleDialogELEvaluator) this.executor.getEvaluator()).
                     setFacesContext(context);
         this.executor.getRootContext().setLocal(Globals.POSTBACK_OUTCOME, outcome);
@@ -180,6 +182,7 @@
         // approach with Commons SCXML v0.5
         Iterator iterator = this.executor.getCurrentStatus().getStates().iterator();
         return ((State) iterator.next()).getId();
+*/
 
     }
 

Modified: shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/DialogContext.java
URL: http://svn.apache.org/viewvc/shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/DialogContext.java?view=diff&rev=442376&r1=442375&r2=442376
==============================================================================
--- shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/DialogContext.java (original)
+++ shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/DialogContext.java Mon Sep 11 15:33:31 2006
@@ -89,14 +89,18 @@
     /**
      * <p>Advance the execution of the state machine underlying this dialog
      * context instance, until an interaction with the user is required.  At that
-     * point, return the view identifier to which navigation should occur.</p>
+     * point, navigate to that view, call <code>FacesContext.renderResponse()</code>,
+     * and return.</p>
      *
      * @param context FacesContext for the current request
      * @param outcome Logical outcome to use for driving a transition
      *  out of a state that was waiting for user input, or <code>null</code>
      *  if no transition should be performed
+     *
+     * @exception IllegalStateException if this {@link DialogContext}
+     *  instance has not yet been started
      */
-    public String advance(FacesContext context, String outcome);
+    public void advance(FacesContext context, String outcome);
 
 
     /**

Modified: shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/faces/Dialog2NavigationHandler.java
URL: http://svn.apache.org/viewvc/shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/faces/Dialog2NavigationHandler.java?view=diff&rev=442376&r1=442375&r2=442376
==============================================================================
--- shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/faces/Dialog2NavigationHandler.java (original)
+++ shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/faces/Dialog2NavigationHandler.java Mon Sep 11 15:33:31 2006
@@ -109,97 +109,40 @@
                       + outcome + "')");
         }
 
-        String viewId = null;
         DialogContext dcontext = (DialogContext)
           context.getExternalContext().getRequestMap().get(Constants.CONTEXT_BEAN);
         if (dcontext == null) {
             if ((outcome != null) && outcome.startsWith(Constants.DIALOG_PREFIX)) {
-                dcontext = create(context, outcome.substring(Constants.DIALOG_PREFIX.length()));
+                // Create and start a new DialogContext instance
+                DialogContextManager manager = (DialogContextManager)
+                  context.getApplication().getVariableResolver().
+                  resolveVariable(context, Constants.MANAGER_BEAN);
+                dcontext =
+                  manager.create(context, outcome.substring(Constants.DIALOG_PREFIX.length()));
                 dcontext.start(context);
                 if (log.isDebugEnabled()) {
                     log.debug("Starting dialog '"
                               + outcome.substring(Constants.DIALOG_PREFIX.length())
                               + "' for FacesContext instance '"
-                              + context + "'");
+                              + context + "' with navigation to viewId '"
+                              + context.getViewRoot().getViewId() + "'");
                 }
                 return;
             } else {
+                // No active dialog, so delegate to the original handler
                 original.handleNavigation(context, fromAction, outcome);
                 return;
             }
         } else {
-            viewId = advance(context, dcontext, outcome);
+            // Advance the currently active DialogContext instance
+            dcontext.advance(context, outcome);
             if (log.isDebugEnabled()) {
                 log.debug("Advancing dialog '"
                           + dcontext.getName() + "' for FacesContext '"
                           + context + "' with navigation to viewId '"
-                          + viewId + "'");
+                          + context.getViewRoot().getViewId() + "'");
             }
-            if (viewId == null) {
-                original.handleNavigation(context, fromAction, outcome);
-            }
-            if (viewId == null) {
-                return; // Stay on the same view
-            }
-        }
-        navigate(context, viewId);
-
-    }
-
-
-    // --------------------------------------------------------- Private Methods
-
-
-    /**
-     * <p>Advance the progress of the specified {@link DialogContext}, until it
-     * returns a view identifier to which we should navigate.</p>
-     * 
-     * 
-     * @param context FacesContext for the current request
-     * @param dcontext Dialog instance being processed
-     * @param outcome Logical outcome to drive this advance
-     */
-    private String advance(FacesContext context, DialogContext dcontext, String outcome) {
-
-        return dcontext.advance(context, outcome);
-
-    }
-
-
-    /**
-     * <p>Create a new {@link DialogContext}, returning it for further
-     * processing.</p>
-     * 
-     * @param context FacesContext for the current request
-     * @param name Logical name of the dialog to be started
-     */
-    private DialogContext create(FacesContext context, String name) {
-
-        DialogContextManager manager = (DialogContextManager)
-          context.getApplication().getVariableResolver().
-          resolveVariable(context, Constants.MANAGER_BEAN);
-        if (manager != null) {
-            return manager.create(context, name);
-        } else {
-            return null;
         }
-
-    }
-
-
-    /**
-     * <p>Navigate to the specified view identifier.</p>
-     *
-     * @param context FacesContext for the current request
-     * @param viewId View identifier to navigate to
-     */
-    private void navigate(FacesContext context, String viewId) {
-
-        ViewHandler vh = context.getApplication().getViewHandler();
-        UIViewRoot view = vh.createView(context, viewId);
-        view.setViewId(viewId);
-        context.setViewRoot(view);
-        context.renderResponse();
 
     }
 

Modified: shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/faces/Dialog2PhaseListener.java
URL: http://svn.apache.org/viewvc/shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/faces/Dialog2PhaseListener.java?view=diff&rev=442376&r1=442375&r2=442376
==============================================================================
--- shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/faces/Dialog2PhaseListener.java (original)
+++ shale/sandbox/shale-dialog2/src/main/java/org/apache/shale/dialog2/faces/Dialog2PhaseListener.java Mon Sep 11 15:33:31 2006
@@ -183,17 +183,15 @@
                 return;
             }
 
-            // Advance the new DialogContext through its start state
-            // and navigate to the resulting viewId (if any)
-            String viewId = dcontext.advance(context, null);
+            // Start the new DialogContext and navigate to the requested view
+            dcontext.start(context);
             if (log.isDebugEnabled()) {
                 log.debug("afterPhase() creating dialog context with id '"
                           + id + "' for FacesContext instance '"
                           + context + "' associated with parent dialog context id '"
-                          + parentId
-                          + "' and advancing to viewId '" + viewId + "'");
+                          + parentId + "' and advancing to viewId '"
+                          + context.getViewRoot().getViewId() + "'");
             }
-            navigate(context, viewId);
 
         }
         
@@ -224,27 +222,6 @@
         }
         DialogContext dcontext = manager.create(context, dialogName, parent);
         return dcontext;
-
-    }
-
-
-    /**
-     * <p>Navigate to the specified view identifier (if any).</p>
-     *
-     * @param context FacesContext for the current request
-     * @param viewId View identifier to navigate to (if any)
-     */
-    private void navigate(FacesContext context, String viewId) {
-
-        if (viewId == null) {
-            return;
-        }
-
-        ViewHandler vh = context.getApplication().getViewHandler();
-        UIViewRoot view = vh.createView(context, viewId);
-        view.setViewId(viewId);
-        context.setViewRoot(view);
-        context.renderResponse();
 
     }
 

Modified: shale/sandbox/shale-dialog2/src/test/java/org/apache/shale/dialog2/faces/Dialog2NavigationHandlerTest.java
URL: http://svn.apache.org/viewvc/shale/sandbox/shale-dialog2/src/test/java/org/apache/shale/dialog2/faces/Dialog2NavigationHandlerTest.java?view=diff&rev=442376&r1=442375&r2=442376
==============================================================================
--- shale/sandbox/shale-dialog2/src/test/java/org/apache/shale/dialog2/faces/Dialog2NavigationHandlerTest.java (original)
+++ shale/sandbox/shale-dialog2/src/test/java/org/apache/shale/dialog2/faces/Dialog2NavigationHandlerTest.java Mon Sep 11 15:33:31 2006
@@ -47,22 +47,25 @@
      * Dialog2NavigationHandler should ignore navigation outcomes that do not correspond to a valid
      * dialog transition.  These outcomes should be delegated to the wrapped NavigationHandler instead.
      */
-    public void testHandleNavigationNullViewId() {
 
-        // the mock DialogContext will return null for its advance method
-        mockDialogContext.expects(once()).method("getName").will(returnValue("foo dialog"));
-        mockDialogContext.expects(once()).method("advance").will(returnValue(null));
-        Map requestMap = facesContext.getExternalContext().getRequestMap();
-        requestMap.put(Constants.CONTEXT_BEAN, mockDialogContext.proxy());
-
-        /**
-         * We expect our mock handler to be asked to deal with the outcome since the advance method indicates
-         * that no transition is to be performed.
-         */
-        mockNavigationHandler.expects(once()).method("handleNavigation");
-        navigationHandler = new Dialog2NavigationHandler((NavigationHandler)mockNavigationHandler.proxy());
-        navigationHandler.handleNavigation(facesContext, "foo action", "foo outcome");
-    }
+// The functionality described by the above statement has bene removed, so commeent out
+//  this test case for now
+//    public void testHandleNavigationNullViewId() {
+//
+//        // the mock DialogContext will return null for its advance method
+//        mockDialogContext.expects(once()).method("getName").will(returnValue("foo dialog"));
+//        mockDialogContext.expects(once()).method("advance").will(returnValue(null));
+//        Map requestMap = facesContext.getExternalContext().getRequestMap();
+//        requestMap.put(Constants.CONTEXT_BEAN, mockDialogContext.proxy());
+//
+//        /**
+//         * We expect our mock handler to be asked to deal with the outcome since the advance method indicates
+//         * that no transition is to be performed.
+//         */
+//        mockNavigationHandler.expects(once()).method("handleNavigation");
+//        navigationHandler = new Dialog2NavigationHandler((NavigationHandler)mockNavigationHandler.proxy());
+//        navigationHandler.handleNavigation(facesContext, "foo action", "foo outcome");
+//    }
 
     /**
      * If a dialog is in progress, periodic navigation outcomes that do not correspond to transitions should
@@ -71,4 +74,10 @@
 //    public void testHandleNavigationNullThenValidViewId() {
 //        TODO - add test
 //    }
+
+
+    public void testDummy() {
+        ;
+    }
+
 }