summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2013-04-14 08:43:05 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2013-04-14 08:43:05 (GMT)
commit01e7e16d34b23b1198455809860abe4e43d9606a (patch)
tree8b184a60e812a2cd835d15cb304d6a46792ca9e3
parenta22c9ab9c1a72bee6802dc8ada771930253f140b (diff)
downloaduscxml-01e7e16d34b23b1198455809860abe4e43d9606a.zip
uscxml-01e7e16d34b23b1198455809860abe4e43d9606a.tar.gz
uscxml-01e7e16d34b23b1198455809860abe4e43d9606a.tar.bz2
Apps working again
-rw-r--r--CMakeLists.txt20
-rw-r--r--apps/samples/server-push/server-push.scxml14
-rw-r--r--apps/samples/vrml/vrml-server.scxml35
-rw-r--r--contrib/ctest/run-tests.vbs3
-rw-r--r--src/uscxml/Factory.cpp4
-rw-r--r--src/uscxml/Interpreter.cpp3
-rw-r--r--src/uscxml/interpreter/InterpreterDraft6.cpp12
-rw-r--r--src/uscxml/plugins/element/postpone/PostponeElement.cpp2
-rw-r--r--src/uscxml/plugins/element/respond/RespondElement.cpp (renamed from src/uscxml/plugins/element/response/ResponseElement.cpp)34
-rw-r--r--src/uscxml/plugins/element/respond/RespondElement.h (renamed from src/uscxml/plugins/element/response/ResponseElement.h)16
-rw-r--r--test/src/test-url.cpp6
11 files changed, 75 insertions, 74 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 05ecd83..fea1b5b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -538,21 +538,21 @@ else()
endif()
-# Response element
+# Respond element
-file(GLOB_RECURSE RESPONSE_ELEMENT
- src/uscxml/plugins/element/response/*.cpp
- src/uscxml/plugins/element/response/*.h
+file(GLOB_RECURSE RESPOND_ELEMENT
+ src/uscxml/plugins/element/respond/*.cpp
+ src/uscxml/plugins/element/respond/*.h
)
-source_group("Element\\response" FILES ${RESPONSE_ELEMENT})
+source_group("Element\\respond" FILES ${RESPOND_ELEMENT})
if (BUILD_AS_PLUGINS)
add_library(
- element_response SHARED
- ${RESPONSE_ELEMENT})
- target_link_libraries(element_response uscxml)
- set_target_properties(element_response PROPERTIES FOLDER "Plugin Element")
+ element_respond SHARED
+ ${RESPOND_ELEMENT})
+ target_link_libraries(element_respond uscxml)
+ set_target_properties(element_respond PROPERTIES FOLDER "Plugin Element")
else()
- list (APPEND USCXML_FILES ${RESPONSE_ELEMENT})
+ list (APPEND USCXML_FILES ${RESPOND_ELEMENT})
endif()
diff --git a/apps/samples/server-push/server-push.scxml b/apps/samples/server-push/server-push.scxml
index 4193560..a9d231e 100644
--- a/apps/samples/server-push/server-push.scxml
+++ b/apps/samples/server-push/server-push.scxml
@@ -17,27 +17,27 @@
<!-- XHR CORS preflight response -->
<transition event="http.options" target="idle">
<script>dump(_event);</script>
- <response status="200" requestexpr="_event.origin">
+ <respond status="200" to="_event.origin">
<header name="Access-Control-Allow-Origin" value="*" />
<header name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS" />
<header name="Access-Control-Allow-Headers" value="X-Requested-With, Content-Type" />
- </response>
+ </respond>
</transition>
<transition event="http.post" target="idle">
<if cond="_event.name.endsWith('postponed')">
<!-- This is an event we postponed before the heartbeat, respond -->
- <response requestexpr="_event.origin">
+ <respond to="_event.origin">
<content>This is awesome!</content>
- </response>
- <else />
+ </respond>
+ <else />
<!-- Postpone until the heartbeat is emitted and send all events again -->
<postpone until="_event.name == 'heartbeat.1s'" chaining="true" />
</if>
</transition>
<transition event="http.get">
- <response requestexpr="_event.origin">
+ <respond to="_event.origin">
<content>
<![CDATA[
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
@@ -74,7 +74,7 @@
</html>
]]>
</content>
- </response>
+ </respond>
</transition>
</state>
diff --git a/apps/samples/vrml/vrml-server.scxml b/apps/samples/vrml/vrml-server.scxml
index 0d6517c..6f376e8 100644
--- a/apps/samples/vrml/vrml-server.scxml
+++ b/apps/samples/vrml/vrml-server.scxml
@@ -255,6 +255,9 @@
<!-- Idle here -->
<state id="idle">
+ <!--onentry>
+ <log expr="_event" />
+ </onentry -->
<transition event="http.get" target="idle" cond="
_event.data.pathComponent.length >= 2 &amp;&amp;
_event.data.pathComponent[_event.data.pathComponent.length - 1].indexOf('.') !== -1">
@@ -275,19 +278,19 @@
<script>
//print("Sending " + processed[_event['fileStruct'].key][_event['fileStruct'].format].path + "\n");
</script>
- <response status="200" requestexpr="_event.origin">
+ <respond status="200" to="_event.origin">
<header name="Connection" value="close" />
<header name="Access-Control-Allow-Origin" value="*" />
<content fileexpr="processed[_event['fileStruct'].key][_event['fileStruct'].format].path" />
- </response>
+ </respond>
<else>
<if cond="_event.name.endsWith('postponed')">
<!--
A postponed event we couldn't answer
-->
- <response status="404" requestexpr="_event.origin">
+ <respond status="404" to="_event.origin">
<header name="Connection" value="close" />
- </response>
+ </respond>
<else>
<script>
print("Processing outfile " + _event['dest'] + " from model " + _event['file'] + "\n");
@@ -322,9 +325,9 @@
</if>
<else>
<!-- There is no such model -->
- <response status="404" requestexpr="_event.origin">
+ <respond status="404" to="_event.origin">
<header name="Connection" value="close" />
- </response>
+ </respond>
</else>
</if>
</transition>
@@ -336,58 +339,58 @@
_event.data.pathComponent.length == 2 &amp;&amp;
_event.data.pathComponent[1] === 'models'">
<script>//dump(_event)</script>
- <response status="200" requestexpr="_event.origin">
+ <respond status="200" to="_event.origin">
<header name="Connection" value="close" />
<header name="Content-Type" value="application/json" />
<header name="Access-Control-Allow-Origin" value="*" />
<content expr="models" />
- </response>
+ </respond>
</transition>
<transition event="http.get" target="idle" cond="
_event.data.pathComponent.length == 2 &amp;&amp;
_event.data.pathComponent[1] === 'processed'">
<script>//dump(_event)</script>
- <response status="200" requestexpr="_event.origin">
+ <respond status="200" to="_event.origin">
<header name="Connection" value="close" />
<header name="Content-Type" value="application/json" />
<header name="Access-Control-Allow-Origin" value="*" />
<content expr="processed" />
- </response>
+ </respond>
</transition>
<transition event="http.get" target="idle" cond="
_event.data.pathComponent.length == 2 &amp;&amp;
_event.data.pathComponent[1] === 'wrls'">
<script>//dump(_event)</script>
- <response status="200" requestexpr="_event.origin">
+ <respond status="200" to="_event.origin">
<header name="Connection" value="close" />
<header name="Content-Type" value="application/json" />
<header name="Access-Control-Allow-Origin" value="*" />
<content expr="wrls" />
- </response>
+ </respond>
</transition>
<!-- request for topmost list of all files -->
<transition event="http.get" target="idle" cond="
_event.data.pathComponent.length == 1">
<script>//dump(_event);</script>
- <response status="200" requestexpr="_event.origin">
+ <respond status="200" to="_event.origin">
<header name="Connection" value="close" />
<header name="Content-Type" value="application/json" />
<header name="Access-Control-Allow-Origin" value="*" />
<content expr="overviewList()" />
- </response>
+ </respond>
</transition>
<!-- XHR CORS preflight response -->
<transition event="http.options" target="idle">
<script>dump(_event);</script>
- <response status="200" requestexpr="_event.origin">
+ <respond status="200" to="_event.origin">
<header name="Access-Control-Allow-Origin" value="*" />
<header name="Access-Control-Allow-Methods" value="GET, OPTIONS" />
<header name="Access-Control-Allow-Headers" value="X-Requested-With" />
- </response>
+ </respond>
</transition>
</state>
diff --git a/contrib/ctest/run-tests.vbs b/contrib/ctest/run-tests.vbs
index 66e187b..03e2774 100644
--- a/contrib/ctest/run-tests.vbs
+++ b/contrib/ctest/run-tests.vbs
@@ -79,10 +79,9 @@ if (CTEST_SUBMIT_TYPE = "Continuous") Then
End If
shell.CurrentDirectory = TEST_DIR
-Set exec = shell.Exec("CMD /S /C ctest -VV --timeout 100 -S " + TESTFILE + " 2>&1")
+Set exec = shell.Exec("CMD /S /K ctest -VV --timeout 100 -S " + TESTFILE + " 2>&1")
Do While exec.Status = 0
WScript.Sleep 10
WScript.StdOut.Write(exec.StdOut.ReadLine() & vbCRLF)
' WScript.StdErr.Write(exec.StdErr.ReadLine())
Loop
-WScript.Sleep 1000000 \ No newline at end of file
diff --git a/src/uscxml/Factory.cpp b/src/uscxml/Factory.cpp
index c74196a..76da139 100644
--- a/src/uscxml/Factory.cpp
+++ b/src/uscxml/Factory.cpp
@@ -52,7 +52,7 @@
# include "uscxml/plugins/element/fetch/FetchElement.h"
-# include "uscxml/plugins/element/response/ResponseElement.h"
+# include "uscxml/plugins/element/respond/RespondElement.h"
# include "uscxml/plugins/element/postpone/PostponeElement.h"
@@ -194,7 +194,7 @@ Factory::Factory() {
registerExecutableContent(element);
}
{
- ResponseElement* element = new ResponseElement();
+ RespondElement* element = new RespondElement();
registerExecutableContent(element);
}
{
diff --git a/src/uscxml/Interpreter.cpp b/src/uscxml/Interpreter.cpp
index 27fd10b..de2b8b5 100644
--- a/src/uscxml/Interpreter.cpp
+++ b/src/uscxml/Interpreter.cpp
@@ -1191,7 +1191,8 @@ void InterpreterImpl::executeContent(const Arabica::DOM::Node<std::string>& cont
if (_executableContent.find(content) == _executableContent.end()) {
execContent = Factory::createExecutableContent(content.getLocalName(), content.getNamespaceURI(), this);
if (!execContent) {
- LOG(ERROR) << "No custom executable content known for " << content.getLocalName() << " in " << content.getNamespaceURI();
+ LOG(ERROR) << "No custom executable content known for '"
+ << content.getLocalName() << "' in namespace '" << content.getNamespaceURI() << "'";
return;
}
_executableContent[content] = execContent;
diff --git a/src/uscxml/interpreter/InterpreterDraft6.cpp b/src/uscxml/interpreter/InterpreterDraft6.cpp
index d3019d9..ef40362 100644
--- a/src/uscxml/interpreter/InterpreterDraft6.cpp
+++ b/src/uscxml/interpreter/InterpreterDraft6.cpp
@@ -379,14 +379,12 @@ bool InterpreterDraft6::isEnabledTransition(const Node<std::string>& transition,
std::vector<std::string> eventNames = tokenizeIdRefs(eventName);
- if (eventNames.size() > 0 && hasConditionMatch(transition)) {
- std::vector<std::string>::iterator eventIter = eventNames.begin();
- while(eventIter != eventNames.end()) {
- if(nameMatch(*eventIter, event)) {
- return true;
- }
- eventIter++;
+ std::vector<std::string>::iterator eventIter = eventNames.begin();
+ while(eventIter != eventNames.end()) {
+ if(nameMatch(*eventIter, event) && hasConditionMatch(transition)) {
+ return true;
}
+ eventIter++;
}
return false;
}
diff --git a/src/uscxml/plugins/element/postpone/PostponeElement.cpp b/src/uscxml/plugins/element/postpone/PostponeElement.cpp
index 54f2499..3c1d1b8 100644
--- a/src/uscxml/plugins/element/postpone/PostponeElement.cpp
+++ b/src/uscxml/plugins/element/postpone/PostponeElement.cpp
@@ -112,7 +112,7 @@ void PostponeElement::Resubmitter::onStableConfiguration(Interpreter interpreter
// LOG(INFO) << " -> is TRUE";
eventIter->event.name += ".postponed";
interpreter.receive(eventIter->event, true);
- _postponedEvents.erase(eventIter);
+ _postponedEvents.erase(eventIter++);
dispatched = true;
}
// LOG(INFO) << " -> is FALSE";
diff --git a/src/uscxml/plugins/element/response/ResponseElement.cpp b/src/uscxml/plugins/element/respond/RespondElement.cpp
index 675bc1e..3c47b83 100644
--- a/src/uscxml/plugins/element/response/ResponseElement.cpp
+++ b/src/uscxml/plugins/element/respond/RespondElement.cpp
@@ -1,4 +1,4 @@
-#include "ResponseElement.h"
+#include "RespondElement.h"
#include "uscxml/plugins/invoker/http/HTTPServletInvoker.h"
#include <glog/logging.h>
@@ -11,35 +11,35 @@ namespace uscxml {
#ifdef BUILD_AS_PLUGINS
PLUMA_CONNECTOR
bool connect(pluma::Host& host) {
- host.add( new ResponseElementProvider() );
+ host.add( new RespondElementProvider() );
return true;
}
#endif
-boost::shared_ptr<ExecutableContentImpl> ResponseElement::create(InterpreterImpl* interpreter) {
- boost::shared_ptr<ResponseElement> invoker = boost::shared_ptr<ResponseElement>(new ResponseElement());
+boost::shared_ptr<ExecutableContentImpl> RespondElement::create(InterpreterImpl* interpreter) {
+ boost::shared_ptr<RespondElement> invoker = boost::shared_ptr<RespondElement>(new RespondElement());
invoker->_interpreter = interpreter;
return invoker;
}
-void ResponseElement::enterElement(const Arabica::DOM::Node<std::string>& node) {
+void RespondElement::enterElement(const Arabica::DOM::Node<std::string>& node) {
// try to get the request id
- if (!HAS_ATTR(node, "request") && !HAS_ATTR(node, "requestexpr")) {
- LOG(ERROR) << "Response element requires request or requestexpr";
+ if (!HAS_ATTR(node, "to")) {
+ LOG(ERROR) << "Respond element requires to attribute";
return;
}
- if (HAS_ATTR(node, "requestexpr") && !_interpreter->getDataModel()) {
- LOG(ERROR) << "Response element with requestexpr requires datamodel";
+ if (HAS_ATTR(node, "to") && !_interpreter->getDataModel()) {
+ LOG(ERROR) << "Respond element with to requires datamodel";
return;
}
- std::string requestId = (HAS_ATTR(node, "request") ? ATTR(node, "request") : _interpreter->getDataModel().evalAsString(ATTR(node, "requestexpr")));
+ std::string requestId = _interpreter->getDataModel().evalAsString(ATTR(node, "to"));
// try to get the request object
InterpreterServlet* servlet = _interpreter->getHTTPServlet();
tthread::lock_guard<tthread::recursive_mutex> lock(servlet->getMutex());
if (servlet->getRequests().find(requestId) == servlet->getRequests().end()) {
- LOG(ERROR) << "No matching HTTP request for response element";
+ LOG(ERROR) << "No matching HTTP request for respond element";
return;
}
@@ -52,7 +52,7 @@ void ResponseElement::enterElement(const Arabica::DOM::Node<std::string>& node)
// get the status or default to 200
std::string statusStr = (HAS_ATTR(node, "status") ? ATTR(node, "status") : "200");
if (!isNumeric(statusStr.c_str(), 10)) {
- LOG(ERROR) << "Response element with non-numeric status " << statusStr;
+ LOG(ERROR) << "Respond element with non-numeric status " << statusStr;
return;
}
httpReply.status = strTo<int>(statusStr);;
@@ -66,7 +66,7 @@ void ResponseElement::enterElement(const Arabica::DOM::Node<std::string>& node)
std::string contentValue = _interpreter->getDataModel().evalAsString(ATTR(contents[0], "expr"));
httpReply.content = contentValue;
} catch (Event e) {
- LOG(ERROR) << "Syntax error with expr in content child of response element:" << std::endl << e << std::endl;
+ LOG(ERROR) << "Syntax error with expr in content child of Respond element:" << std::endl << e << std::endl;
return;
}
} else {
@@ -80,7 +80,7 @@ void ResponseElement::enterElement(const Arabica::DOM::Node<std::string>& node)
try {
file = "file://" + _interpreter->getDataModel().evalAsString(ATTR(contents[0], "fileexpr"));
} catch (Event e) {
- LOG(ERROR) << "Syntax error with fileexpr in content child of response element:" << std::endl << e << std::endl;
+ LOG(ERROR) << "Syntax error with fileexpr in content child of Respond element:" << std::endl << e << std::endl;
return;
}
}
@@ -117,7 +117,7 @@ void ResponseElement::enterElement(const Arabica::DOM::Node<std::string>& node)
try {
name = _interpreter->getDataModel().evalAsString(ATTR(headers[i], "nameexpr"));
} catch (Event e) {
- LOG(ERROR) << "Syntax error with nameexpr in header child of response element:" << std::endl << e << std::endl;
+ LOG(ERROR) << "Syntax error with nameexpr in header child of Respond element:" << std::endl << e << std::endl;
return;
}
} else {
@@ -137,7 +137,7 @@ void ResponseElement::enterElement(const Arabica::DOM::Node<std::string>& node)
try {
value = _interpreter->getDataModel().evalAsString(ATTR(headers[i], "expr"));
} catch (Event e) {
- LOG(ERROR) << "Syntax error with expr in header child of response element:" << std::endl << e << std::endl;
+ LOG(ERROR) << "Syntax error with expr in header child of Respond element:" << std::endl << e << std::endl;
return;
}
} else {
@@ -157,7 +157,7 @@ void ResponseElement::enterElement(const Arabica::DOM::Node<std::string>& node)
servlet->getRequests().erase(requestId);
}
-void ResponseElement::exitElement(const Arabica::DOM::Node<std::string>& node) {
+void RespondElement::exitElement(const Arabica::DOM::Node<std::string>& node) {
}
diff --git a/src/uscxml/plugins/element/response/ResponseElement.h b/src/uscxml/plugins/element/respond/RespondElement.h
index 333dd98..c53d60a 100644
--- a/src/uscxml/plugins/element/response/ResponseElement.h
+++ b/src/uscxml/plugins/element/respond/RespondElement.h
@@ -1,5 +1,5 @@
-#ifndef RESPONSEELEMENT_H_I11KQ39Q
-#define RESPONSEELEMENT_H_I11KQ39Q
+#ifndef RESPONDELEMENT_H_I11KQ39Q
+#define RESPONDELEMENT_H_I11KQ39Q
#include <uscxml/Interpreter.h>
@@ -9,14 +9,14 @@
namespace uscxml {
-class ResponseElement : public ExecutableContentImpl {
+class RespondElement : public ExecutableContentImpl {
public:
- ResponseElement() {}
- virtual ~ResponseElement() {}
+ RespondElement() {}
+ virtual ~RespondElement() {}
boost::shared_ptr<ExecutableContentImpl> create(InterpreterImpl* interpreter);
std::string getLocalName() {
- return "response";
+ return "respond";
}
std::string getNamespace() {
@@ -33,10 +33,10 @@ public:
};
#ifdef BUILD_AS_PLUGINS
-PLUMA_INHERIT_PROVIDER(ResponseElement, ExecutableContentImpl);
+PLUMA_INHERIT_PROVIDER(RespondElement, ExecutableContentImpl);
#endif
}
-#endif /* end of include guard: RESPONSEELEMENT_H_I11KQ39Q */
+#endif /* end of include guard: RESPONDELEMENT_H_I11KQ39Q */
diff --git a/test/src/test-url.cpp b/test/src/test-url.cpp
index 5e8ea02..86fcb9f 100644
--- a/test/src/test-url.cpp
+++ b/test/src/test-url.cpp
@@ -29,9 +29,9 @@ public:
int main(int argc, char** argv) {
{
- Interpreter interpreter = Interpreter::fromURI("https://raw.github.com/tklab-tud/uscxml/master/test/samples/uscxml/test-execution.scxml");
- assert(interpreter);
- interpreter.interpret();
+// Interpreter interpreter = Interpreter::fromURI("https://raw.github.com/tklab-tud/uscxml/master/test/samples/uscxml/test-execution.scxml");
+// assert(interpreter);
+// interpreter.interpret();
}
{