summaryrefslogtreecommitdiffstats
path: root/src/uscxml/plugins/DataModel.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/uscxml/plugins/DataModel.h')
-rw-r--r--src/uscxml/plugins/DataModel.h209
1 files changed, 209 insertions, 0 deletions
diff --git a/src/uscxml/plugins/DataModel.h b/src/uscxml/plugins/DataModel.h
new file mode 100644
index 0000000..57d4b14
--- /dev/null
+++ b/src/uscxml/plugins/DataModel.h
@@ -0,0 +1,209 @@
+/**
+ * @file
+ * @author 2012-2014 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de)
+ * @copyright Simplified BSD
+ *
+ * @cond
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the FreeBSD license as published by the FreeBSD
+ * project.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the FreeBSD license along with this
+ * program. If not, see <http://www.opensource.org/licenses/bsd-license>.
+ * @endcond
+ */
+
+#ifndef DATAMODEL_H_F1F776F9
+#define DATAMODEL_H_F1F776F9
+
+#include "uscxml/Common.h"
+#include "uscxml/plugins/EventHandler.h"
+
+#include <list>
+#include <boost/shared_ptr.hpp>
+#include <string>
+#include <sstream>
+
+#include "DOM/Document.hpp"
+
+namespace uscxml {
+
+class InterpreterImpl;
+
+class USCXML_API DataModelImpl {
+public:
+ virtual ~DataModelImpl() {}
+ virtual boost::shared_ptr<DataModelImpl> create(InterpreterImpl* interpreter) = 0;
+ virtual std::list<std::string> getNames() = 0;
+
+ virtual bool validate(const std::string& location, const std::string& schema) = 0;
+ virtual void setEvent(const Event& event) = 0;
+ virtual Data getStringAsData(const std::string& content) = 0;
+
+ size_t replaceExpressions(std::string& content);
+
+ // foreach
+ virtual uint32_t getLength(const std::string& expr) = 0;
+ virtual void setForeach(const std::string& item,
+ const std::string& array,
+ const std::string& index,
+ uint32_t iteration) = 0;
+ virtual void pushContext() = 0;
+ virtual void popContext() = 0;
+
+ virtual void eval(const Arabica::DOM::Element<std::string>& scriptElem,
+ const std::string& expr) = 0;
+
+ virtual std::string evalAsString(const std::string& expr) = 0;
+
+ virtual bool evalAsBool(const Arabica::DOM::Node<std::string>& scriptNode,
+ const std::string& expr) = 0;
+ virtual bool evalAsBool(const std::string& expr) {
+ return evalAsBool(Arabica::DOM::Node<std::string>(), expr);
+ }
+
+ virtual bool isDeclared(const std::string& expr) = 0;
+
+ virtual void assign(const Arabica::DOM::Element<std::string>& assignElem,
+ const Arabica::DOM::Node<std::string>& node,
+ const std::string& content) = 0;
+ virtual void assign(const std::string& location, const Data& data) = 0;
+
+ virtual void init(const Arabica::DOM::Element<std::string>& dataElem,
+ const Arabica::DOM::Node<std::string>& node,
+ const std::string& content) = 0;
+ virtual void init(const std::string& location, const Data& data) = 0;
+
+ virtual void setInterpreter(InterpreterImpl* interpreter) {
+ _interpreter = interpreter;
+ }
+
+ virtual std::string andExpressions(std::list<std::string>) {
+ return "";
+ }
+
+ static void throwErrorExecution(const std::string& cause);
+ static void throwErrorPlatform(const std::string& cause);
+
+ // we need it public for various static functions
+protected:
+ InterpreterImpl* _interpreter;
+};
+
+class USCXML_API DataModel {
+public:
+ DataModel() : _impl() {}
+ DataModel(const boost::shared_ptr<DataModelImpl> impl) : _impl(impl) { }
+ DataModel(const DataModel& other) : _impl(other._impl) { }
+ virtual ~DataModel() {};
+
+ operator bool() const {
+ return _impl;
+ }
+ bool operator< (const DataModel& other) const {
+ return _impl < other._impl;
+ }
+ bool operator==(const DataModel& other) const {
+ return _impl == other._impl;
+ }
+ bool operator!=(const DataModel& other) const {
+ return _impl != other._impl;
+ }
+ DataModel& operator= (const DataModel& other) {
+ _impl = other._impl;
+ return *this;
+ }
+
+ virtual std::list<std::string> getNames() {
+ return _impl->getNames();
+ }
+
+ virtual bool validate(const std::string& location, const std::string& schema) {
+ return _impl->validate(location, schema);
+ }
+ virtual void setEvent(const Event& event) {
+ return _impl->setEvent(event);
+ }
+ virtual Data getStringAsData(const std::string& content) {
+ return _impl->getStringAsData(content);
+ }
+
+ virtual void pushContext() {
+ return _impl->pushContext();
+ }
+ virtual void popContext() {
+ return _impl->popContext();
+ }
+
+ virtual void eval(const Arabica::DOM::Element<std::string>& scriptElem,
+ const std::string& expr) {
+ return _impl->eval(scriptElem, expr);
+ }
+ virtual std::string evalAsString(const std::string& expr) {
+ return _impl->evalAsString(expr);
+ }
+ virtual bool evalAsBool(const std::string& expr) {
+ return _impl->evalAsBool(expr);
+ }
+ virtual bool evalAsBool(const Arabica::DOM::Node<std::string>& scriptNode,
+ const std::string& expr) {
+ return _impl->evalAsBool(scriptNode, expr);
+ }
+
+ virtual uint32_t getLength(const std::string& expr) {
+ return _impl->getLength(expr);
+ }
+ virtual void setForeach(const std::string& item,
+ const std::string& array,
+ const std::string& index,
+ uint32_t iteration) {
+ return _impl->setForeach(item, array, index, iteration);
+ }
+
+ virtual void assign(const Arabica::DOM::Element<std::string>& assignElem,
+ const Arabica::DOM::Node<std::string>& node,
+ const std::string& content) {
+ return _impl->assign(assignElem, node, content);
+ }
+ virtual void assign(const std::string& location, const Data& data) {
+ return _impl->assign(location, data);
+ }
+
+ virtual void init(const Arabica::DOM::Element<std::string>& dataElem,
+ const Arabica::DOM::Node<std::string>& node,
+ const std::string& content) {
+ return _impl->init(dataElem, node, content);
+ }
+ virtual void init(const std::string& location, const Data& data) {
+ return _impl->init(location, data);
+ }
+
+ virtual bool isDeclared(const std::string& expr) {
+ return _impl->isDeclared(expr);
+ }
+
+ size_t replaceExpressions(std::string& content) {
+ return _impl->replaceExpressions(content);
+ }
+
+ std::string andExpressions(std::list<std::string> expressions) {
+ return _impl->andExpressions(expressions);
+ }
+
+ virtual void setInterpreter(InterpreterImpl* interpreter) {
+ _impl->setInterpreter(interpreter);
+ }
+
+protected:
+ boost::shared_ptr<DataModelImpl> _impl;
+};
+
+
+}
+
+
+#endif /* end of include guard: DATAMODEL_H_F1F776F9 */