Author: ate Date: Wed Feb 11 22:51:56 2015 New Revision: 1659105 URL: http://svn.apache.org/r1659105 Log: SCXML-101: add support for using a 'single' global Context, required for some of the (datamodel specific) IRP tests of the W3C specification.
Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCInstance.java commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCInstance.java URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCInstance.java?rev=1659105&r1=1659104&r2=1659105&view=diff ============================================================================== --- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCInstance.java (original) +++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCInstance.java Wed Feb 11 22:51:56 2015 @@ -129,6 +129,11 @@ public class SCInstance implements Seria private Context globalContext; /** + * Flag indicating if the globalContext is shared between all states (a single flat context, default false) + */ + private boolean singleContext; + + /** * Constructor * @param internalIOProcessor The I/O Processor for the internal event queue * @param evaluator The evaluator @@ -259,6 +264,17 @@ public class SCInstance implements Seria initialize(); } + public void setSingleContext(boolean singleContext) throws ModelException { + if (initialized) { + throw new ModelException("SCInstance: already initialized"); + } + this.singleContext = singleContext; + } + + public boolean isSingleContext() { + return singleContext; + } + /** * Clone data model. * @@ -438,12 +454,17 @@ public class SCInstance implements Seria public Context getContext(final EnterableState state) { Context context = contexts.get(state); if (context == null) { - EnterableState parent = state.getParent(); - if (parent == null) { - // docroot - context = evaluator.newContext(getGlobalContext()); - } else { - context = evaluator.newContext(getContext(parent)); + if (singleContext) { + context = getGlobalContext(); + } + else { + EnterableState parent = state.getParent(); + if (parent == null) { + // docroot + context = evaluator.newContext(getGlobalContext()); + } else { + context = evaluator.newContext(getContext(parent)); + } } if (state instanceof TransitionalState) { Datamodel datamodel = ((TransitionalState)state).getDatamodel(); Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java?rev=1659105&r1=1659104&r2=1659105&view=diff ============================================================================== --- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java (original) +++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java Wed Feb 11 22:51:56 2015 @@ -191,6 +191,14 @@ public class SCXMLExecutor implements SC exctx.getScInstance().setRootContext(rootContext); } + public void setSingleContext(boolean singleContext) throws ModelException { + getSCInstance().setSingleContext(singleContext); + } + + public boolean isSingleContext() { + return getSCInstance().isSingleContext(); + } + /** * Get the state machine that is being executed. * <b>NOTE:</b> This is the state machine definition or model used by this Modified: commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java?rev=1659105&r1=1659104&r2=1659105&view=diff ============================================================================== --- commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java (original) +++ commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/w3c/W3CTests.java Wed Feb 11 22:51:56 2015 @@ -728,6 +728,7 @@ public class W3CTests { return false; } final SCXMLExecutor exec = new SCXMLExecutor(null, null, trc); + exec.setSingleContext(true); exec.setStateMachine(doc); exec.addListener(doc, trc); exec.registerInvokerClass("scxml", SimpleSCXMLInvoker.class);