Author: craigmcc
Date: Fri Dec 22 18:20:48 2006
New Revision: 489827
URL: http://svn.apache.org/viewvc?view=rev&rev=489827
Log:
Implement the agreed-upon behavior when setOpaqueData() modifies the current
state. As with the SCXML implementation, this will trigger an onExit event
from the old state and an onEntry event to the new state, but no onTransition
event (since this particular change might not represent a legal transition arc
in a state diagram for the current dialog.
SHALE-61
Modified:
shale/framework/trunk/shale-dialog-basic/src/main/java/org/apache/shale/dialog/basic/BasicDialogContext.java
Modified:
shale/framework/trunk/shale-dialog-basic/src/main/java/org/apache/shale/dialog/basic/BasicDialogContext.java
URL:
http://svn.apache.org/viewvc/shale/framework/trunk/shale-dialog-basic/src/main/java/org/apache/shale/dialog/basic/BasicDialogContext.java?view=diff&rev=489827&r1=489826&r2=489827
==============================================================================
---
shale/framework/trunk/shale-dialog-basic/src/main/java/org/apache/shale/dialog/basic/BasicDialogContext.java
(original)
+++
shale/framework/trunk/shale-dialog-basic/src/main/java/org/apache/shale/dialog/basic/BasicDialogContext.java
Fri Dec 22 18:20:48 2006
@@ -301,12 +301,24 @@
+ topState.stackDepth);
}
Position top = peek();
- top.setState(top.getDialog().findState(topState.stateName));
+ String oldStateName = top.getState().getName();
+ if (!oldStateName.equals(topState.stateName)) {
+ fireOnExit(oldStateName);
+ top.setState(top.getDialog().findState(topState.stateName));
+ fireOnEntry(topState.stateName);
+ }
} else if ("stack".equals(strategy())) {
if (log().isTraceEnabled()) {
log().trace("setOpaqueState<stack> restores stack of " +
((List) opaqueState).size());
}
- positions = (List) opaqueState;
+ List list = (List) opaqueState;
+ String oldStateName = peek().getState().getName();
+ String newStateName = ((Position) list.get(list.size() -
1)).getState().getName();
+ if (!oldStateName.equals(newStateName) || (list.size() !=
positions.size())) {
+ fireOnExit(oldStateName);
+ positions = list;
+ fireOnEntry(newStateName);
+ }
} else {
if (log().isTraceEnabled()) {
log().trace("setOpaqueState<none> restores nothing");