Author: jbeard
Date: Sat Jul 31 22:34:10 2010
New Revision: 981100
URL: http://svn.apache.org/viewvc?rev=981100&view=rev
Log:
Intermediate commit. Added sample code to generate send.
Added:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/lib/xslt/
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/lib/xslt/javascript-literals.xsl
(with props)
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/lib/xslt/xml-to-string.xsl
- copied, changed from r981099,
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/util/xml-to-string.xsl
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/common.js
(with props)
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/jquery.js
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/filterParams.xsl
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/genMessageTemplates.xsl
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/sendToMessageTemplate.xsl
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/splitNamelist.xsl
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/util/xml-to-string.xsl
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/TestSend.xml
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/test_with_xsltproc.sh
Added:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/lib/xslt/javascript-literals.xsl
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/lib/xslt/javascript-literals.xsl?rev=981100&view=auto
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/lib/xslt/javascript-literals.xsl
(added)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/lib/xslt/javascript-literals.xsl
Sat Jul 31 22:34:10 2010
@@ -0,0 +1,112 @@
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+ <xsl:import href="xml-to-string.xsl"/>
+
+ <xsl:template match="/">
+ <html xml:space="preserve">
+ <head>
+ <title>Top-level elements displayed</title>
+ <script language="JavaScript">
+ <xsl:comment>
+ <xsl:apply-templates select="/*/*" mode="script"/>
+ <xsl:text>
// </xsl:text>
+ </xsl:comment>
+ </script>
+ </head>
+ <body>
+ <h2>Top-level elements, each as a stand-alone XML document</h2>
+ <form name="myForm">
+ <textarea name="xml" cols="75" rows="18"/>
+ <br/>
+ <select name="choice" onchange="on_change();">
+ <xsl:apply-templates select="/*/*"/>
+ </select>
+ </form>
+ <script language="JavaScript">
+ <xsl:comment>
+ function on_change() {
+ document.myForm.xml.value = eval('e' +
document.myForm.choice.selectedIndex);
+ }
+
+ if (document.myForm.xml.value == "")
+ on_change();
+ // </xsl:comment>
+ </script>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="/*/*">
+ <option>
+ <xsl:value-of select="position()"/>
+ <xsl:text>. </xsl:text>
+ <xsl:value-of select="name()"/>
+ </option>
+ </xsl:template>
+
+ <xsl:template match="/*/*" mode="script">
+ <xsl:text>
var e</xsl:text>
+ <xsl:value-of select="count(preceding-sibling::*)"/>
+ <xsl:text> = '</xsl:text>
+ <xsl:call-template name="escape-string">
+ <xsl:with-param name="text">
+ <xsl:call-template name="xml-to-string"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>';</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="escape-string">
+ <xsl:param name="text"/>
+ <xsl:variable name="slashesEscaped">
+ <xsl:call-template name="replace-string">
+ <xsl:with-param name="text" select="$text"/>
+ <xsl:with-param name="replace" select="'\'"/>
+ <xsl:with-param name="with" select="'\\'"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="apostrophesEscaped">
+ <xsl:call-template name="replace-string">
+ <xsl:with-param name="text" select="$slashesEscaped"/>
+ <xsl:with-param name="replace" select=""'""/>
+ <xsl:with-param name="with" select=""\'""/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="newlinesEscaped">
+ <xsl:call-template name="replace-string">
+ <xsl:with-param name="text" select="$apostrophesEscaped"/>
+ <xsl:with-param name="replace" select="'
'"/>
+ <xsl:with-param name="with" select="'\n'"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:call-template name="escape-dash-dash">
+ <xsl:with-param name="text" select="$newlinesEscaped"/>
+ <xsl:with-param name="replace" select="'--'"/>
+ <xsl:with-param name="with" select='"-' + '-"'/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template name="escape-dash-dash">
+ <xsl:param name="text"/>
+ <xsl:variable name="tempText">
+ <xsl:call-template name="replace-string">
+ <xsl:with-param name="text" select="$text"/>
+ <xsl:with-param name="replace" select="'--'"/>
+ <xsl:with-param name="with" select='"-' + '-"'/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="contains($tempText, '--')">
+ <xsl:call-template name="escape-dash-dash">
+ <xsl:with-param name="text" select="$tempText"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$tempText"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
Propchange:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/lib/xslt/javascript-literals.xsl
------------------------------------------------------------------------------
svn:eol-style = native
Copied:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/lib/xslt/xml-to-string.xsl
(from r981099,
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/util/xml-to-string.xsl)
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/lib/xslt/xml-to-string.xsl?p2=commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/lib/xslt/xml-to-string.xsl&p1=commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/util/xml-to-string.xsl&r1=981099&r2=981100&rev=981100&view=diff
==============================================================================
(empty)
Added:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/common.js
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/common.js?rev=981100&view=auto
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/common.js
(added)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/common.js
Sat Jul 31 22:34:10 2010
@@ -0,0 +1,27 @@
+require.def("src/javascript/scxml/cgf/util/external_communications/common",
+{
+ genProperties : function ($names) {
+ var toReturn = [], value, name;
+
+ for (name in $names) {
+ if ($names.hasOwnProperty(name)) {
+ value = $names[name];
+ toReturn.push('<scxml:property name="', name,
'">', value, '</scxml:property>');
+ }
+ }
+ return toReturn.join('');
+ },
+
+ scxmlMessageTemplate : function (data) {
+ //TODO: hints
+ return [
+ '<scxml:message
xmlns:scxml="http://www.w3.org/2005/07/scxml" version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/07/scxml scxml-message.xsd"
source="" sourcetype="scxml"',
+ 'sourcetype="scxml" ',
+ 'sendid="', data.$sendid, '" ',
+ 'type="', data.$type, '" ',
+ 'name="', data.$event, '" ',
+ 'target="', data.$target, '">',
+ '<scxml:payload>', data.$content ||
this.genProperties(data.$names), '</scxml:payload></scxml:message>'
+ ].join('');
+ }
+});
Propchange:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/common.js
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/jquery.js
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/jquery.js?rev=981100&r1=981099&r2=981100&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/jquery.js
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/jquery.js
Sat Jul 31 22:34:10 2010
@@ -1,7 +1,8 @@
require.def("src/javascript/scxml/cgf/util/external_communications/jquery",
-["lib/js/jquery.js"],
-function(){
+["src/javascript/scxml/cgf/util/external_communications/common","lib/js/jquery.js"],
+function(common){
//fixme: json or xml? how do we handle the difference for get? for post?
+
return {
get : function(url){
var toReturn;
@@ -14,7 +15,20 @@ function(){
});
return toReturn;
},
- post : function(url,data){
+ post : function(url,messagedata,contentdata){
+ var postDataString = null;
+ if(typeof contentdata == "string"){
+ //assume content
+ messagedata.$content = contentdata;
+ }else if(typeof contentdata == "object"){
+ //assume we are given an object hash
+ messagedata.$names = contentdata;
+ }
+ postDataString = common.scxmlMessageTemplate(data);
+
+ jQuery.post(url,{_content:postDataString});
+
+ /*
var toReturn;
$.ajax({
type:'POST',
@@ -22,10 +36,13 @@ function(){
success: function(result) {
toReturn = result;
},
- data:data,
+ data:{
+ _content : postDataString
+ },
async:false
});
return toReturn;
+ */
}
}
})
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/filterParams.xsl
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/filterParams.xsl?rev=981100&r1=981099&r2=981100&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/filterParams.xsl
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/filterParams.xsl
Sat Jul 31 22:34:10 2010
@@ -14,14 +14,22 @@
</xsl:template>
<xsl:template match="s:send">
- <xsl:variable name="namelistNodes"
select="c:namelist/c:name/text()"/>
+ <xsl:variable name="namelistNodes" select="c:namelist/c:name"/>
+ <xsl:variable name="filteredParams" select="s:param[not(@name =
$namelistNodes/text())]"/>
+
+ <!--
+ <xsl:message>
+ namelistNodes : <xsl:value-of
select="count($namelistNodes)"/>
+ filteredParams : <xsl:value-of
select="count($filteredParams)"/>
+ </xsl:message>
+ -->
<xsl:copy>
<xsl:apply-templates select="@*"/>
- <xsl:apply-templates select="param[not(@name =
$namelistNodes)]"/>
+ <xsl:apply-templates select="$filteredParams"/>
- <xsl:apply-templates select="node()[not(self::param)]"/>
+ <xsl:apply-templates
select="node()[not(self::s:param)]"/>
</xsl:copy>
</xsl:template>
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/genMessageTemplates.xsl
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/genMessageTemplates.xsl?rev=981100&r1=981099&r2=981100&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/genMessageTemplates.xsl
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/genMessageTemplates.xsl
Sat Jul 31 22:34:10 2010
@@ -22,9 +22,21 @@
xmlns:c="http://commons.apache.org/scxml-js"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="1.0">
+
+ <xsl:import href="../../util/xml-to-string.xsl"/>
+
<xsl:output method="text"/>
- <xsl:template match="send">
+ <!--
+ <xsl:template match="/">
+ <TestElement>
+ <xsl:apply-templates mode="escape"/>
+ </TestElement>
+ </xsl:template>
+ -->
+
+ <!--
+ <xsl:template match="s:send">
<xsl:text>send(</xsl:text>
<xsl:apply-templates select="c:messageTemplate"/>,
<xsl:text>'</xsl:text><xsl:value-of
select="@target"/><xsl:text>'</xsl:text>
@@ -32,13 +44,13 @@
</xsl:template>
<xsl:template match="c:messageTemplate">
- <xsl:text>return '</xsl:text><xsl:apply-templates
select="*"/> <xsl:text>'</xsl:text>
+ <xsl:text>return '</xsl:text><xsl:apply-templates
mode="escape"/> <xsl:text>'</xsl:text>
</xsl:template>
<xsl:template match="c:name">
<xsl:text>' + </xsl:text>
<xsl:value-of select="@name"/>
- <xsl:text> + apos;</xsl:text>
+ <xsl:text> + '</xsl:text>
</xsl:template>
<xsl:template match="c:param">
@@ -47,51 +59,168 @@
<xsl:if test="@expr">
|| <xsl:value-of select="@expr"/>
</xsl:if>
- <xsl:text> + apos;</xsl:text>
+ <xsl:text> + '</xsl:text>
</xsl:template>
-
- <!-- from:
http://stackoverflow.com/questions/1162352/converting-xml-to-escaped-text-in-xslt
-->
- <xsl:template match="*" mode="escape">
- <!-- Begin opening tag -->
- <xsl:text><</xsl:text>
- <xsl:value-of select="name()"/>
-
- <!-- Namespaces -->
- <xsl:for-each select="namespace::*">
- <xsl:text> xmlns</xsl:text>
- <xsl:if test="name() != ''">
- <xsl:text>:</xsl:text>
- <xsl:value-of select="name()"/>
- </xsl:if>
- <xsl:text>='</xsl:text>
- <xsl:call-template name="escape-xml">
- <xsl:with-param name="text" select="."/>
- </xsl:call-template>
- <xsl:text>'</xsl:text>
- </xsl:for-each>
-
- <!-- Attributes -->
- <xsl:for-each select="@*">
- <xsl:text> </xsl:text>
- <xsl:value-of select="name()"/>
- <xsl:text>='</xsl:text>
- <xsl:call-template name="escape-xml">
- <xsl:with-param name="text" select="."/>
- </xsl:call-template>
- <xsl:text>'</xsl:text>
- </xsl:for-each>
-
- <!-- End opening tag -->
- <xsl:text>></xsl:text>
-
- <!-- Content (child elements, text nodes, and PIs) -->
- <xsl:apply-templates select="node()" mode="escape" />
-
- <!-- Closing tag -->
- <xsl:text></</xsl:text>
- <xsl:value-of select="name()"/>
- <xsl:text>></xsl:text>
+ -->
+
+ <xsl:template match="/">
+ <xsl:apply-templates select="//s:send"/>
</xsl:template>
-
-
+
+ <xsl:template match="s:send">
+ <!-- TODO: switch based on whether send is internal.
+ the code so far is only for external -->
+
+ <xsl:variable name="eventParamValue">
+ <xsl:choose>
+ <xsl:when test="@event">
+ "<xsl:value-of
select="@event"/>"
+ </xsl:when>
+ <xsl:when test="@eventexpr">
+ <xsl:value-of select="@eventexpr"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- TODO: move into constant variable
-->
+ "external.event"
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+
+ <xsl:variable name="targetParamValue">
+ <xsl:choose>
+ <xsl:when test="@target">
+ "<xsl:value-of
select="@target"/>"
+ </xsl:when>
+ <xsl:when test="@targetexpr">
+ <xsl:value-of select="@targetexpr"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message terminate="yes">
+ You must specify a @target or
@targetexpr on a send element.
+ </xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+
+ <xsl:variable name="typeParamValue">
+ <xsl:choose>
+ <xsl:when test="@type">
+ "<xsl:value-of
select="@type"/>"
+ </xsl:when>
+ <xsl:when test="@typeexpr">
+ <xsl:value-of select="@typeexpr"/>
+ </xsl:when>
+ <xsl:otherwise>
+ "scxml"
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+
+ <xsl:variable name="idParamValue">
+ <xsl:choose>
+ <xsl:when test="@id">
+ "<xsl:value-of select="@id"/>"
+ </xsl:when>
+ <xsl:when test="@idlocation">
+ <xsl:value-of select="@idlocation"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- empty node-set? empty string?-->
+ ""
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+
+ <xsl:variable name="delayParamValue">
+ <xsl:choose>
+ <xsl:when test="@delay">
+ "<xsl:value-of
select="@delay"/>"
+ </xsl:when>
+ <xsl:when test="@delayexpr">
+ <xsl:value-of select="@delayexpr"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- empty node-set? empty string?-->
+ ""
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="hintsParamValue">
+ <xsl:choose>
+ <xsl:when test="@hints">
+ "<xsl:value-of
select="@hints"/>"
+ </xsl:when>
+ <xsl:when test="@hintsexpr">
+ <xsl:value-of select="@hintsexpr"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- empty node-set? empty string?-->
+ ""
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="payload">
+ <xsl:choose>
+ <xsl:when test="s:content">
+ <!-- serialize to js-safe string -->
+ '<xsl:apply-templates
select="s:content"/>'
+ </xsl:when>
+ <xsl:otherwise>
+ {
+ <xsl:for-each select="c:namelist/c:name
| s:param">
+ <xsl:variable name="name">
+ <xsl:choose>
+ <xsl:when
test="@name">
+
<xsl:value-of select="@name"/>
+ </xsl:when>
+ <xsl:otherwise>
+
<xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:value-of select="$name" />
: <xsl:value-of select="$name" />
+ <xsl:if test="@expr">
+ || <xsl:value-of
select="@expr"/>
+ </xsl:if>
+ <xsl:if test="not(position() =
last())">
+ ,
+ </xsl:if>
+ </xsl:for-each>
+ }
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:text>send(</xsl:text>
+ <xsl:value-of select="$targetParamValue"/>,
+ {
+ $event : <xsl:value-of
select="$eventParamValue"/>,
+ $target : <xsl:value-of
select="$targetParamValue"/>,
+ $type : <xsl:value-of
select="$typeParamValue"/>,
+ $sendid : <xsl:value-of
select="$idParamValue"/>,
+ $delay : <xsl:value-of
select="$delayParamValue"/>,
+ $hints : <xsl:value-of
select="$hintsParamValue"/>
+
+ },
+ <xsl:value-of select="$payload"/>
+ <xsl:text>)</xsl:text>
+ <xsl:text>

