Author: jbeard
Date: Sun Nov  7 09:41:31 2010
New Revision: 1032248

URL: http://svn.apache.org/viewvc?rev=1032248&view=rev
Log:
Changed the listener code in order to fix a bug where onentry listeners were 
not being called when transitioning from history states. The solution was to 
move the listeners into the onexit/onentry actions, which I think makes sense.

Modified:
    
commons/sandbox/gsoc/2010/scxml-js/trunk/src/python/scxml/cgf/backends/js/AbstractStatechartGenerator.py
    
commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl

Modified: 
commons/sandbox/gsoc/2010/scxml-js/trunk/src/python/scxml/cgf/backends/js/AbstractStatechartGenerator.py
URL: 
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/python/scxml/cgf/backends/js/AbstractStatechartGenerator.py?rev=1032248&r1=1032247&r2=1032248&view=diff
==============================================================================
--- 
commons/sandbox/gsoc/2010/scxml-js/trunk/src/python/scxml/cgf/backends/js/AbstractStatechartGenerator.py
 (original)
+++ 
commons/sandbox/gsoc/2010/scxml-js/trunk/src/python/scxml/cgf/backends/js/AbstractStatechartGenerator.py
 Sun Nov  7 09:41:31 2010
@@ -7,6 +7,7 @@ config = {
                                "xslt/ir-compiler/computeLCA.xsl",
                                "xslt/ir-compiler/transformIf.xsl",
                                "xslt/ir-compiler/appendStateInformation.xsl",
-                               
"xslt/ir-compiler/appendBasicStateInformation.xsl"],
+                               
"xslt/ir-compiler/appendBasicStateInformation.xsl",
+                               
"xslt/ir-compiler/addBasicDescendantsToTransitions.xsl" ],
        "code" : None
 }

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=1032248&r1=1032247&r2=1032248&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
 Sun Nov  7 09:41:31 2010
@@ -444,6 +444,17 @@
                                        </if>
 
                                        <apply-templates 
select="$state/s:onentry/*[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]"/>
+
+                                       <if test="$genListenerHooks">
+                                               <call-template 
name="genForEach">
+                                                       <with-param name="var" 
select="'listener'"/>
+                                                       <with-param name="in" 
select="'listeners'"/>
+                                                       <with-param name="do">
+                                                               //to
+                                                               
listener.onEntry("<value-of select="$stateName"/>");
+                                                       </with-param>
+                                               </call-template>
+                                       </if>
                                }
 
                                this.exitAction = function(){
@@ -456,6 +467,21 @@
                                        </if>
 
                                        <apply-templates 
select="$state/s:onexit/*[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]"/>
+
+
+                                       <if test="$genListenerHooks">
+                                               <call-template 
name="genForEach">
+                                                       <with-param name="var" 
select="'listener'"/>
+                                                       <with-param name="in" 
select="'listeners'"/>
+                                                       <with-param name="do">
+                                                               //from
+                                                               
listener.onExit("<value-of select="$stateName"/>");
+                                                       </with-param>
+                                                       <!-- inner loop; assign 
these so we don't have a collision -->
+                                                       <with-param 
name="iteratorVarName" select="concat(generate-id(),'_iterator')"/>
+                                                       <with-param 
name="hoistVarName" select="concat(generate-id(),'_hoist')"/>
+                                               </call-template>
+                                       </if>
                                }
 
                                <call-template name="genStateHooks">
@@ -1010,20 +1036,6 @@
                        <with-param name="in" select="'statesExited'"/>
                        <with-param name="do">
                                state.exitAction();
-
-                               <if test="$genListenerHooks">
-                                       <call-template name="genForEach">
-                                               <with-param name="var" 
select="'listener'"/>
-                                               <with-param name="in" 
select="'listeners'"/>
-                                               <with-param name="do">
-                                                       //from
-                                                       
listener.onExit(state.toString());
-                                               </with-param>
-                                               <!-- inner loop; assign these 
so we don't have a collision -->
-                                               <with-param 
name="iteratorVarName" select="concat(generate-id(),'_iterator')"/>
-                                               <with-param name="hoistVarName" 
select="concat(generate-id(),'_hoist')"/>
-                                       </call-template>
-                               </if>
                        </with-param>
                </call-template>
        </template>
@@ -1098,15 +1110,6 @@
                                        <when test="$precomputeExit">
                                                <for-each 
select="$t/c:exitpath/c:state">
                                                        <value-of 
select="."/>.exitAction();
-
-                                                       <call-template 
name="genForEach">
-                                                               <with-param 
name="var" select="'listener'"/>
-                                                               <with-param 
name="in" select="'listeners'"/>
-                                                               <with-param 
name="do">
-                                                                       //from
-                                                                       
listener.onExit("<value-of select="."/>");
-                                                               </with-param>
-                                                       </call-template>
                                                </for-each>
                                        </when>
                                        <otherwise>
@@ -1140,18 +1143,6 @@
                                        <!-- iterate in reverse order -->
                                        <sort select="position()" 
data-type="number" order="descending"/>
                                        <value-of select="."/>.enterAction();
-
-                                       <if test="$genListenerHooks">
-
-                                               <call-template 
name="genForEach">
-                                                       <with-param name="var" 
select="'listener'"/>
-                                                       <with-param name="in" 
select="'listeners'"/>
-                                                       <with-param name="do">
-                                                               //to
-                                                               
listener.onEntry("<value-of select="."/>");
-                                                       </with-param>
-                                               </call-template>
-                                       </if>
                                </for-each>
 
                                //update configuration


Reply via email to