V8DataModel.h
Go to the documentation of this file.
1 
20 #ifndef V8DATAMODEL_H_KN8TWG0V
21 #define V8DATAMODEL_H_KN8TWG0V
22 
24 
25 #include <list>
26 #include <set>
27 #include <v8.h>
28 
29 #ifdef BUILD_AS_PLUGINS
30 #include "uscxml/plugins/Plugins.h"
31 #endif
32 
33 namespace uscxml {
34 class Event;
35 class Data;
36 }
37 
38 namespace uscxml {
39 
45 class V8DataModel : public DataModelImpl {
46 public:
47  V8DataModel();
48  virtual ~V8DataModel();
49  virtual std::shared_ptr<DataModelImpl> create(DataModelCallbacks* callbacks);
50 
51  virtual void addExtension(DataModelExtension* ext);
52 
53  virtual std::list<std::string> getNames() {
54  std::list<std::string> names;
55  names.push_back("ecmascript");
56  return names;
57  }
58 
59  virtual bool isValidSyntax(const std::string& expr);
60 
61  virtual void setEvent(const Event& event);
62 
63  // foreach
64  virtual uint32_t getLength(const std::string& expr);
65  virtual void setForeach(const std::string& item,
66  const std::string& array,
67  const std::string& index,
68  uint32_t iteration);
69 
70  virtual bool evalAsBool(const std::string& expr);
71  virtual Data evalAsData(const std::string& expr);
72  virtual Data getAsData(const std::string& content);
73 
74  virtual bool isDeclared(const std::string& expr);
75 
76  virtual void assign(const std::string& location, const Data& data);
77  virtual void init(const std::string& location, const Data& data);
78 
79  virtual std::string andExpressions(std::list<std::string>);
80 
81 protected:
82 
83  static void jsExtension(const v8::FunctionCallbackInfo<v8::Value>& info);
84  static void jsIn(const v8::FunctionCallbackInfo<v8::Value>& info);
85  static void jsPrint(const v8::FunctionCallbackInfo<v8::Value>& info);
86 
87  v8::Persistent<v8::Object> _event;
88  v8::Persistent<v8::Context> _context;
89  static v8::Isolate* _isolate;
90 
91  v8::Persistent<v8::Object> _ioProcessors;
92  v8::Persistent<v8::Object> _invokers;
93 
94  static void getIOProcessors(v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info);
95  static void getInvokers(v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info);
96  static void getAttribute(v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info);
97  static void setWithException(v8::Local<v8::String> property,
98  v8::Local<v8::Value> value,
99  const v8::PropertyCallbackInfo<void>& info);
100 
101  v8::Local<v8::Value> evalAsValue(const std::string& expr, bool dontThrow = false);
102  v8::Local<v8::Value> getDataAsValue(const Data& data);
103  Data getValueAsData(const v8::Local<v8::Value>& value);
104  v8::Local<v8::Value> getNodeAsValue(const XERCESC_NS::DOMNode* node);
105  void throwExceptionEvent(const v8::TryCatch& tryCatch);
106 
107  std::set<DataModelExtension*> _extensions;
108 
109 private:
110  Data getValueAsData(const v8::Local<v8::Value>& value, std::set<v8::Value*>& alreadySeen);
111 
112  static std::mutex _initMutex;
113 
114 };
115 
116 #ifdef BUILD_AS_PLUGINS
117 PLUMA_INHERIT_PROVIDER(V8DataModel, DataModelImpl);
118 #endif
119 
120 }
121 
122 #endif /* end of include guard: V8DATAMODEL_H_KN8TWG0V */
ECMAScript data-model via Google's V8.
Definition: V8DataModel.h:45
virtual bool isValidSyntax(const std::string &expr)
Determine whether a given string constitutes valid syntax in the data-model's language.
Definition: V8DataModel.cpp:613
virtual void init(const std::string &location, const Data &data)
Initialize a variable / location in the data-model with a given data object.
Definition: V8DataModel.cpp:737
Definition: InterpreterIssue.cpp:33
virtual Data getAsData(const std::string &content)
Return a string as an unevaluated Data object.
Definition: V8DataModel.cpp:421
virtual bool isDeclared(const std::string &expr)
Determine whether a given variable / location is declared.
Definition: V8DataModel.cpp:670
Definition: DataModelImpl.h:54
Abstract base class for all data-model implementations.
Definition: DataModelImpl.h:69
virtual std::list< std::string > getNames()
Return a list of names to be matched by the datamodel attribute in SCXML.
Definition: V8DataModel.h:53
virtual void assign(const std::string &location, const Data &data)
Assign a data object to a location in the data-model.
Definition: V8DataModel.cpp:709
virtual Data evalAsData(const std::string &expr)
Return a string as an evaluated Data object.
Definition: V8DataModel.cpp:425
Definition: Event.h:84
virtual bool evalAsBool(const std::string &expr)
Evaluate a given expression as a boolean.
Definition: V8DataModel.cpp:696
Callbacks available for every data-model.
Definition: DataModelImpl.h:44
virtual void setEvent(const Event &event)
Set the given event as _event in the data-model's global scope.
Definition: V8DataModel.cpp:311
virtual std::shared_ptr< DataModelImpl > create(DataModelCallbacks *callbacks)
The Factory wants to instantiate a new instance.
Definition: V8DataModel.cpp:154
Definition: Data.h:44