summaryrefslogtreecommitdiffstats
path: root/embedding/java/src/org/uscxml/datamodel/ecmascript/ECMAData.java
diff options
context:
space:
mode:
Diffstat (limited to 'embedding/java/src/org/uscxml/datamodel/ecmascript/ECMAData.java')
-rw-r--r--embedding/java/src/org/uscxml/datamodel/ecmascript/ECMAData.java110
1 files changed, 110 insertions, 0 deletions
diff --git a/embedding/java/src/org/uscxml/datamodel/ecmascript/ECMAData.java b/embedding/java/src/org/uscxml/datamodel/ecmascript/ECMAData.java
new file mode 100644
index 0000000..56d7090
--- /dev/null
+++ b/embedding/java/src/org/uscxml/datamodel/ecmascript/ECMAData.java
@@ -0,0 +1,110 @@
+package org.uscxml.datamodel.ecmascript;
+
+import org.mozilla.javascript.Scriptable;
+import org.uscxml.Data;
+
+public class ECMAData implements Scriptable {
+
+ protected Data data;
+ protected Scriptable parent;
+ protected Scriptable prototype;
+
+ public ECMAData(Data data) {
+ this.data = data;
+ }
+
+ @Override
+ public String getClassName() {
+ return "Data";
+ }
+
+ public Object unwrap(Data data) {
+ if (data.atom.length() > 0) {
+ return data.atom;
+ }
+ return new ECMAData(data);
+
+ }
+
+ @Override
+ public Object get(String name, Scriptable start) {
+ if (data.compound.containsKey(name))
+ return unwrap(data.compound.get(name));
+ return NOT_FOUND;
+ }
+
+ @Override
+ public Object get(int index, Scriptable start) {
+ if (data.array.size() > index)
+ return unwrap(data.array.get(index));
+ return NOT_FOUND;
+ }
+
+ @Override
+ public boolean has(String name, Scriptable start) {
+ return data.compound.containsKey(name);
+ }
+
+ @Override
+ public boolean has(int index, Scriptable start) {
+ return data.array.size() > index;
+ }
+
+ @Override
+ public void put(String name, Scriptable start, Object value) {
+ }
+
+ @Override
+ public void put(int index, Scriptable start, Object value) {
+ }
+
+ @Override
+ public void delete(String name) {
+ }
+
+ @Override
+ public void delete(int index) {
+ }
+
+ @Override
+ public Scriptable getPrototype() {
+ return prototype;
+ }
+
+ @Override
+ public void setPrototype(Scriptable prototype) {
+ this.prototype = prototype;
+ }
+
+ @Override
+ public Scriptable getParentScope() {
+ return parent;
+ }
+
+ @Override
+ public void setParentScope(Scriptable parent) {
+ this.parent = parent;
+ }
+
+ @Override
+ public Object[] getIds() {
+ return data.compound.keySet().toArray();
+ }
+
+ @Override
+ public Object getDefaultValue(Class<?> hint) {
+ return "[object Data]";
+ }
+
+ @Override
+ public boolean hasInstance(Scriptable instance) {
+ Scriptable proto = instance.getPrototype();
+ while (proto != null) {
+ if (proto.equals(this))
+ return true;
+ proto = proto.getPrototype();
+ }
+ return false;
+ }
+
+}