diff options
author | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2014-11-12 18:56:38 (GMT) |
---|---|---|
committer | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2014-11-12 18:56:38 (GMT) |
commit | c95be52b02e921d4ba8b3e707cd2f6239ce9c99e (patch) | |
tree | f30012410b30788f37df1122fde18b75316a4417 | |
parent | ba6950d9968f151247d873b414c3ff0fd513f4ca (diff) | |
download | uscxml-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.json | 10 | ||||
-rw-r--r-- | embedding/java/src/org/uscxml/tests/datamodel/TestData.xml | 7 | ||||
-rw-r--r-- | embedding/java/src/org/uscxml/tests/datamodel/TestDataModelAccess.java | 84 | ||||
-rw-r--r-- | test/uscxml/dom/TestData.json | 10 | ||||
-rw-r--r-- | test/uscxml/dom/TestData.xml | 7 | ||||
-rw-r--r-- | test/uscxml/dom/test-xml-access.scxml | 23 |
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> |