</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="s:content">
+ <xsl:call-template name="escape-js-string">
+ <xsl:with-param name="text">
+ <xsl:for-each select="node()">
+ <xsl:call-template
name="xml-to-string"/>
+ </xsl:for-each>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:template>
+
</xsl:stylesheet>
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/sendToMessageTemplate.xsl
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/sendToMessageTemplate.xsl?rev=981100&r1=981099&r2=981100&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/sendToMessageTemplate.xsl
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/sendToMessageTemplate.xsl
Sat Jul 31 22:34:10 2010
@@ -40,72 +40,52 @@
<xsl:apply-templates select="@*"/>
- <!-- TODO: idlocation -->
+ <!-- TODO: id or idlocation -->
<!-- TODO: hints -->
<c:messageTemplate>
<message
xsi:schemaLocation="http://www.w3.org/2005/07/scxml scxml-message.xsd"
sourcetype="scxml"
sendid="{...@id}">
- <payload>
- <!-- these properties may be
static or dynamic -->
- <xsl:choose>
- <xsl:when test="@type">
- <xsl:attribute
name="type">
-
<xsl:value-of select="@type"/>
- </xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
- <!-- accept it
as a parameter -->
- <c:param
name="type"/>
- </xsl:otherwise>
- </xsl:choose>
-
- <xsl:choose>
- <xsl:when test="@event">
- <xsl:attribute
name="name">
-
<xsl:value-of select="@event"/>
- </xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
- <!-- accept it
as a parameter -->
- <c:param
name="event"/>
- </xsl:otherwise>
- </xsl:choose>
-
- <xsl:choose>
- <xsl:when
test="@target">
- <xsl:attribute
name="target">
-
<xsl:value-of select="@target"/>
- </xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
- <!-- accept it
as a parameter -->
- <c:param
name="target"/>
- </xsl:otherwise>
- </xsl:choose>
-
- <!-- grab all of the things
that might be properties -->
- <xsl:choose>
- <xsl:when
test="content">
-
<xsl:apply-templates select="content"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:for-each
select="c:namelist/c:name">
-
<property name="{.}">
-
<c:param name="{.}"/>
-
</property>
- </xsl:for-each>
- <xsl:for-each
select="param/@name">
-
<property name="{.}">
-
<c:name name="{.}"/>
-
</property>
- </xsl:for-each>
-
-
- </xsl:otherwise>
- </xsl:choose>
- </payload>
+
+ <!-- these properties may be static or
dynamic -->
+
+ <xsl:if test="@type">
+ <xsl:attribute name="type">
+ <xsl:value-of
select="@type"/>
+ </xsl:attribute>
+ </xsl:if>
+
+ <xsl:if test="@event">
+ <xsl:attribute name="name">
+ <xsl:value-of
select="@event"/>
+ </xsl:attribute>
+ </xsl:if>
+
+ <xsl:if test="@target">
+ <xsl:attribute name="target">
+ <xsl:value-of
select="@target"/>
+ </xsl:attribute>
+ </xsl:if>
+
+ <xsl:if test="s:content or
c:namelist/c:name or s:param">
+ <payload>
+ <!-- grab all of the
things that might be properties -->
+ <xsl:choose>
+ <xsl:when
test="s:content">
+
<xsl:apply-templates select="s:content"/>
+ </xsl:when>
+ <xsl:otherwise>
+
<xsl:for-each select="c:namelist/c:name">
+
<property name="{.}"><c:param name="{.}"/></property>
+
</xsl:for-each>
+
<xsl:for-each select="s:param/@name">
+
<property name="{.}"><c:name name="{.}"/></property>
+
</xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ </payload>
+ </xsl:if>
</message>
</c:messageTemplate>
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/splitNamelist.xsl
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/splitNamelist.xsl?rev=981100&r1=981099&r2=981100&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/splitNamelist.xsl
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/splitNamelist.xsl
Sat Jul 31 22:34:10 2010
@@ -33,13 +33,16 @@
<xsl:template match="s:send">
+ <xsl:variable name="normalizedNamelist"
select="normalize-space(@namelist)"/>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
- <c:namelist>
- <xsl:call-template
name="namelistAttributeToNodeList">
- <xsl:with-param name="list"
select="@namelist"/>
- </xsl:call-template>
- </c:namelist>
+ <xsl:if test="$normalizedNamelist">
+ <c:namelist>
+ <xsl:call-template
name="namelistAttributeToNodeList">
+ <xsl:with-param name="list"
select="$normalizedNamelist"/>
+ </xsl:call-template>
+ </c:namelist>
+ </xsl:if>
</xsl:copy>
</xsl:template>
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/util/xml-to-string.xsl
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/util/xml-to-string.xsl?rev=981100&r1=981099&r2=981100&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/util/xml-to-string.xsl
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/util/xml-to-string.xsl
Sat Jul 31 22:34:10 2010
@@ -314,4 +314,55 @@ Recent changes:
</xsl:choose>
</xsl:template>
+ <xsl:template name="escape-js-string">
+ <xsl:param name="text"/>
+ <xsl:variable name="slashesEscaped">
+ <xsl:call-template name="replace-string">
+ <xsl:with-param name="text" select="$text"/>
+ <xsl:with-param name="replace" select="'\'"/>
+ <xsl:with-param name="with" select="'\\'"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="apostrophesEscaped">
+ <xsl:call-template name="replace-string">
+ <xsl:with-param name="text" select="$slashesEscaped"/>
+ <xsl:with-param name="replace" select=""'""/>
+ <xsl:with-param name="with" select=""\'""/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="newlinesEscaped">
+ <xsl:call-template name="replace-string">
+ <xsl:with-param name="text" select="$apostrophesEscaped"/>
+ <xsl:with-param name="replace" select="'
'"/>
+ <xsl:with-param name="with" select="'\n'"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:call-template name="escape-dash-dash">
+ <xsl:with-param name="text" select="$newlinesEscaped"/>
+ <xsl:with-param name="replace" select="'--'"/>
+ <xsl:with-param name="with" select='"-' + '-"'/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template name="escape-dash-dash">
+ <xsl:param name="text"/>
+ <xsl:variable name="tempText">
+ <xsl:call-template name="replace-string">
+ <xsl:with-param name="text" select="$text"/>
+ <xsl:with-param name="replace" select="'--'"/>
+ <xsl:with-param name="with" select='"-' + '-"'/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="contains($tempText, '--')">
+ <xsl:call-template name="escape-dash-dash">
+ <xsl:with-param name="text" select="$tempText"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$tempText"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
</xsl:stylesheet>
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/TestSend.xml
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/TestSend.xml?rev=981100&r1=981099&r2=981100&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/TestSend.xml
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/TestSend.xml
Sat Jul 31 22:34:10 2010
@@ -21,7 +21,7 @@
profile="ecmascript">
<initial>
- <transition target="a1"/>
+ <transition target="a"/>
</initial>
<datamodel>
@@ -32,19 +32,19 @@
<!-- given event foo.bar, foo should be selected, and we should end in
state b1-->
<state id="a">
- <transition id="b2" event="t1">
+ <transition target="b" event="t1">
<send target="http://www.google.com"/>
</transition>
</state>
<state id="b">
- <transition id="c" event="t2">
+ <transition target="c" event="t2">
<send target="http://www.google.com" namelist="foo
bar"/>
</transition>
</state>
<state id="c">
- <transition id="d" event="t3">
+ <transition target="d" event="t3">
<!-- namelist foo should take priority over param foo,
default expression in bar should be ignored, as
it's already defined in the data model,
and bat is not defined, so should here use the
value 'default3' -->
@@ -57,7 +57,7 @@
</state>
<state id="d">
- <transition id="e" event="t4">
+ <transition target="e" event="t4">
<!-- try with JSON data -->
<send target="http://www.google.com">
<content><![CDATA[
@@ -72,7 +72,7 @@
</state>
<state id="e">
- <transition id="f" event="t5">
+ <transition target="f" event="t5">
<!-- try it with some arbirary XML content, here a bit
of XSL -->
<send target="http://www.google.com">
<content>
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/test_with_xsltproc.sh
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/test_with_xsltproc.sh?rev=981100&r1=981099&r2=981100&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/test_with_xsltproc.sh
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/test_with_xsltproc.sh
Sat Jul 31 22:34:10 2010
@@ -1,6 +1,7 @@
#!/bin/sh
#cat prefix_events/TestPrefixEvents.xml | \
-cat simple2.xml | \
+cat send/TestSend.xml | \
+#cat kitchen_sink/KitchenSink.xml | \
xsltproc ../src/xslt/ir-compiler/normalizeInitialStates.xsl - | \
xsltproc ../src/xslt/ir-compiler/generateUniqueStateIds.xsl - | \
xsltproc ../src/xslt/ir-compiler/generateUniqueInitialStateIds.xsl - | \
@@ -20,10 +21,16 @@ xsltproc ../src/xslt/ir-compiler/addEven
xsltproc ../src/xslt/ir-compiler/expandStarEvent.xsl - | \
#
xsltproc ../src/xslt/ir-compiler/numberStatesAndTransitions.xsl - | \
+#
+xsltproc ../src/xslt/ir-compiler/external_communications/splitNamelist.xsl - |
\
+xsltproc ../src/xslt/ir-compiler/external_communications/filterParams.xsl - | \
+#xsltproc
../src/xslt/ir-compiler/external_communications/sendToMessageTemplate.xsl - | \
xmlindent > tmp_IR.xml;
+#cat > tmp_IR.xml;
+xsltproc
../src/xslt/ir-compiler/external_communications/genMessageTemplates.xsl
tmp_IR.xml > out.js
#uncomment to compile IR to js
-xsltproc ../build/StateTableStatechartGenerator_combined.xsl tmp_IR.xml >
out.js
+#xsltproc ../build/StateTableStatechartGenerator_combined.xsl tmp_IR.xml >
out.js
#uncomment to prettify js. need to have beautify.js, beautify-cl.js and
beautify-html.js in this directory
#java -cp ../lib/java/js.jar org.mozilla.javascript.tools.shell.Main -debug
beautify-cl.js -i 4 out.js > out_pretty.js