1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#ifndef JAVADataModel_H_7U446XJQ
#define JAVADataModel_H_7U446XJQ
#include "../../../uscxml/Message.h"
#include "../../../uscxml/Factory.h"
#include "../../../uscxml/Interpreter.h"
namespace uscxml {
class JavaDataModel : public DataModelImpl {
public:
JavaDataModel();
virtual ~JavaDataModel();
virtual JavaDataModel* create(Interpreter interpreter) {
return new JavaDataModel();
}
virtual boost::shared_ptr<DataModelImpl> create(InterpreterImpl* interpreter) {
return boost::shared_ptr<DataModelImpl>(create(interpreter->shared_from_this()));
}
virtual std::set<std::string> getNames() {
return std::set<std::string>();
};
virtual bool validate(const std::string& location, const std::string& schema) {
return true;
}
virtual void setEvent(const Event& event) {}
virtual Data getStringAsData(const std::string& content) {
Data data;
return data;
}
// foreach
virtual uint32_t getLength(const std::string& expr) {
return 0;
}
virtual void setForeach(const std::string& item,
const std::string& array,
const std::string& index,
uint32_t iteration) {}
virtual void pushContext() {}
virtual void popContext() {}
virtual void eval(const Arabica::DOM::Element<std::string>& scriptElem,
const std::string& expr) {
std::ostringstream ssEval;
ssEval << scriptElem;
eval(ssEval.str(), expr);
}
virtual std::string evalAsString(const std::string& expr) {
return "";
}
virtual bool evalAsBool(const std::string& expr) {
return false;
}
virtual bool isDeclared(const std::string& expr) {
return false;
}
virtual void assign(const Arabica::DOM::Element<std::string>& assignElem,
const Arabica::DOM::Node<std::string>& node,
const std::string& content) {
// convert XML back into strings
std::string location;
if (assignElem.hasAttribute("location")) {
location = assignElem.getAttribute("location");
}
std::ostringstream ssAssign;
ssAssign << assignElem;
std::string tmp;
if (node) {
std::ostringstream ssContent;
ssContent << node;
tmp = ssContent.str();
} else {
tmp = content;
}
assign(location, ssAssign.str(), tmp);
}
virtual void assign(const std::string& location, const Data& data) {
init("", location, Data::toJSON(data));
}
// this is assign the function exposed to java
virtual void init(const Arabica::DOM::Element<std::string>& dataElem,
const Arabica::DOM::Node<std::string>& node,
const std::string& content) {
// convert XML back into strings
std::string location;
if (dataElem.hasAttribute("id")) {
location = dataElem.getAttribute("id");
}
std::ostringstream ssData;
if (dataElem)
ssData << dataElem;
std::string tmp;
if (node) {
std::ostringstream ssContent;
ssContent << node;
tmp = ssContent.str();
} else {
tmp = content;
}
init(location, ssData.str(), tmp);
}
virtual void init(const std::string& location, const Data& data) {
init("", location, Data::toJSON(data));
}
// these functions are exposed to java
virtual void init(const std::string& dataElem, const std::string& location, const std::string& content) {}
virtual void assign(const std::string& assignElem, const std::string& location, const std::string& content) {}
virtual void eval(const std::string& scriptElem, const std::string& expr) {}
};
}
#endif /* end of include guard: JAVADataModel_H_7U446XJQ */
|