Author: rahul Date: Thu Sep 29 17:35:16 2005 New Revision: 292589 URL: http://svn.apache.org/viewcvs?rev=292589&view=rev Log: Enhance the Standalone testing functionality to enable value change events on the current Context, and firing dummy events to re-evaluate conditionals on event-less transitions.
Modified: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/SCXMLSemantics.java jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/jsp/Standalone.java Modified: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/SCXMLSemantics.java URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/SCXMLSemantics.java?rev=292589&r1=292588&r2=292589&view=diff ============================================================================== --- jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/SCXMLSemantics.java (original) +++ jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/SCXMLSemantics.java Thu Sep 29 17:35:16 2005 @@ -727,8 +727,9 @@ Iterator i = eventOccurrences.iterator(); while (i.hasNext()) { String evt = (String) i.next(); - if (evt.equals(transEvent) || evt.startsWith(transEventDot)) { - return true; + if (evt == null || evt.equals(transEvent) //null for Standalone + || evt.startsWith(transEventDot)) { + return true; } } return false; Modified: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/jsp/Standalone.java URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/jsp/Standalone.java?rev=292589&r1=292588&r2=292589&view=diff ============================================================================== --- jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/jsp/Standalone.java (original) +++ jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/jsp/Standalone.java Thu Sep 29 17:35:16 2005 @@ -29,6 +29,7 @@ import org.apache.commons.scxml.EventDispatcher; import org.apache.commons.scxml.SCXMLDigester; import org.apache.commons.scxml.SCXMLExecutor; +import org.apache.commons.scxml.SCXMLHelper; import org.apache.commons.scxml.TriggerEvent; import org.apache.commons.scxml.env.SimpleDispatcher; import org.apache.commons.scxml.env.Tracer; @@ -36,8 +37,20 @@ import org.apache.commons.scxml.model.SCXML; /** - * Standalone SCXML Interpreter. - * Useful for command-line testing and debugging. + * Standalone SCXML interpreter, useful for command-line testing and + * debugging. + * + * <p><b>USAGE:</b></p> + * <p><code>java org.apache.commons.scxml.env.jsp.Standalone url</code></p> + * <p>or</p> + * <p><code>java org.apache.commons.scxml.env.jsp.Standalone filename</code> + * </p> + * + * <p><b>RUNNING:</b></p> + * <p>Enter a space-separated list of "events"</p> + * <p>To quit, enter "quit"</p> + * <p>To populate a variable in the current context, type "name=value"</p> + * <p>To reset state machine, enter "reset"</p> * */ public final class Standalone { @@ -77,15 +90,32 @@ while ((event = br.readLine()) != null) { event = event.trim(); if (event.equalsIgnoreCase("help") || event.equals("?")) { - System.out.println("enter a space-separated list of " + System.out.println("Enter a space-separated list of " + "events"); - System.out.println("to quit, enter \"quit\""); - System.out.println("to reset state machine, enter " + System.out.println("To populate a variable in the " + + "current context, type \"name=value\""); + System.out.println("To quit, enter \"quit\""); + System.out.println("To reset state machine, enter " + "\"reset\""); } else if (event.equalsIgnoreCase("quit")) { break; } else if (event.equalsIgnoreCase("reset")) { exec.reset(); + } else if (event.indexOf('=') != -1) { + int marker = event.indexOf('='); + String name = event.substring(0, marker); + String value = event.substring(marker + 1); + rootCtx.setLocal(name, value); + System.out.println("Set variable " + name + " to " + + value); + } else if (SCXMLHelper.isStringEmpty(event) + || event.equalsIgnoreCase("null")) { + TriggerEvent[] evts = { new TriggerEvent(null, + TriggerEvent.SIGNAL_EVENT, null) }; + exec.triggerEvents(evts); + if (exec.getCurrentStatus().isFinal()) { + System.out.println("A final configuration reached."); + } } else { StringTokenizer st = new StringTokenizer(event); int tkns = st.countTokens(); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]