summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-11-12 18:56:38 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-11-12 18:56:38 (GMT)
commitc95be52b02e921d4ba8b3e707cd2f6239ce9c99e (patch)
treef30012410b30788f37df1122fde18b75316a4417
parentba6950d9968f151247d873b414c3ff0fd513f4ca (diff)
downloaduscxml-c95be52b02e921d4ba8b3e707cd2f6239ce9c99e.zip
uscxml-c95be52b02e921d4ba8b3e707cd2f6239ce9c99e.tar.gz
uscxml-c95be52b02e921d4ba8b3e707cd2f6239ce9c99e.tar.bz2
Data model access example in Java
-rw-r--r--embedding/java/src/org/uscxml/tests/datamodel/TestData.json10
-rw-r--r--embedding/java/src/org/uscxml/tests/datamodel/TestData.xml7
-rw-r--r--embedding/java/src/org/uscxml/tests/datamodel/TestDataModelAccess.java84
-rw-r--r--test/uscxml/dom/TestData.json10
-rw-r--r--test/uscxml/dom/TestData.xml7
-rw-r--r--test/uscxml/dom/test-xml-access.scxml23
6 files changed, 141 insertions, 0 deletions
diff --git a/embedding/java/src/org/uscxml/tests/datamodel/TestData.json b/embedding/java/src/org/uscxml/tests/datamodel/TestData.json
new file mode 100644
index 0000000..a07a5d9
--- /dev/null
+++ b/embedding/java/src/org/uscxml/tests/datamodel/TestData.json
@@ -0,0 +1,10 @@
+{
+ "id": 1,
+ "name": "Foo",
+ "price": 123,
+ "tags": [ "Bar", "Eek" ],
+ "stock": {
+ "warehouse": 300,
+ "retail": 20,
+ }
+}
diff --git a/embedding/java/src/org/uscxml/tests/datamodel/TestData.xml b/embedding/java/src/org/uscxml/tests/datamodel/TestData.xml
new file mode 100644
index 0000000..882cd95
--- /dev/null
+++ b/embedding/java/src/org/uscxml/tests/datamodel/TestData.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<note>
+ <to>Tove</to>
+ <from>Jani</from>
+ <heading>Reminder</heading>
+ <body>Don't forget me this weekend!</body>
+</note> \ No newline at end of file
diff --git a/embedding/java/src/org/uscxml/tests/datamodel/TestDataModelAccess.java b/embedding/java/src/org/uscxml/tests/datamodel/TestDataModelAccess.java
new file mode 100644
index 0000000..fcad186
--- /dev/null
+++ b/embedding/java/src/org/uscxml/tests/datamodel/TestDataModelAccess.java
@@ -0,0 +1,84 @@
+package org.uscxml.tests.datamodel;
+
+import org.uscxml.Interpreter;
+import org.uscxml.InterpreterException;
+import org.uscxml.InterpreterState;
+
+public class TestDataModelAccess {
+ public static void main(String[] args) throws InterpreterException {
+ // load JNI library from build directory
+ System.load("/Users/sradomski/Documents/TK/Code/uscxml/build/cli/lib/libuscxmlNativeJava64.jnilib");
+
+ {
+ // initializing and accessing complex data
+ String xml =
+ "<scxml datamodel=\"ecmascript\">" +
+ " <script src=\"http://uscxml.tk.informatik.tu-darmstadt.de/scripts/dump.js\" />" +
+ " <datamodel>" +
+ " <data id=\"cmplx1\"><![CDATA[" +
+ " { foo: \"bar\", baz: 12 }" +
+ " ]]></data>" +
+ " </datamodel>" +
+ " <state id=\"s1\">" +
+ " <onentry>" +
+ " <log label=\"cmplx1\" expr=\"cmplx1.foo\" />" +
+ " <log label=\"cmplx1\" expr=\"cmplx1.baz\" />" +
+ " <script>dump(cmplx1)</script>" +
+ " </onentry>" +
+ " <transition target=\"done\" />" +
+ " </state>" +
+ " <final id=\"done\" />" +
+ "</scxml>";
+
+ Interpreter interpreter = Interpreter.fromXML(xml);
+ InterpreterState state;
+ do {
+ state = interpreter.step();
+ // after first microstep, data model is initialized and we can access cmplx1
+ if (state == InterpreterState.USCXML_MICROSTEPPED)
+ System.out.println(interpreter.getDataModel().getStringAsData("cmplx1").toString());
+
+ } while (state != InterpreterState.USCXML_FINISHED &&
+ state != InterpreterState.USCXML_DESTROYED);
+ }
+
+ {
+ // initializing and accessing complex data via data.src
+ String xml =
+ "<scxml datamodel=\"ecmascript\">" +
+ " <script src=\"http://uscxml.tk.informatik.tu-darmstadt.de/scripts/dump.js\" />" +
+ " <datamodel>" +
+ " <data id=\"cmplx1\" src=\"TestData.json\" />" +
+ " <data id=\"cmplx2\" src=\"TestData.xml\" />" +
+ " </datamodel>" +
+ " <state id=\"s1\">" +
+ " <onentry>" +
+ " <!-- BUG script>" +
+ " var node = document.evaluate('//to', cmplx2);" +
+ " dump(node);" +
+ " </script -->" +
+ " <log label=\"cmplx1\" expr=\"cmplx1.name\" />" +
+ " <log label=\"cmplx1\" expr=\"cmplx1.price\" />" +
+ " <script>dump(cmplx1)</script>" +
+ " </onentry>" +
+ " <transition target=\"done\" />" +
+ " </state>" +
+ " <final id=\"done\" />" +
+ "</scxml>";
+
+ Interpreter interpreter = Interpreter.fromXML(xml);
+ interpreter.setSourceURI(TestDataModelAccess.class.getResource("").toString());
+ InterpreterState state;
+ do {
+ state = interpreter.step();
+ // after first microstep, data model is initialized and we can access cmplx1
+ if (state == InterpreterState.USCXML_MICROSTEPPED)
+ System.out.println(interpreter.getDataModel().getStringAsData("cmplx1").toString());
+
+ } while (state != InterpreterState.USCXML_FINISHED &&
+ state != InterpreterState.USCXML_DESTROYED);
+
+ }
+ }
+
+}
diff --git a/test/uscxml/dom/TestData.json b/test/uscxml/dom/TestData.json
new file mode 100644
index 0000000..a07a5d9
--- /dev/null
+++ b/test/uscxml/dom/TestData.json
@@ -0,0 +1,10 @@
+{
+ "id": 1,
+ "name": "Foo",
+ "price": 123,
+ "tags": [ "Bar", "Eek" ],
+ "stock": {
+ "warehouse": 300,
+ "retail": 20,
+ }
+}
diff --git a/test/uscxml/dom/TestData.xml b/test/uscxml/dom/TestData.xml
new file mode 100644
index 0000000..3160cfd
--- /dev/null
+++ b/test/uscxml/dom/TestData.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<note importance="urgent">
+ <to>Tove</to>
+ <from>Jani</from>
+ <heading>Reminder</heading>
+ <body>Don't forget me this weekend!</body>
+</note> \ No newline at end of file
diff --git a/test/uscxml/dom/test-xml-access.scxml b/test/uscxml/dom/test-xml-access.scxml
new file mode 100644
index 0000000..a637c00
--- /dev/null
+++ b/test/uscxml/dom/test-xml-access.scxml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<scxml datamodel="ecmascript">
+ <script src="http://uscxml.tk.informatik.tu-darmstadt.de/scripts/dump.js"/>
+ <datamodel>
+ <data id="cmplx1" src="TestData.json"/>
+ <data id="cmplx2" src="TestData.xml"/>
+ </datamodel>
+ <state id="s1">
+ <onentry>
+ <log label="cmplx1" expr="cmplx1.name"/>
+ <log label="cmplx1" expr="cmplx1.price"/>
+ <script>dump(cmplx1)</script>
+
+ <log label="cmplx2" expr="cmplx2.getAttribute('importance')"/>
+ <script>
+ var node = document.evaluate('//to', cmplx2).asString();
+ dump(node);
+ </script>
+ </onentry>
+ <transition target="done"/>
+ </state>
+ <final id="done"/>
+</scxml>