Author: jbeard Date: Mon Jul 19 14:59:06 2010 New Revision: 965516 URL: http://svn.apache.org/viewvc?rev=965516&view=rev Log: Merged SCXML-141-148 back into trunk.
Added: commons/sandbox/gsoc/2010/scxml-js/trunk/demo/drag-and-drop/ - copied from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/demo/drag-and-drop/ commons/sandbox/gsoc/2010/scxml-js/trunk/demo/drag-and-drop/drag-and-drop.xhtml - copied unchanged from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/demo/drag-and-drop/drag-and-drop.xhtml commons/sandbox/gsoc/2010/scxml-js/trunk/demo/drag-and-drop/drag-and-drop2.xhtml - copied unchanged from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/demo/drag-and-drop/drag-and-drop2.xhtml commons/sandbox/gsoc/2010/scxml-js/trunk/demo/drag-and-drop/drag-and-drop2.xml - copied unchanged from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/demo/drag-and-drop/drag-and-drop2.xml commons/sandbox/gsoc/2010/scxml-js/trunk/demo/drag-and-drop/drag-and-drop3.js - copied unchanged from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/demo/drag-and-drop/drag-and-drop3.js commons/sandbox/gsoc/2010/scxml-js/trunk/demo/drag-and-drop/drag-and-drop3.svg - copied unchanged from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/demo/drag-and-drop/drag-and-drop3.svg commons/sandbox/gsoc/2010/scxml-js/trunk/test/event_system_properties/ - copied from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/test/event_system_properties/ commons/sandbox/gsoc/2010/scxml-js/trunk/test/event_system_properties/TestEventSystemProperties.xml - copied unchanged from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/test/event_system_properties/TestEventSystemProperties.xml commons/sandbox/gsoc/2010/scxml-js/trunk/test/event_system_properties/scripts/ - copied from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/test/event_system_properties/scripts/ commons/sandbox/gsoc/2010/scxml-js/trunk/test/event_system_properties/scripts/unitTest.js - copied unchanged from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/test/event_system_properties/scripts/unitTest.js commons/sandbox/gsoc/2010/scxml-js/trunk/test/kitchen_sink/KitchenSink_dataModule.xml - copied unchanged from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/test/kitchen_sink/KitchenSink_dataModule.xml commons/sandbox/gsoc/2010/scxml-js/trunk/test/kitchen_sink/scripts/unitTest_dataModel.js - copied unchanged from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/test/kitchen_sink/scripts/unitTest_dataModel.js commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/xslt_js/ - copied from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/test/xslt/xslt_js/ commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/xslt_js/test.html - copied unchanged from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/test/xslt/xslt_js/test.html commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/xslt_js/test.xml - copied unchanged from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/test/xslt/xslt_js/test.xml commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/xslt_js/test.xsl - copied unchanged from r965514, commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148/test/xslt/xslt_js/test.xsl Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/ (props changed) commons/sandbox/gsoc/2010/scxml-js/trunk/build.js commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/SCXMLCompiler.js commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/Transformer.js commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl Propchange: commons/sandbox/gsoc/2010/scxml-js/trunk/ ------------------------------------------------------------------------------ --- svn:ignore (original) +++ svn:ignore Mon Jul 19 14:59:06 2010 @@ -2,3 +2,4 @@ target build_dbg.sh build +Session.vim Propchange: commons/sandbox/gsoc/2010/scxml-js/trunk/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Mon Jul 19 14:59:06 2010 @@ -1,4 +1,5 @@ /commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-138-139:958222 /commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-140:958231-958311 +/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-141-148:958433-965514 /commons/sandbox/gsoc/2010/scxml-js/branches/browser-tests.1.ie:954350-956951 /commons/sandbox/gsoc/2010/scxml-js/branches/core-module.SCXML-137:957703-958221 Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/build.js URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/build.js?rev=965516&r1=965515&r2=965516&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/build.js (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/build.js Mon Jul 19 14:59:06 2010 @@ -73,11 +73,13 @@ require.def("build", //paths to all of the SCXML files we want to compile var scxmlTests = { + KitchenSink_dataModule :"test/kitchen_sink/KitchenSink_dataModule.xml", KitchenSink :"test/kitchen_sink/KitchenSink.xml", KitchenSink_performance :"test/kitchen_sink/KitchenSink_performance.xml", KitchenSink_executableContent :"test/kitchen_sink/KitchenSink_executableContent.xml", ConditionalTransition :"test/conditional_transition/TestConditionalTransition.xml", - InPredicate :"test/in_predicate/TestInPredicate.xml" + InPredicate :"test/in_predicate/TestInPredicate.xml", + EventSystemProperties :"test/event_system_properties/TestEventSystemProperties.xml", } //FIXME: this violates Don't Repeat Yourself; these paths are written here and in the module @@ -104,10 +106,12 @@ require.def("build", var unitTestScripts = [ + "test/kitchen_sink/scripts/unitTest_dataModel", "test/kitchen_sink/scripts/unitTest", "test/kitchen_sink/scripts/unitTest_executableContent", "test/conditional_transition/scripts/unitTest", - "test/in_predicate/scripts/unitTest" + "test/in_predicate/scripts/unitTest", + "test/event_system_properties/scripts/unitTest" ] //gets populated at run-time Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/SCXMLCompiler.js URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/SCXMLCompiler.js?rev=965516&r1=965515&r2=965516&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/SCXMLCompiler.js (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/SCXMLCompiler.js Mon Jul 19 14:59:06 2010 @@ -68,8 +68,8 @@ require.def("src/javascript/scxml/cgf/SC var toReturn = options.inFiles.map(function(xmlFile){ - var ir = Transformer(xmlFile,backend.transformations,null,"xml"); - var transformedJs = Transformer(ir,backend.code,options,"text"); + var ir = Transformer(xmlFile,backend.transformations,null,"xml",options.debug); + var transformedJs = Transformer(ir,backend.code,options,"text",options.debug); //optionally beautify it if(options.beautify){ Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/Transformer.js URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/Transformer.js?rev=965516&r1=965515&r2=965516&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/Transformer.js (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/Transformer.js Mon Jul 19 14:59:06 2010 @@ -113,7 +113,7 @@ function(xmlUtil){ return toReturn; //string or node } : //everything else - function(sourceDocument,transformList,params,output){ + function(sourceDocument,transformList,params,output,debug){ transformList = transformList && !transformList.length ? [transformList] : transformList; @@ -147,14 +147,17 @@ function(xmlUtil){ //set parameters processors.forEach(function(p){ for(paramName in params){ - p.setParameter(null,paramName,params[paramName]); + var paramValue = params[paramName]; + if (typeof paramValue == "string") p.setParameter(null,paramName,paramValue); } }); var docToTransform = sourceDocument; processors.forEach(function(p){ + if(debug) console.dirxml(docToTransform); docToTransform = p.transformToDocument(docToTransform); }); + if(debug) console.dirxml(docToTransform); var toReturn; Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl?rev=965516&r1=965515&r2=965516&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl Mon Jul 19 14:59:06 2010 @@ -36,7 +36,7 @@ <variable name="genNonBasicTriggerDispatcherExitBlockIteratorExpression" select="'currentConfiguration.map(function(state){return STATE_INT_ID_TO_OBJECT_MAP[state]})'"/> - + <variable name="eventToNameMap" select="'TRIGGER_ID_TO_NAME_MAP[e]'"/> <template name="genContextHooks"> //enumeration of states int id's @@ -141,18 +141,6 @@ } </template> - <template name="genExternalTriggerDispatcher"> - <param name="event"/> - - this.<value-of select="$event/c:name"/> = function(){ - if(isInStableState){ - runToCompletion(<value-of select="$event/c:name"/>); - }else{ - return undefined; - } - } - </template> - <template name="genNonParallelSubstateConfigurationSetString"> <param name="t"/> @@ -215,6 +203,12 @@ <value-of select="$s/@id"/> </template> + <template name="genExternalTriggerDispatcherRunToCompletionEventValue"> + <param name="eventName"/> + + <value-of select="$eventName"/> + </template> + <template name="genStateHooks"/> <template name="genEnumeratedHooks"/> <template name="genTriggerIntEnum"/> Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl?rev=965516&r1=965515&r2=965516&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl Mon Jul 19 14:59:06 2010 @@ -26,7 +26,6 @@ <param name="noMap" select="false()"/> <param name="noForEach" select="false()"/> <param name="noSome" select="false()"/> - <param name="name"/> <!-- these variables get overridden by subclasses --> <variable name="dispatchInvocation"/> @@ -82,12 +81,25 @@ <call-template name="genNoSomeArrayPrototypeExtension"/> </if> - function <value-of select="$name"/>StatechartExecutionContext(){ + function <value-of select="@name"/>StatechartExecutionContext(){ var self = this; //used in the rare occasions we call public functions from inside this class - //abstract state + //system variable declarations + var _event = { name : undefined, data : undefined }, + _name = "<value-of select="@name"/>", + _sessionid; + + var _x = { + _event : _event, + _name : _name, + _sessionid : _sessionid + }; + + //variable declarations relating to data model + <apply-templates select=".//s:datamodel"/> + //abstract state <call-template name="genAbstractState"> <with-param name="events" select="$eventsEnum"/> </call-template> @@ -130,6 +142,27 @@ } </template> + + <template match="s:datamodel"> + var <for-each select="s:data"> + <value-of select="@id"/> + <choose> + <when test="@expr"> + = <value-of select="@expr"/> + </when> + <when test="@src"> + = xhrGET(<value-of select="@src"/>) + </when> + <!-- if this inline content is JSON, we're good, + otherwise, we need to parse the xml DOM at runtime + (using the DOMParser object) --> + <when test="*"> + = <value-of select="*"/> + </when> + </choose> + <if test="position() != last()">, </if> + </for-each>; + </template> <template name="genAbstractState"> <param name="events"/> @@ -351,23 +384,25 @@ <!-- data module --> - <template match="s:datamodel"> - <!--TODO--> - </template> - - <template match="s:data"> - <!--TODO--> - </template> - <template match="s:assign"> - <!--TODO--> - </template> + <variable name="rhs"> + <choose> + <when test="@expr"> + <value-of select="@expr"/> + </when> + <!-- if this inline content is JSON, we're good, + otherwise, we need to parse the xml DOM at runtime + (using the DOMParser object) --> + <when test="*"> + <value-of select="*"/> + </when> + </choose> + </variable> - <template match="s:validate"> - <!--TODO--> + <value-of select="@location"/> = <value-of select="$rhs"/>; </template> - <template match="s:param"> + <template match="s:validate"> <!--TODO--> </template> @@ -380,6 +415,21 @@ } </template> + <template name="genExternalTriggerDispatcher"> + <param name="event"/> + + this.<value-of select="$event/c:name"/> = function(data){ + if(isInStableState){ + runToCompletion( + <call-template name="genExternalTriggerDispatcherRunToCompletionEventValue"> + <with-param name="eventName" select="$event/c:name"/> + </call-template> + ,data); + }else{ + return undefined; + } + } + </template> <template name="genBoilerplateDispatchCode"> //static private member variables @@ -398,7 +448,7 @@ if(!destroyed){ //take an event from the current outer event queue if (outerEventQueue.length && isInStableState) { - runToCompletion(outerEventQueue.shift()); + runToCompletion(outerEventQueue.shift(),outerEventQueue.shift()); } //call back mainLoopCallback = window.setTimeout(function() { @@ -409,11 +459,11 @@ } } - function runToCompletion(e){ + function runToCompletion(e,data){ isInStableState = false; if(e){ - innerEventQueue.push(e); + innerEventQueue.push(e,data); } do{ @@ -428,7 +478,7 @@ break; }else{ //microstep, then dequeue next event sending in event - microstep(innerEventQueue.shift()); + microstep(innerEventQueue.shift(),innerEventQueue.shift()); } }else{ //he has taken a default transition, so reset the global variable to false and loop again @@ -440,10 +490,17 @@ isInStableState = true; } - function microstep(e){ + function microstep(e,data){ currentConfiguration.forEach(function(state){ - if(!isPreempted) + if(!isPreempted){ + //we set the event as a global, rather than passing it into the function invocation as a parameter, + //because in cases of default events, the event object will be populated with previous event's data + if(e !== <value-of select="$defaultEventLiteral"/> ){ + _event.name=<value-of select="$eventToNameMap"/>; + _event.data=data; + } <value-of select="$dispatchInvocation"/> + } }); //reset the isPreempted flag @@ -460,8 +517,8 @@ //this is for async communication - this.GEN = function(e){ - outerEventQueue.push(e); + this.GEN = function(e,data){ + outerEventQueue.push(e,data); } //this may or may not be something we want to expose, but for right now, we at least need it for testing @@ -538,7 +595,7 @@ <!--gen executable content for t--> - <apply-templates select="$t/*[self::s:if or self::s:raise or self::s:log or self::s:script or self::s:send or self::s:cancel or self::s:invoke or self::s:finalize or self::s:datamodel or self::s:data or self::s:assign or self::s:validate or self::s:param]"/> + <apply-templates select="$t/*[self::s:if or self::s:raise or self::s:log or self::s:script or self::s:send or self::s:cancel or self::s:invoke or self::s:finalize or self::s:assign or self::s:validate ]"/> @@ -684,7 +741,7 @@ </choose> //transition action - <apply-templates select="$t/*[self::s:if or self::s:raise or self::s:log or self::s:script or self::s:send or self::s:cancel or self::s:invoke or self::s:finalize or self::s:datamodel or self::s:data or self::s:assign or self::s:validate or self::s:param]"/> + <apply-templates select="$t/*[self::s:if or self::s:raise or self::s:log or self::s:script or self::s:send or self::s:cancel or self::s:invoke or self::s:finalize or self::s:assign or self::s:validate ]"/> //enter states <for-each select="$t/c:targets/c:target/c:enterpath/c:state"> @@ -779,11 +836,11 @@ <template name="genContextHooks"/> <template name="genStateHooks"/> - <template name="genExternalTriggerDispatcher"/> <template name="genParallelSubstateConfigurationSetString"/> <template name="genNonParallelSubstateConfigurationSetString"/> <template name="genInitialization"/> <template name="genTriggerDispatcherContext"/> + <template name="genExternalTriggerDispatcherRunToCompletionEventValue"/> </stylesheet> Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl?rev=965516&r1=965515&r2=965516&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl Mon Jul 19 14:59:06 2010 @@ -32,6 +32,8 @@ <variable name="genHistoryTriggerDispatcherInnerForEachStateReference" select="'state'"/> <variable name="genNonBasicTriggerDispatcherExitBlockIteratorExpression" select="'currentConfiguration'"/> + <variable name="eventToNameMap" select="'e'"/> + <template name="genStateHooks"> <param name="state"/> @@ -63,18 +65,6 @@ </if> </template> - <template name="genExternalTriggerDispatcher"> - <param name="event"/> - - this.<value-of select="$event/c:name"/> = function(){ - if(isInStableState){ - runToCompletion("<value-of select="$event/c:name"/>"); - }else{ - return undefined; - } - } - </template> - <template name="genParallelSubstateConfigurationSetString"> <param name="s"/> <param name="t"/> @@ -150,6 +140,12 @@ <text>this</text> </template> + <template name="genExternalTriggerDispatcherRunToCompletionEventValue"> + <param name="eventName"/> + + "<value-of select="$eventName"/>" + </template> + <template match="s:send"> <choose> <when test="@delay">