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() {
+ ;
+ }
+
}