summaryrefslogtreecommitdiffstats
path: root/src/uscxml/transform/ChartToFSM.cpp
diff options
context:
space:
mode:
authorStefan Radomski <sradomski@mintwerk.de>2015-07-08 20:03:03 (GMT)
committerStefan Radomski <sradomski@mintwerk.de>2015-07-08 20:03:03 (GMT)
commit57ba362eae6e8209cf560555fd4cc4bb76dbe2a1 (patch)
tree00a2e2c5fd6993a5ee118df147cae3ef6e9cca9a /src/uscxml/transform/ChartToFSM.cpp
parentf02d7e5919f16d8396839fcff1e0588d6ccf3004 (diff)
downloaduscxml-57ba362eae6e8209cf560555fd4cc4bb76dbe2a1.zip
uscxml-57ba362eae6e8209cf560555fd4cc4bb76dbe2a1.tar.gz
uscxml-57ba362eae6e8209cf560555fd4cc4bb76dbe2a1.tar.bz2
done.event bug and prolog tests
Fixed the done.event bug and added first prolog transformed IRP tests
Diffstat (limited to 'src/uscxml/transform/ChartToFSM.cpp')
-rw-r--r--src/uscxml/transform/ChartToFSM.cpp35
1 files changed, 17 insertions, 18 deletions
diff --git a/src/uscxml/transform/ChartToFSM.cpp b/src/uscxml/transform/ChartToFSM.cpp
index ef59d84..fd7491c 100644
--- a/src/uscxml/transform/ChartToFSM.cpp
+++ b/src/uscxml/transform/ChartToFSM.cpp
@@ -412,12 +412,12 @@ void ChartToFSM::cancelInvoke(const Arabica::DOM::Element<std::string>& element)
_currGlobalTransition->hasExecutableContent = true;
}
-void ChartToFSM::internalDoneSend(const Arabica::DOM::Element<std::string>& state) {
+void ChartToFSM::internalDoneSend(const Arabica::DOM::Element<std::string>& state, const Arabica::DOM::Element<std::string>& doneData) {
if (!isState(state))
return;
- if (parentIsScxmlState(state))
- return;
+// if (parentIsScxmlState(state))
+// return;
// return;
// std::cerr << "internalDoneSend: " << state << std::endl;
@@ -431,22 +431,21 @@ void ChartToFSM::internalDoneSend(const Arabica::DOM::Element<std::string>& stat
onentry.appendChild(raise);
- Arabica::XPath::NodeSet<std::string> doneDatas = filterChildElements(_nsInfo.xmlNSPrefix + "donedata", state);
- if (doneDatas.size() > 0) {
- Arabica::DOM::Node<std::string> doneData = doneDatas[0];
- Arabica::XPath::NodeSet<std::string> contents = filterChildElements(_nsInfo.xmlNSPrefix + "content", doneDatas[0]);
- if (contents.size() > 0) {
- Node<std::string> imported = _flatDoc.importNode(contents[0], true);
- raise.appendChild(imported);
- }
- Arabica::XPath::NodeSet<std::string> params = filterChildElements(_nsInfo.xmlNSPrefix + "param", doneDatas[0]);
- if (params.size() > 0) {
- Node<std::string> imported = _flatDoc.importNode(params[0], true);
- raise.appendChild(imported);
- }
- }
+ if (doneData) {
+ Arabica::XPath::NodeSet<std::string> contents = filterChildElements(_nsInfo.xmlNSPrefix + "content", doneData);
+ if (contents.size() > 0) {
+ Node<std::string> imported = _flatDoc.importNode(contents[0], true);
+ raise.appendChild(imported);
+ }
+ Arabica::XPath::NodeSet<std::string> params = filterChildElements(_nsInfo.xmlNSPrefix + "param", doneData);
+ if (params.size() > 0) {
+ Node<std::string> imported = _flatDoc.importNode(params[0], true);
+ raise.appendChild(imported);
+ }
+ }
+
- raise.setAttribute("event", "done.state." + ATTR_CAST(state.getParentNode(), "id")); // parent?!
+ raise.setAttribute("event", "done.state." + ATTR_CAST(state, "id")); // parent?!
GlobalTransition::Action action;
action.raiseDone = onentry; // HERE!