summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2013-03-27 16:05:27 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2013-03-27 16:05:27 (GMT)
commitc0e29f9d4574be340d23c88605bf8868b166f718 (patch)
tree9118eb60caf48830ebbeef70e8b8cf1687735c32
parent83f0b4ecbd83e83b5404afd5cead7a08966495bf (diff)
downloaduscxml-c0e29f9d4574be340d23c88605bf8868b166f718.zip
uscxml-c0e29f9d4574be340d23c88605bf8868b166f718.tar.gz
uscxml-c0e29f9d4574be340d23c88605bf8868b166f718.tar.bz2
Polished PHP interface somewhat
-rw-r--r--contrib/cmake/FindPHP5.cmake3
-rw-r--r--src/bindings/swig/java/CMakeLists.txt1
-rw-r--r--src/bindings/swig/php/CMakeLists.txt5
-rw-r--r--src/bindings/swig/php/test.php31
-rw-r--r--src/bindings/swig/php/uscxml.i7
-rw-r--r--src/bindings/swig/php/uscxmlNativePHP.php443
-rw-r--r--src/uscxml/Interpreter.h4
-rw-r--r--src/uscxml/Message.h216
-rw-r--r--src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp4
-rw-r--r--src/uscxml/plugins/invoker/scxml/USCXMLInvoker.h4
-rw-r--r--test/samples/uscxml/test-invoked.scxml24
11 files changed, 690 insertions, 52 deletions
diff --git a/contrib/cmake/FindPHP5.cmake b/contrib/cmake/FindPHP5.cmake
index 6ad81a5..68e0f68 100644
--- a/contrib/cmake/FindPHP5.cmake
+++ b/contrib/cmake/FindPHP5.cmake
@@ -29,11 +29,12 @@ if (UNIX)
ERROR_VARIABLE PHP_LDFLAGS_errors
RESULT_VARIABLE PHP_LDFLAGS_result)
- set(PHP_ZTS_ENABLED OFF)
execute_process(COMMAND ${PHP_CONFIG} --configure-options
OUTPUT_VARIABLE PHP_CONFIGURE_OPTIONS
ERROR_VARIABLE PHP_CONFIGURE_OPTIONS_errors
RESULT_VARIABLE PHP_CONFIGURE_OPTIONS_result)
+
+ set(PHP_ZTS_ENABLED OFF)
if (PHP_CONFIGURE_OPTIONS MATCHES ".*enable-maintainer-zts.*")
set(PHP_ZTS_ENABLED ON)
endif()
diff --git a/src/bindings/swig/java/CMakeLists.txt b/src/bindings/swig/java/CMakeLists.txt
index a729b8e..b66e3f2 100644
--- a/src/bindings/swig/java/CMakeLists.txt
+++ b/src/bindings/swig/java/CMakeLists.txt
@@ -27,5 +27,6 @@ foreach(JNI_LIBRARY ${JNI_LIBRARIES})
endif()
endforeach()
set_target_properties(uscxmlNativeJava PROPERTIES FOLDER "Bindings")
+set_target_properties(uscxmlNativeJava PROPERTIES COMPILE_FLAGS "-DSWIG")
swig_link_libraries(uscxmlNativeJava uscxml)
diff --git a/src/bindings/swig/php/CMakeLists.txt b/src/bindings/swig/php/CMakeLists.txt
index 17c9465..91c6c36 100644
--- a/src/bindings/swig/php/CMakeLists.txt
+++ b/src/bindings/swig/php/CMakeLists.txt
@@ -45,6 +45,7 @@ if(APPLE)
_zend_register_resource
_zend_rsrc_list_get_rsrc_type
_zend_wrong_param_count
+ _zend_throw_exception
_zval_used_for_init
)
set(PHP_MODULE_CXX_FLAGS
@@ -74,7 +75,9 @@ endif()
if (PHP_ZTS_ENABLED)
# we are only building php bindings for unices anyhow
- set_target_properties(uscxmlNativePHP PROPERTIES COMPILE_FLAGS "-DZTS -DPTHREADS")
+ set_target_properties(uscxmlNativePHP PROPERTIES COMPILE_FLAGS "-DZTS -DPTHREADS -DSWIG")
+else()
+ set_target_properties(uscxmlNativePHP PROPERTIES COMPILE_FLAGS "-DSWIG")
endif()
set_target_properties(uscxmlNativePHP PROPERTIES FOLDER "Bindings")
diff --git a/src/bindings/swig/php/test.php b/src/bindings/swig/php/test.php
index 6a15429..6896ab0 100644
--- a/src/bindings/swig/php/test.php
+++ b/src/bindings/swig/php/test.php
@@ -41,20 +41,31 @@ class MyMonitor extends InterpreterMonitor {
$monitor = new MyMonitor();
-$interpreter = Interpreter::fromURI('https://raw.github.com/tklab-tud/uscxml/master/test/samples/uscxml/test-ecmascript.scxml');
-$interpreter->addMonitor($monitor);
-$interpreter->interpret();
+// $interpreter = Interpreter::fromURI('https://raw.github.com/tklab-tud/uscxml/master/test/samples/uscxml/test-ecmascript.scxml');
+// $interpreter->addMonitor($monitor);
+// $interpreter->interpret();
-$interpreter = Interpreter::fromURI('https://raw.github.com/tklab-tud/uscxml/master/test/samples/uscxml/test-invoked.scxml');
+$interpreter = Interpreter::fromURI('/Users/sradomski/Documents/TK/Code/uscxml/test/samples/uscxml/test-invoked.scxml');
$parentQueue = new ParentQueue();
$interpreter->setParentQueue($parentQueue);
-$interpreter->interpret();
//$interpreter->start();
-
-#while($interpreter->isRunning()) {
+$interpreter->interpret();
+exit();
+while($interpreter->isRunning()) {
$event = $parentQueue->pop();
- print_r($event);
- print(Event_name_get($event) . "\n");
-#}
+ print("Name: " . $event->getName() . "\n");
+ print("Content: " . $event->getContent() . "\n");
+
+ print("Namelist: \n");
+ $namelist = $event->getNameList();
+ print("\tSize: ". $namelist->size() ."\n");
+
+ $keys = $event->getNameListKeys();
+
+ for ($i = 0; $i < $keys->size(); $i++) {
+ print("\t" . $namelist->get($keys->get($i)) . "\n");
+ }
+
+}
?> \ No newline at end of file
diff --git a/src/bindings/swig/php/uscxml.i b/src/bindings/swig/php/uscxml.i
index 54e9f27..6180d05 100644
--- a/src/bindings/swig/php/uscxml.i
+++ b/src/bindings/swig/php/uscxml.i
@@ -1,7 +1,7 @@
%module(directors="1", allprotected="1") uscxmlNativePHP
// import swig typemaps
-%include <std_string.i>
+%include "stl.i"
// macros from cmake
%import "uscxml/config.h"
@@ -40,4 +40,7 @@ void*** tsrm_ls;
%include "../../../uscxml/Interpreter.h"
%include "../../../uscxml/concurrency/BlockingQueue.h"
-%template(ParentQueue) uscxml::concurrency::BlockingQueue<uscxml::Event>;
+%template(ParentQueue) uscxml::concurrency::BlockingQueue<uscxml::SendRequest>;
+%template(NameList) std::map<std::string, std::string>;
+%template(ParamList) std::vector<std::string>;
+%template(Params) std::map<std::string, std::vector<std::string> >;
diff --git a/src/bindings/swig/php/uscxmlNativePHP.php b/src/bindings/swig/php/uscxmlNativePHP.php
index 91f6b21..7a63a1a 100644
--- a/src/bindings/swig/php/uscxmlNativePHP.php
+++ b/src/bindings/swig/php/uscxmlNativePHP.php
@@ -94,6 +94,38 @@ class Data {
function toXMLString() {
return Data_toXMLString($this->_cPtr);
}
+
+ function getCompund() {
+ return Data_getCompund($this->_cPtr);
+ }
+
+ function setCompound($compound) {
+ Data_setCompound($this->_cPtr,$compound);
+ }
+
+ function getArray() {
+ return Data_getArray($this->_cPtr);
+ }
+
+ function setArray($array) {
+ Data_setArray($this->_cPtr,$array);
+ }
+
+ function getAtom() {
+ return Data_getAtom($this->_cPtr);
+ }
+
+ function setAtom($atom) {
+ Data_setAtom($this->_cPtr,$atom);
+ }
+
+ function getType() {
+ return Data_getType($this->_cPtr);
+ }
+
+ function setType($type) {
+ Data_setType($this->_cPtr,$type);
+ }
}
class Event {
@@ -138,6 +170,76 @@ class Event {
}
}
+ function getName() {
+ return Event_getName($this->_cPtr);
+ }
+
+ function setName($name) {
+ Event_setName($this->_cPtr,$name);
+ }
+
+ function getType() {
+ return Event_getType($this->_cPtr);
+ }
+
+ function setType($type) {
+ Event_setType($this->_cPtr,$type);
+ }
+
+ function getOrigin() {
+ return Event_getOrigin($this->_cPtr);
+ }
+
+ function setOrigin($origin) {
+ Event_setOrigin($this->_cPtr,$origin);
+ }
+
+ function getOriginType() {
+ return Event_getOriginType($this->_cPtr);
+ }
+
+ function setOriginType($originType) {
+ Event_setOriginType($this->_cPtr,$originType);
+ }
+
+ function getDOM() {
+ return Event_getDOM($this->_cPtr);
+ }
+
+ function setDOM($dom) {
+ Event_setDOM($this->_cPtr,$dom);
+ }
+
+ function getSendId() {
+ return Event_getSendId($this->_cPtr);
+ }
+
+ function setSendId($sendId) {
+ Event_setSendId($this->_cPtr,$sendId);
+ }
+
+ function getInvokeId() {
+ return Event_getInvokeId($this->_cPtr);
+ }
+
+ function setInvokeId($invokeId) {
+ Event_setInvokeId($this->_cPtr,$invokeId);
+ }
+
+ function getData() {
+ $r=Event_getData($this->_cPtr);
+ if (is_resource($r)) {
+ $c=substr(get_resource_type($r), (strpos(get_resource_type($r), '__') ? strpos(get_resource_type($r), '__') + 2 : 3));
+ if (class_exists($c)) return new $c($r);
+ return new Data($r);
+ }
+ return $r;
+ }
+
+ function setData($invokeId) {
+ Event_setData($this->_cPtr,$invokeId);
+ }
+
static function fromXML($xmlString) {
$r=Event_fromXML($xmlString);
if (is_resource($r)) {
@@ -174,6 +276,7 @@ class InvokeRequest extends Event {
}
function __get($var) {
+ if ($var === 'namelist') return new NameList(InvokeRequest_namelist_get($this->_cPtr));
$func = 'InvokeRequest_'.$var.'_get';
if (function_exists($func)) return call_user_func($func,$this->_cPtr);
if ($var === 'thisown') return swig_uscxmlNativePHP_get_newobject($this->_cPtr);
@@ -191,6 +294,78 @@ class InvokeRequest extends Event {
}
}
+ function getType() {
+ return InvokeRequest_getType($this->_cPtr);
+ }
+
+ function setType($type) {
+ InvokeRequest_setType($this->_cPtr,$type);
+ }
+
+ function getSource() {
+ return InvokeRequest_getSource($this->_cPtr);
+ }
+
+ function setSource($src) {
+ InvokeRequest_setSource($this->_cPtr,$src);
+ }
+
+ function getContent() {
+ return InvokeRequest_getContent($this->_cPtr);
+ }
+
+ function setContent($content) {
+ InvokeRequest_setContent($this->_cPtr,$content);
+ }
+
+ function isAutoForwarded() {
+ return InvokeRequest_isAutoForwarded($this->_cPtr);
+ }
+
+ function setAutoForwarded($autoForward) {
+ InvokeRequest_setAutoForwarded($this->_cPtr,$autoForward);
+ }
+
+ function getNameList() {
+ $r=InvokeRequest_getNameList($this->_cPtr);
+ if (is_resource($r)) {
+ $c=substr(get_resource_type($r), (strpos(get_resource_type($r), '__') ? strpos(get_resource_type($r), '__') + 2 : 3));
+ if (class_exists($c)) return new $c($r);
+ return new NameList($r);
+ }
+ return $r;
+ }
+
+ function getNameListKeys() {
+ $r=InvokeRequest_getNameListKeys($this->_cPtr);
+ if (is_resource($r)) {
+ $c=substr(get_resource_type($r), (strpos(get_resource_type($r), '__') ? strpos(get_resource_type($r), '__') + 2 : 3));
+ if (class_exists($c)) return new $c($r);
+ return new ParamList($r);
+ }
+ return $r;
+ }
+
+ function getParams() {
+ $r=InvokeRequest_getParams($this->_cPtr);
+ if (is_resource($r)) {
+ $c=substr(get_resource_type($r), (strpos(get_resource_type($r), '__') ? strpos(get_resource_type($r), '__') + 2 : 3));
+ if (class_exists($c)) return new $c($r);
+ return new Params($r);
+ }
+ return $r;
+ }
+
+ function getParamKeys() {
+ $r=InvokeRequest_getParamKeys($this->_cPtr);
+ if (is_resource($r)) {
+ $c=substr(get_resource_type($r), (strpos(get_resource_type($r), '__') ? strpos(get_resource_type($r), '__') + 2 : 3));
+ if (class_exists($c)) return new $c($r);
+ return new ParamList($r);
+ }
+ return $r;
+ }
+
static function fromXML($xmlString) {
$r=InvokeRequest_fromXML($xmlString);
if (is_resource($r)) {
@@ -227,6 +402,7 @@ class SendRequest extends Event {
}
function __get($var) {
+ if ($var === 'namelist') return new NameList(SendRequest_namelist_get($this->_cPtr));
$func = 'SendRequest_'.$var.'_get';
if (function_exists($func)) return call_user_func($func,$this->_cPtr);
if ($var === 'thisown') return swig_uscxmlNativePHP_get_newobject($this->_cPtr);
@@ -244,6 +420,78 @@ class SendRequest extends Event {
}
}
+ function getTarget() {
+ return SendRequest_getTarget($this->_cPtr);
+ }
+
+ function setTarget($target) {
+ SendRequest_setTarget($this->_cPtr,$target);
+ }
+
+ function getType() {
+ return SendRequest_getType($this->_cPtr);
+ }
+
+ function setType($type) {
+ SendRequest_setType($this->_cPtr,$type);
+ }
+
+ function getDelayMs() {
+ return SendRequest_getDelayMs($this->_cPtr);
+ }
+
+ function setDelayMs($delayMs) {
+ SendRequest_setDelayMs($this->_cPtr,$delayMs);
+ }
+
+ function getContent() {
+ return SendRequest_getContent($this->_cPtr);
+ }
+
+ function setContent($content) {
+ SendRequest_setContent($this->_cPtr,$content);
+ }
+
+ function getNameList() {
+ $r=SendRequest_getNameList($this->_cPtr);
+ if (is_resource($r)) {
+ $c=substr(get_resource_type($r), (strpos(get_resource_type($r), '__') ? strpos(get_resource_type($r), '__') + 2 : 3));
+ if (class_exists($c)) return new $c($r);
+ return new NameList($r);
+ }
+ return $r;
+ }
+
+ function getNameListKeys() {
+ $r=SendRequest_getNameListKeys($this->_cPtr);
+ if (is_resource($r)) {
+ $c=substr(get_resource_type($r), (strpos(get_resource_type($r), '__') ? strpos(get_resource_type($r), '__') + 2 : 3));
+ if (class_exists($c)) return new $c($r);
+ return new ParamList($r);
+ }
+ return $r;
+ }
+
+ function getParams() {
+ $r=SendRequest_getParams($this->_cPtr);
+ if (is_resource($r)) {
+ $c=substr(get_resource_type($r), (strpos(get_resource_type($r), '__') ? strpos(get_resource_type($r), '__') + 2 : 3));
+ if (class_exists($c)) return new $c($r);
+ return new Params($r);
+ }
+ return $r;
+ }
+
+ function getParamKeys() {
+ $r=SendRequest_getParamKeys($this->_cPtr);
+ if (is_resource($r)) {
+ $c=substr(get_resource_type($r), (strpos(get_resource_type($r), '__') ? strpos(get_resource_type($r), '__') + 2 : 3));
+ if (class_exists($c)) return new $c($r);
+ return new ParamList($r);
+ }
+ return $r;
+ }
+
static function fromXML($xmlString) {
$r=SendRequest_fromXML($xmlString);
if (is_resource($r)) {
@@ -641,7 +889,7 @@ class ParentQueue {
}
function __construct($res=null) {
- if (is_resource($res) && get_resource_type($res) === '_p_uscxml__concurrency__BlockingQueueT_uscxml__Event_t') {
+ if (is_resource($res) && get_resource_type($res) === '_p_uscxml__concurrency__BlockingQueueT_uscxml__SendRequest_t') {
$this->_cPtr=$res;
return;
}
@@ -661,7 +909,7 @@ class ParentQueue {
if (is_resource($r)) {
$c=substr(get_resource_type($r), (strpos(get_resource_type($r), '__') ? strpos(get_resource_type($r), '__') + 2 : 3));
if (class_exists($c)) return new $c($r);
- return new Event($r);
+ return new SendRequest($r);
}
return $r;
}
@@ -671,5 +919,196 @@ class ParentQueue {
}
}
+class NameList {
+ public $_cPtr=null;
+ protected $_pData=array();
+
+ function __set($var,$value) {
+ if ($var === 'thisown') return swig_uscxmlNativePHP_alter_newobject($this->_cPtr,$value);
+ $this->_pData[$var] = $value;
+ }
+
+ function __isset($var) {
+ if ($var === 'thisown') return true;
+ return array_key_exists($var, $this->_pData);
+ }
+
+ function __get($var) {
+ if ($var === 'thisown') return swig_uscxmlNativePHP_get_newobject($this->_cPtr);
+ return $this->_pData[$var];
+ }
+
+ function __construct($arg1=null) {
+ if (is_resource($arg1) && get_resource_type($arg1) === '_p_std__mapT_std__string_std__string_t') {
+ $this->_cPtr=$arg1;
+ return;
+ }
+ switch (func_num_args()) {
+ case 0: $this->_cPtr=new_NameList(); break;
+ default: $this->_cPtr=new_NameList($arg1);
+ }
+ }
+
+ function size() {
+ return NameList_size($this->_cPtr);
+ }
+
+ function clear() {
+ NameList_clear($this->_cPtr);
+ }
+
+ function get($key) {
+ return NameList_get($this->_cPtr,$key);
+ }
+
+ function set($key,$x) {
+ NameList_set($this->_cPtr,$key,$x);
+ }
+
+ function del($key) {
+ NameList_del($this->_cPtr,$key);
+ }
+
+ function has_key($key) {
+ return NameList_has_key($this->_cPtr,$key);
+ }
+
+ function is_empty() {
+ return NameList_is_empty($this->_cPtr);
+ }
+}
+
+class ParamList {
+ public $_cPtr=null;
+ protected $_pData=array();
+
+ function __set($var,$value) {
+ if ($var === 'thisown') return swig_uscxmlNativePHP_alter_newobject($this->_cPtr,$value);
+ $this->_pData[$var] = $value;
+ }
+
+ function __isset($var) {
+ if ($var === 'thisown') return true;
+ return array_key_exists($var, $this->_pData);
+ }
+
+ function __get($var) {
+ if ($var === 'thisown') return swig_uscxmlNativePHP_get_newobject($this->_cPtr);
+ return $this->_pData[$var];
+ }
+
+ function __construct($n=null) {
+ if (is_resource($n) && get_resource_type($n) === '_p_std__vectorT_std__string_t') {
+ $this->_cPtr=$n;
+ return;
+ }
+ switch (func_num_args()) {
+ case 0: $this->_cPtr=new_ParamList(); break;
+ default: $this->_cPtr=new_ParamList($n);
+ }
+ }
+
+ function size() {
+ return ParamList_size($this->_cPtr);
+ }
+
+ function capacity() {
+ return ParamList_capacity($this->_cPtr);
+ }
+
+ function reserve($n) {
+ ParamList_reserve($this->_cPtr,$n);
+ }
+
+ function clear() {
+ ParamList_clear($this->_cPtr);
+ }
+
+ function push($x) {
+ ParamList_push($this->_cPtr,$x);
+ }
+
+ function is_empty() {
+ return ParamList_is_empty($this->_cPtr);
+ }
+
+ function pop() {
+ return ParamList_pop($this->_cPtr);
+ }
+
+ function get($i) {
+ return ParamList_get($this->_cPtr,$i);
+ }
+
+ function set($i,$val) {
+ ParamList_set($this->_cPtr,$i,$val);
+ }
+}
+
+class Params {
+ public $_cPtr=null;
+ protected $_pData=array();
+
+ function __set($var,$value) {
+ if ($var === 'thisown') return swig_uscxmlNativePHP_alter_newobject($this->_cPtr,$value);
+ $this->_pData[$var] = $value;
+ }
+
+ function __isset($var) {
+ if ($var === 'thisown') return true;
+ return array_key_exists($var, $this->_pData);
+ }
+
+ function __get($var) {
+ if ($var === 'thisown') return swig_uscxmlNativePHP_get_newobject($this->_cPtr);
+ return $this->_pData[$var];
+ }
+
+ function __construct($arg1=null) {
+ if (is_resource($arg1) && get_resource_type($arg1) === '_p_std__mapT_std__string_std__vectorT_std__string_t_t') {
+ $this->_cPtr=$arg1;
+ return;
+ }
+ switch (func_num_args()) {
+ case 0: $this->_cPtr=new_Params(); break;
+ default: $this->_cPtr=new_Params($arg1);
+ }
+ }
+
+ function size() {
+ return Params_size($this->_cPtr);
+ }
+
+ function clear() {
+ Params_clear($this->_cPtr);
+ }
+
+ function get($key) {
+ $r=Params_get($this->_cPtr,$key);
+ if (is_resource($r)) {
+ $c=substr(get_resource_type($r), (strpos(get_resource_type($r), '__') ? strpos(get_resource_type($r), '__') + 2 : 3));
+ if (class_exists($c)) return new $c($r);
+ return new ParamList($r);
+ }
+ return $r;
+ }
+
+ function set($key,$x) {
+ Params_set($this->_cPtr,$key,$x);
+ }
+
+ function del($key) {
+ Params_del($this->_cPtr,$key);
+ }
+
+ function has_key($key) {
+ return Params_has_key($this->_cPtr,$key);
+ }
+
+ function is_empty() {
+ return Params_is_empty($this->_cPtr);
+ }
+}
+
?>
diff --git a/src/uscxml/Interpreter.h b/src/uscxml/Interpreter.h
index d75241e..5d29eb6 100644
--- a/src/uscxml/Interpreter.h
+++ b/src/uscxml/Interpreter.h
@@ -132,7 +132,7 @@ public:
DataModel getDataModel() {
return _dataModel;
}
- void setParentQueue(uscxml::concurrency::BlockingQueue<Event>* parentQueue) {
+ void setParentQueue(uscxml::concurrency::BlockingQueue<SendRequest>* parentQueue) {
_parentQueue = parentQueue;
}
std::string getXPathPrefix() {
@@ -247,7 +247,7 @@ protected:
std::list<Event > _internalQueue;
uscxml::concurrency::BlockingQueue<Event> _externalQueue;
- uscxml::concurrency::BlockingQueue<Event>* _parentQueue;
+ uscxml::concurrency::BlockingQueue<SendRequest>* _parentQueue;
DelayedEventQueue* _sendQueue;
Event _currEvent;
diff --git a/src/uscxml/Message.h b/src/uscxml/Message.h
index c109063..006d515 100644
--- a/src/uscxml/Message.h
+++ b/src/uscxml/Message.h
@@ -3,6 +3,7 @@
#include <map>
#include <list>
+#include <set>
#include <vector>
#include <string>
@@ -39,6 +40,23 @@ public:
return ss.str();
}
+ std::map<std::string, Data> getCompund() { return compound; }
+ void setCompound(const std::map<std::string, Data>& compound) { this->compound = compound; }
+
+ std::list<Data> getArray() { return array; }
+ void setArray(const std::list<Data>& array) { this->array = array; }
+
+ std::string getAtom() { return atom; }
+ void setAtom(const std::string& atom) { this->atom = atom; }
+
+ Type getType() { return type; }
+ void setType(const Type type) { this->type = type; }
+
+
+#ifdef SWIGIMPORTED
+protected:
+#endif
+
std::map<std::string, Data> compound;
std::list<Data> array;
std::string atom;
@@ -66,14 +84,29 @@ public:
return this < &other;
}
- std::string name;
- Type type;
- std::string origin;
- std::string origintype;
- Arabica::DOM::Node<std::string> dom;
- std::string sendid;
- std::string invokeid;
- Data data;
+ std::string getName() { return name; }
+ void setName(const std::string& name) { this->name = name; }
+
+ Type getType() { return type; }
+ void setType(const Type type) { this->type = type; }
+
+ std::string getOrigin() { return origin; }
+ void setOrigin(const std::string& origin) { this->origin = origin; }
+
+ std::string getOriginType() { return origintype; }
+ void setOriginType(const std::string& originType) { this->origintype = originType; }
+
+ Arabica::DOM::Node<std::string> getDOM() { return dom; }
+ void setDOM(const Arabica::DOM::Node<std::string>& dom) { this->dom = dom; }
+
+ std::string getSendId() { return sendid; }
+ void setSendId(const std::string& sendId) { this->sendid = sendId; }
+
+ std::string getInvokeId() { return invokeid; }
+ void setInvokeId(const std::string& invokeId) { this->invokeid = invokeId; }
+
+ Data getData() { return data; }
+ void setData(const Data& invokeId) { this->data = data; }
static Event fromXML(const std::string& xmlString);
Arabica::DOM::Document<std::string> toDocument();
@@ -83,7 +116,20 @@ public:
return ss.str();
}
-#ifndef SWIGJAVA
+#ifdef SWIGIMPORTED
+protected:
+#endif
+
+ std::string name;
+ Type type;
+ std::string origin;
+ std::string origintype;
+ Arabica::DOM::Node<std::string> dom;
+ std::string sendid;
+ std::string invokeid;
+ Data data;
+
+#ifndef SWIG
friend std::ostream& operator<< (std::ostream& os, const Event& event);
#endif
};
@@ -92,15 +138,58 @@ class InvokeRequest : public Event {
public:
InvokeRequest(Event event) : Event(event) {}
InvokeRequest() {}
- std::string type;
- std::string src;
- std::map<std::string, std::string> namelist;
- typedef std::map<std::string, std::string> namelist_t;
- bool autoForward;
- std::multimap<std::string, std::string> params;
- typedef std::multimap<std::string, std::string> params_t;
+
+ std::string getType() { return type; }
+ void setType(const std::string& type) { this->type = type; }
- std::string content;
+ std::string getSource() { return src; }
+ void setSource(const std::string& src) { this->src = src; }
+
+ std::string getContent() { return content; }
+ void setContent(const std::string& content) { this->content = content; }
+
+ bool isAutoForwarded() { return autoForward; }
+ void setAutoForwarded(bool autoForward) { this->autoForward = autoForward; }
+
+#ifdef SWIG
+ /// TODO: Do we want to set namelist and params as well?
+ std::map<std::string, std::string> getNameList() { return namelist; }
+
+ virtual const std::vector<std::string> getNameListKeys() {
+ std::set<std::string> keys;
+ namelist_t::const_iterator nameListIter = namelist.begin();
+ while (nameListIter != namelist.end()) {
+ keys.insert(nameListIter->first);
+ nameListIter++;
+ }
+ return std::vector<std::string>(keys.begin(), keys.end());
+ }
+
+ // substitute multimap by map with vectors for language bindings
+ std::map<std::string, std::vector<std::string> > getParams() {
+ std::map<std::string, std::vector<std::string> > paramsMap;
+ params_t::iterator paramIter = params.begin();
+ while(paramIter != params.end()) {
+ paramsMap[paramIter->first].push_back(paramIter->second);
+ paramIter++;
+ }
+ return paramsMap;
+ }
+
+ const std::vector<std::string> getParamKeys() {
+ std::set<std::string> keys;
+ params_t::iterator paramIter = params.begin();
+ while(paramIter != params.end()) {
+ keys.insert(paramIter->first);
+ paramIter++;
+ }
+ return std::vector<std::string>(keys.begin(), keys.end());
+ }
+
+#else
+ std::map<std::string, std::string>& getNameList() { return namelist; }
+ std::multimap<std::string, std::string>& getParams() { return params; }
+#endif
static InvokeRequest fromXML(const std::string& xmlString);
Arabica::DOM::Document<std::string> toDocument();
@@ -110,7 +199,20 @@ public:
return ss.str();
}
-#ifndef SWIGJAVA
+#ifdef SWIGIMPORTED
+protected:
+#endif
+ std::string type;
+ std::string src;
+ std::string content;
+ bool autoForward;
+ std::map<std::string, std::string> namelist;
+ std::multimap<std::string, std::string> params;
+
+ typedef std::multimap<std::string, std::string> params_t;
+ typedef std::map<std::string, std::string> namelist_t;
+
+#ifndef SWIG
friend std::ostream& operator<< (std::ostream& os, const InvokeRequest& sendReq);
#endif
@@ -120,25 +222,83 @@ class SendRequest : public Event {
public:
SendRequest() {}
SendRequest(Event event) : Event(event) {}
- std::string target;
- std::string type;
- uint32_t delayMs;
- std::map<std::string, std::string> namelist;
- typedef std::map<std::string, std::string> namelist_t;
- std::multimap<std::string, std::string> params;
- typedef std::multimap<std::string, std::string> params_t;
- std::string content;
+
+ std::string getTarget() { return target; }
+ void setTarget(const std::string& target) { this->target = target; }
+
+ std::string getType() { return type; }
+ void setType(const std::string& type) { this->type = type; }
+
+ uint32_t getDelayMs() { return delayMs; }
+ void setDelayMs(uint32_t delayMs) { this->delayMs = delayMs; }
+
+ std::string getContent() { return content; }
+ void setContent(const std::string& content) { this->content = content; }
+
+#ifdef SWIG
+ /// TODO: Do we want to set namelist and params as well?
+ std::map<std::string, std::string> getNameList() { return namelist; }
+
+ virtual const std::vector<std::string> getNameListKeys() {
+ std::set<std::string> keys;
+ namelist_t::const_iterator nameListIter = namelist.begin();
+ while (nameListIter != namelist.end()) {
+ keys.insert(nameListIter->first);
+ nameListIter++;
+ }
+ return std::vector<std::string>(keys.begin(), keys.end());
+ }
+
+ // substitute multimap by map with vectors for language bindings
+ std::map<std::string, std::vector<std::string> > getParams() {
+ std::map<std::string, std::vector<std::string> > paramsMap;
+ params_t::iterator paramIter = params.begin();
+ while(paramIter != params.end()) {
+ paramsMap[paramIter->first].push_back(paramIter->second);
+ paramIter++;
+ }
+ return paramsMap;
+ }
+
+ const std::vector<std::string> getParamKeys() {
+ std::set<std::string> keys;
+ params_t::iterator paramIter = params.begin();
+ while(paramIter != params.end()) {
+ keys.insert(paramIter->first);
+ paramIter++;
+ }
+ return std::vector<std::string>(keys.begin(), keys.end());
+ }
+
+#else
+ std::map<std::string, std::string>& getNameList() { return namelist; }
+ std::multimap<std::string, std::string>& getParams() { return params; }
+#endif
static SendRequest fromXML(const std::string& xmlString);
Arabica::DOM::Document<std::string> toDocument();
std::string toXMLString() {
std::stringstream ss;
ss << toDocument();
-// std::cout << ss.str() << std::endl;
+ // std::cout << ss.str() << std::endl;
return ss.str();
}
-#ifndef SWIGJAVA
+#ifdef SWIGIMPORTED
+protected:
+#endif
+ std::string target;
+ std::string type;
+ uint32_t delayMs;
+ std::string content;
+
+ std::map<std::string, std::string> namelist;
+ std::multimap<std::string, std::string> params;
+
+ typedef std::map<std::string, std::string> namelist_t;
+ typedef std::multimap<std::string, std::string> params_t;
+
+#ifndef SWIG
friend std::ostream& operator<< (std::ostream& os, const SendRequest& sendReq);
#endif
diff --git a/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp b/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp
index b7d08c4..447c52f 100644
--- a/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp
+++ b/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp
@@ -54,8 +54,8 @@ void USCXMLInvoker::invoke(const InvokeRequest& req) {
}
}
-void USCXMLInvoker::push(const Event& event) {
- Event copyEvent(event);
+void USCXMLInvoker::push(const SendRequest& event) {
+ SendRequest copyEvent(event);
copyEvent.invokeid = _invokeId;
_parentInterpreter->receive(copyEvent);
}
diff --git a/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.h b/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.h
index aedef32..857ffe2 100644
--- a/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.h
+++ b/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.h
@@ -15,7 +15,7 @@ class Interpreter;
class USCXMLInvoker :
public InvokerImpl,
- public uscxml::concurrency::BlockingQueue<Event>,
+ public uscxml::concurrency::BlockingQueue<SendRequest>,
public boost::enable_shared_from_this<USCXMLInvoker> {
public:
USCXMLInvoker();
@@ -35,7 +35,7 @@ public:
virtual void cancel(const std::string sendId);
virtual void invoke(const InvokeRequest& req);
- virtual void push(const Event& event);
+ virtual void push(const SendRequest& event);
protected:
Interpreter* _invokedInterpreter;
diff --git a/test/samples/uscxml/test-invoked.scxml b/test/samples/uscxml/test-invoked.scxml
index 2781d31..eb9162e 100644
--- a/test/samples/uscxml/test-invoked.scxml
+++ b/test/samples/uscxml/test-invoked.scxml
@@ -2,8 +2,28 @@
<scxml datamodel="ecmascript">
<state id="start">
<onentry>
- <log expr="'Message from the invoked scxml interpreter'" />
- <send target="#_parent" event="transitionToNext" />
+ <script>
+ foo = {
+ "atom": "urghs",
+ "array": [0,1,2,3,4],
+ "compound": {
+ "key1": "value1",
+ "key2": "value2",
+ "key3": "value3",
+ }
+ };
+ bar = "This is some string";
+ </script>
+ <log expr="'Message from the invoked scxml interpreter'" type="http://www.w3.org/TR/scxml/#Anything" id="thisOne" />
+ <send target="#_parent" event="transitionToNext" namelist="foo">
+ <param name="bar" expr="bar" />
+ <content>
+This is some content!
+ </content>
+ </send>
</onentry>
+
+ <!-- transition target="done" / -->
</state>
+ <state id="done" final="true" />
</scxml> \ No newline at end of file