diff options
author | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2014-08-03 12:10:57 (GMT) |
---|---|---|
committer | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2014-08-03 12:10:57 (GMT) |
commit | 6e1a4a67d5b17e92135cd3f5daf51bf044d76e40 (patch) | |
tree | 63d8de9a5ba99dbcd16c6bd867241a7e7466c559 /src/uscxml/plugins | |
parent | 37f8735a66aadd0e3f019f5edbb9356cf4a7b974 (diff) | |
download | uscxml-6e1a4a67d5b17e92135cd3f5daf51bf044d76e40.zip uscxml-6e1a4a67d5b17e92135cd3f5daf51bf044d76e40.tar.gz uscxml-6e1a4a67d5b17e92135cd3f5daf51bf044d76e40.tar.bz2 |
Got rid of more dynamic_casts
Diffstat (limited to 'src/uscxml/plugins')
25 files changed, 101 insertions, 96 deletions
diff --git a/src/uscxml/plugins/DataModel.h b/src/uscxml/plugins/DataModel.h index 1a4deba..b1eafb9 100644 --- a/src/uscxml/plugins/DataModel.h +++ b/src/uscxml/plugins/DataModel.h @@ -61,10 +61,10 @@ public: virtual std::string evalAsString(const std::string& expr) = 0; - virtual bool evalAsBool(const Arabica::DOM::Node<std::string>& scriptNode, + virtual bool evalAsBool(const Arabica::DOM::Element<std::string>& scriptNode, const std::string& expr) = 0; virtual bool evalAsBool(const std::string& expr) { - return evalAsBool(Arabica::DOM::Node<std::string>(), expr); + return evalAsBool(Arabica::DOM::Element<std::string>(), expr); } virtual bool isDeclared(const std::string& expr) = 0; @@ -150,7 +150,7 @@ public: virtual bool evalAsBool(const std::string& expr) { return _impl->evalAsBool(expr); } - virtual bool evalAsBool(const Arabica::DOM::Node<std::string>& scriptNode, + virtual bool evalAsBool(const Arabica::DOM::Element<std::string>& scriptNode, const std::string& expr) { return _impl->evalAsBool(scriptNode, expr); } diff --git a/src/uscxml/plugins/ExecutableContent.h b/src/uscxml/plugins/ExecutableContent.h index 6f4335b..6916b5f 100644 --- a/src/uscxml/plugins/ExecutableContent.h +++ b/src/uscxml/plugins/ExecutableContent.h @@ -44,8 +44,8 @@ public: virtual std::string getNamespace() { return "http://www.w3.org/2005/07/scxml"; ///< The namespace of the element. } - virtual void enterElement(const Arabica::DOM::Node<std::string>& node) = 0; ///< Invoked when entering the element as part of evaluating executable content. - virtual void exitElement(const Arabica::DOM::Node<std::string>& node) = 0; ///< Invoked when exiting the element as part of evaluating executable content. + virtual void enterElement(const Arabica::DOM::Element<std::string>& node) = 0; ///< Invoked when entering the element as part of evaluating executable content. + virtual void exitElement(const Arabica::DOM::Element<std::string>& node) = 0; ///< Invoked when exiting the element as part of evaluating executable content. virtual bool processChildren() = 0; ///< Whether or not the interpreter should process this elements children. protected: @@ -86,10 +86,10 @@ public: std::string getNamespace() { return _impl->getNamespace(); } - void enterElement(const Arabica::DOM::Node<std::string>& node) { + void enterElement(const Arabica::DOM::Element<std::string>& node) { return _impl->enterElement(node); } - void exitElement(const Arabica::DOM::Node<std::string>& node) { + void exitElement(const Arabica::DOM::Element<std::string>& node) { return _impl->exitElement(node); } bool processChildren() { diff --git a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp index 6d15f72..3a9cb27 100644 --- a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp +++ b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp @@ -514,7 +514,7 @@ void JSCDataModel::eval(const Element<std::string>& scriptElem, evalAsValue(expr); } -bool JSCDataModel::evalAsBool(const Arabica::DOM::Node<std::string>& node, const std::string& expr) { +bool JSCDataModel::evalAsBool(const Arabica::DOM::Element<std::string>& node, const std::string& expr) { JSValueRef result = evalAsValue(expr); return JSValueToBoolean(_ctx, result); } diff --git a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h index fea2234..6792130 100644 --- a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h +++ b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h @@ -66,7 +66,7 @@ public: const std::string& expr); virtual std::string evalAsString(const std::string& expr); - virtual bool evalAsBool(const Arabica::DOM::Node<std::string>& node, const std::string& expr); + virtual bool evalAsBool(const Arabica::DOM::Element<std::string>& node, const std::string& expr); virtual bool isDeclared(const std::string& expr); diff --git a/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp b/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp index bf8b538..a36a5f7 100644 --- a/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp +++ b/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp @@ -435,7 +435,7 @@ void LuaDataModel::init(const std::string& location, const Data& data) { * The predicate must return 'true' if and only if that state is in the current * state configuration. */ -bool LuaDataModel::evalAsBool(const Arabica::DOM::Node<std::string>& node, const std::string& expr) { +bool LuaDataModel::evalAsBool(const Arabica::DOM::Element<std::string>& node, const std::string& expr) { // we need the result of the expression on the lua stack -> has to "return"! std::string trimmedExpr = boost::trim_copy(expr); if (!boost::starts_with(trimmedExpr, "return")) { diff --git a/src/uscxml/plugins/datamodel/lua/LuaDataModel.h b/src/uscxml/plugins/datamodel/lua/LuaDataModel.h index 86e7e17..69b8d57 100644 --- a/src/uscxml/plugins/datamodel/lua/LuaDataModel.h +++ b/src/uscxml/plugins/datamodel/lua/LuaDataModel.h @@ -83,7 +83,7 @@ public: virtual void eval(const Arabica::DOM::Element<std::string>& scriptElem, const std::string& expr); virtual std::string evalAsString(const std::string& expr); - virtual bool evalAsBool(const Arabica::DOM::Node<std::string>& node, const std::string& expr); + virtual bool evalAsBool(const Arabica::DOM::Element<std::string>& node, const std::string& expr); virtual std::string andExpressions(std::list<std::string>); diff --git a/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp b/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp index d86bdb2..ae75c88 100644 --- a/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp +++ b/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp @@ -104,7 +104,7 @@ bool NULLDataModel::isDeclared(const std::string& expr) { * The predicate must return 'true' if and only if that state is in the current * state configuration. */ -bool NULLDataModel::evalAsBool(const Arabica::DOM::Node<std::string>& node, const std::string& expr) { +bool NULLDataModel::evalAsBool(const Arabica::DOM::Element<std::string>& node, const std::string& expr) { std::string trimmedExpr = expr; boost::trim(trimmedExpr); if (!boost::istarts_with(trimmedExpr, "in")) diff --git a/src/uscxml/plugins/datamodel/null/NULLDataModel.h b/src/uscxml/plugins/datamodel/null/NULLDataModel.h index 2870388..da0374e 100644 --- a/src/uscxml/plugins/datamodel/null/NULLDataModel.h +++ b/src/uscxml/plugins/datamodel/null/NULLDataModel.h @@ -77,7 +77,7 @@ public: virtual void eval(const Arabica::DOM::Element<std::string>& scriptElem, const std::string& expr); virtual std::string evalAsString(const std::string& expr); - virtual bool evalAsBool(const Arabica::DOM::Node<std::string>& node, const std::string& expr); + virtual bool evalAsBool(const Arabica::DOM::Element<std::string>& node, const std::string& expr); protected: diff --git a/src/uscxml/plugins/datamodel/prolog/swi/SWIDataModel.cpp b/src/uscxml/plugins/datamodel/prolog/swi/SWIDataModel.cpp index 924e14a..f6131f8 100644 --- a/src/uscxml/plugins/datamodel/prolog/swi/SWIDataModel.cpp +++ b/src/uscxml/plugins/datamodel/prolog/swi/SWIDataModel.cpp @@ -676,10 +676,10 @@ void SWIDataModel::eval(const Element<std::string>& scriptElem, const std::strin } bool SWIDataModel::evalAsBool(const std::string& expr) { - return evalAsBool(Arabica::DOM::Node<std::string>(), expr); + return evalAsBool(Arabica::DOM::Element<std::string>(), expr); } -bool SWIDataModel::evalAsBool(const Arabica::DOM::Node<std::string>& node, const std::string& expr) { +bool SWIDataModel::evalAsBool(const Arabica::DOM::Element<std::string>& node, const std::string& expr) { SWIEngineLock engineLock; try { PlCompound compound(expr.c_str()); diff --git a/src/uscxml/plugins/datamodel/prolog/swi/SWIDataModel.h b/src/uscxml/plugins/datamodel/prolog/swi/SWIDataModel.h index a673a40..1bf7b6a 100644 --- a/src/uscxml/plugins/datamodel/prolog/swi/SWIDataModel.h +++ b/src/uscxml/plugins/datamodel/prolog/swi/SWIDataModel.h @@ -97,7 +97,7 @@ public: virtual Data getStringAsData(const std::string& content); virtual std::string evalAsString(const std::string& expr); - virtual bool evalAsBool(const Arabica::DOM::Node<std::string>& node, const std::string& expr); + virtual bool evalAsBool(const Arabica::DOM::Element<std::string>& node, const std::string& expr); virtual bool evalAsBool(const std::string& expr); static foreign_t inPredicate(term_t a0, int arity, void* context); diff --git a/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp b/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp index 6d34677..f83d0c8 100644 --- a/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp +++ b/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp @@ -141,10 +141,10 @@ void PromelaDataModel::eval(const Element<std::string>& scriptElem, const std::s } bool PromelaDataModel::evalAsBool(const std::string& expr) { - return evalAsBool(Arabica::DOM::Node<std::string>(), expr); + return evalAsBool(Arabica::DOM::Element<std::string>(), expr); } -bool PromelaDataModel::evalAsBool(const Arabica::DOM::Node<std::string>& node, const std::string& expr) { +bool PromelaDataModel::evalAsBool(const Arabica::DOM::Element<std::string>& node, const std::string& expr) { PromelaParser parser(expr, PromelaParser::PROMELA_EXPR); // parser.dump(); return evaluateExpr(parser.ast) > 0; diff --git a/src/uscxml/plugins/datamodel/promela/PromelaDataModel.h b/src/uscxml/plugins/datamodel/promela/PromelaDataModel.h index ca6b19d..89078bd 100644 --- a/src/uscxml/plugins/datamodel/promela/PromelaDataModel.h +++ b/src/uscxml/plugins/datamodel/promela/PromelaDataModel.h @@ -78,7 +78,7 @@ public: virtual Data getStringAsData(const std::string& content); virtual std::string evalAsString(const std::string& expr); - virtual bool evalAsBool(const Arabica::DOM::Node<std::string>& node, const std::string& expr); + virtual bool evalAsBool(const Arabica::DOM::Element<std::string>& node, const std::string& expr); virtual bool evalAsBool(const std::string& expr); virtual std::string andExpressions(std::list<std::string> expressions); diff --git a/src/uscxml/plugins/datamodel/xpath/XPathDataModel.cpp b/src/uscxml/plugins/datamodel/xpath/XPathDataModel.cpp index 41e015e..06461aa 100644 --- a/src/uscxml/plugins/datamodel/xpath/XPathDataModel.cpp +++ b/src/uscxml/plugins/datamodel/xpath/XPathDataModel.cpp @@ -229,7 +229,7 @@ void XPathDataModel::setEvent(const Event& event) { Node<std::string> oldEventElem = _datamodel.getFirstChild(); while(oldEventElem) { if (oldEventElem.getNodeType() == Node_base::ELEMENT_NODE) { - if (HAS_ATTR(oldEventElem, "id") && iequals(ATTR(oldEventElem, "id"), "_event")) + if (HAS_ATTR_CAST(oldEventElem, "id") && iequals(ATTR_CAST(oldEventElem, "id"), "_event")) break; } oldEventElem = oldEventElem.getNextSibling(); @@ -393,10 +393,10 @@ bool XPathDataModel::isDeclared(const std::string& expr) { } bool XPathDataModel::evalAsBool(const std::string& expr) { - return evalAsBool(Arabica::DOM::Node<std::string>(), expr); + return evalAsBool(Arabica::DOM::Element<std::string>(), expr); } -bool XPathDataModel::evalAsBool(const Arabica::DOM::Node<std::string>& node, const std::string& expr) { +bool XPathDataModel::evalAsBool(const Arabica::DOM::Element<std::string>& node, const std::string& expr) { // std::cout << std::endl << evalAsString(expr); XPathValue<std::string> result; try { diff --git a/src/uscxml/plugins/datamodel/xpath/XPathDataModel.h b/src/uscxml/plugins/datamodel/xpath/XPathDataModel.h index 09d63fa..fe454b3 100644 --- a/src/uscxml/plugins/datamodel/xpath/XPathDataModel.h +++ b/src/uscxml/plugins/datamodel/xpath/XPathDataModel.h @@ -123,7 +123,7 @@ public: virtual std::string evalAsString(const std::string& expr); virtual bool evalAsBool(const std::string& expr); - virtual bool evalAsBool(const Arabica::DOM::Node<std::string>& node, const std::string& expr); + virtual bool evalAsBool(const Arabica::DOM::Element<std::string>& node, const std::string& expr); virtual double evalAsNumber(const std::string& expr); protected: diff --git a/src/uscxml/plugins/element/fetch/FetchElement.cpp b/src/uscxml/plugins/element/fetch/FetchElement.cpp index b40f487..9f97ca9 100644 --- a/src/uscxml/plugins/element/fetch/FetchElement.cpp +++ b/src/uscxml/plugins/element/fetch/FetchElement.cpp @@ -80,7 +80,7 @@ void FetchElement::downloadFailed(const URL& url, int errorCode) { } -void FetchElement::enterElement(const Arabica::DOM::Node<std::string>& node) { +void FetchElement::enterElement(const Arabica::DOM::Element<std::string>& node) { if (!HAS_ATTR(node, "target") && !HAS_ATTR(node, "targetexpr")) { LOG(ERROR) << "Fetch element requires target or targetexpr"; return; @@ -123,7 +123,7 @@ void FetchElement::enterElement(const Arabica::DOM::Node<std::string>& node) { } -void FetchElement::exitElement(const Arabica::DOM::Node<std::string>& node) { +void FetchElement::exitElement(const Arabica::DOM::Element<std::string>& node) { } diff --git a/src/uscxml/plugins/element/fetch/FetchElement.h b/src/uscxml/plugins/element/fetch/FetchElement.h index 433f3f5..e3e5008 100644 --- a/src/uscxml/plugins/element/fetch/FetchElement.h +++ b/src/uscxml/plugins/element/fetch/FetchElement.h @@ -46,8 +46,8 @@ public: return false; } - void enterElement(const Arabica::DOM::Node<std::string>& node); - void exitElement(const Arabica::DOM::Node<std::string>& node); + void enterElement(const Arabica::DOM::Element<std::string>& node); + void exitElement(const Arabica::DOM::Element<std::string>& node); void downloadCompleted(const URL& url); void downloadFailed(const URL& url, int errorCode); diff --git a/src/uscxml/plugins/element/file/FileElement.cpp b/src/uscxml/plugins/element/file/FileElement.cpp index 247c3c8..decd5ca 100644 --- a/src/uscxml/plugins/element/file/FileElement.cpp +++ b/src/uscxml/plugins/element/file/FileElement.cpp @@ -48,7 +48,7 @@ boost::shared_ptr<ExecutableContentImpl> FileElement::create(InterpreterImpl* in FileElement::~FileElement() { } -void FileElement::enterElement(const Arabica::DOM::Node<std::string>& node) { +void FileElement::enterElement(const Arabica::DOM::Element<std::string>& node) { if (!HAS_ATTR(node, "url") && !HAS_ATTR(node, "urlexpr")) { LOG(ERROR) << "File element requires url or urlexpr"; return; @@ -251,7 +251,7 @@ void FileElement::enterElement(const Arabica::DOM::Node<std::string>& node) { } -void FileElement::exitElement(const Arabica::DOM::Node<std::string>& node) { +void FileElement::exitElement(const Arabica::DOM::Element<std::string>& node) { } diff --git a/src/uscxml/plugins/element/file/FileElement.h b/src/uscxml/plugins/element/file/FileElement.h index e236918..b1b3426 100644 --- a/src/uscxml/plugins/element/file/FileElement.h +++ b/src/uscxml/plugins/element/file/FileElement.h @@ -62,8 +62,8 @@ public: return false; } - void enterElement(const Arabica::DOM::Node<std::string>& node); - void exitElement(const Arabica::DOM::Node<std::string>& node); + void enterElement(const Arabica::DOM::Element<std::string>& node); + void exitElement(const Arabica::DOM::Element<std::string>& node); protected: diff --git a/src/uscxml/plugins/element/postpone/PostponeElement.cpp b/src/uscxml/plugins/element/postpone/PostponeElement.cpp index 7a18b38..a041a9e 100644 --- a/src/uscxml/plugins/element/postpone/PostponeElement.cpp +++ b/src/uscxml/plugins/element/postpone/PostponeElement.cpp @@ -44,7 +44,7 @@ boost::shared_ptr<ExecutableContentImpl> PostponeElement::create(InterpreterImpl return invoker; } -void PostponeElement::enterElement(const Arabica::DOM::Node<std::string>& node) { +void PostponeElement::enterElement(const Arabica::DOM::Element<std::string>& node) { if (!_interpreter->getDataModel()) { LOG(ERROR) << "Postpone element requires a datamodel"; return; @@ -116,7 +116,7 @@ void PostponeElement::enterElement(const Arabica::DOM::Node<std::string>& node) Resubmitter::postpone(currEvent, until, 0, chained, _interpreter); } -void PostponeElement::exitElement(const Arabica::DOM::Node<std::string>& node) { +void PostponeElement::exitElement(const Arabica::DOM::Element<std::string>& node) { } void PostponeElement::Resubmitter::postpone(const Event& event, std::string until, uint64_t timeout, bool chained, InterpreterImpl* interpreter) { diff --git a/src/uscxml/plugins/element/postpone/PostponeElement.h b/src/uscxml/plugins/element/postpone/PostponeElement.h index 56464e2..9840c75 100644 --- a/src/uscxml/plugins/element/postpone/PostponeElement.h +++ b/src/uscxml/plugins/element/postpone/PostponeElement.h @@ -56,8 +56,8 @@ public: return false; } - void enterElement(const Arabica::DOM::Node<std::string>& node); - void exitElement(const Arabica::DOM::Node<std::string>& node); + void enterElement(const Arabica::DOM::Element<std::string>& node); + void exitElement(const Arabica::DOM::Element<std::string>& node); protected: // once per interpreter diff --git a/src/uscxml/plugins/element/respond/RespondElement.cpp b/src/uscxml/plugins/element/respond/RespondElement.cpp index 6445249..a62f934 100644 --- a/src/uscxml/plugins/element/respond/RespondElement.cpp +++ b/src/uscxml/plugins/element/respond/RespondElement.cpp @@ -43,7 +43,7 @@ boost::shared_ptr<ExecutableContentImpl> RespondElement::create(InterpreterImpl* return invoker; } -void RespondElement::enterElement(const Arabica::DOM::Node<std::string>& node) { +void RespondElement::enterElement(const Arabica::DOM::Element<std::string>& node) { // try to get the request id if (!HAS_ATTR(node, "to")) { LOG(ERROR) << "Respond element requires to attribute"; @@ -81,10 +81,11 @@ void RespondElement::enterElement(const Arabica::DOM::Node<std::string>& node) { // extract the content Arabica::XPath::NodeSet<std::string> contents = InterpreterImpl::filterChildElements(_interpreter->getNameSpaceInfo().getXMLPrefixForNS(getNamespace()) + "content", node); if (contents.size() > 0) { - if (HAS_ATTR(contents[0], "expr")) { // -- content is evaluated string from datamodel ------ + Arabica::DOM::Element<std::string> contentElem = Arabica::DOM::Element<std::string>(contents[0]); + if (HAS_ATTR(contentElem, "expr")) { // -- content is evaluated string from datamodel ------ if (_interpreter->getDataModel()) { try { - Data contentData = _interpreter->getDataModel().getStringAsData(ATTR(contents[0], "expr")); + Data contentData = _interpreter->getDataModel().getStringAsData(ATTR(contentElem, "expr")); if (contentData.atom.length() > 0) { httpReply.content = contentData.atom; httpReply.headers["Content-Type"] = "text/plain"; @@ -108,19 +109,19 @@ void RespondElement::enterElement(const Arabica::DOM::Node<std::string>& node) { LOG(ERROR) << "content element has expr attribute but no datamodel is specified."; return; } - } else if (HAS_ATTR(contents[0], "file") || HAS_ATTR(contents[0], "fileexpr")) { // -- content is from file ------ + } else if (HAS_ATTR(contentElem, "file") || HAS_ATTR(contentElem, "fileexpr")) { // -- content is from file ------ URL file; - if (HAS_ATTR(contents[0], "fileexpr")) { + if (HAS_ATTR(contentElem, "fileexpr")) { if (_interpreter->getDataModel()) { try { - file = "file://" + _interpreter->getDataModel().evalAsString(ATTR(contents[0], "fileexpr")); + file = "file://" + _interpreter->getDataModel().evalAsString(ATTR(contentElem, "fileexpr")); } catch (Event e) { LOG(ERROR) << "Syntax error with fileexpr in content child of Respond element:" << std::endl << e << std::endl; return; } } } else { - file = "file://" + ATTR(contents[0], "fileexpr"); + file = "file://" + ATTR(contentElem, "fileexpr"); } if (file) { httpReply.content = file.getInContent(); @@ -144,13 +145,15 @@ void RespondElement::enterElement(const Arabica::DOM::Node<std::string>& node) { // process headers Arabica::XPath::NodeSet<std::string> headers = InterpreterImpl::filterChildElements(_interpreter->getNameSpaceInfo().getXMLPrefixForNS(getNamespace()) + "header", node); for (int i = 0; i < headers.size(); i++) { + Arabica::DOM::Element<std::string> headerElem = Arabica::DOM::Element<std::string>(headers[i]); + std::string name; - if (HAS_ATTR(headers[i], "name")) { - name = ATTR(headers[i], "name"); - } else if(HAS_ATTR(headers[i], "nameexpr")) { + if (HAS_ATTR(headerElem, "name")) { + name = ATTR(headerElem, "name"); + } else if(HAS_ATTR(headerElem, "nameexpr")) { if (_interpreter->getDataModel()) { try { - name = _interpreter->getDataModel().evalAsString(ATTR(headers[i], "nameexpr")); + name = _interpreter->getDataModel().evalAsString(ATTR(headerElem, "nameexpr")); } catch (Event e) { LOG(ERROR) << "Syntax error with nameexpr in header child of Respond element:" << std::endl << e << std::endl; return; @@ -165,12 +168,12 @@ void RespondElement::enterElement(const Arabica::DOM::Node<std::string>& node) { } std::string value; - if (HAS_ATTR(headers[i], "value")) { - value = ATTR(headers[i], "value"); - } else if(HAS_ATTR(headers[i], "valueexpr")) { + if (HAS_ATTR(headerElem, "value")) { + value = ATTR(headerElem, "value"); + } else if(HAS_ATTR(headerElem, "valueexpr")) { if (_interpreter->getDataModel()) { try { - value = _interpreter->getDataModel().evalAsString(ATTR(headers[i], "valueexpr")); + value = _interpreter->getDataModel().evalAsString(ATTR(headerElem, "valueexpr")); } catch (Event e) { LOG(ERROR) << "Syntax error with valueexpr in header child of Respond element:" << std::endl << e << std::endl; return; @@ -192,7 +195,7 @@ void RespondElement::enterElement(const Arabica::DOM::Node<std::string>& node) { servlet->getRequests().erase(requestId); } -void RespondElement::exitElement(const Arabica::DOM::Node<std::string>& node) { +void RespondElement::exitElement(const Arabica::DOM::Element<std::string>& node) { } diff --git a/src/uscxml/plugins/element/respond/RespondElement.h b/src/uscxml/plugins/element/respond/RespondElement.h index 71b7fec..2e8cec7 100644 --- a/src/uscxml/plugins/element/respond/RespondElement.h +++ b/src/uscxml/plugins/element/respond/RespondElement.h @@ -46,8 +46,8 @@ public: return false; } - void enterElement(const Arabica::DOM::Node<std::string>& node); - void exitElement(const Arabica::DOM::Node<std::string>& node); + void enterElement(const Arabica::DOM::Element<std::string>& node); + void exitElement(const Arabica::DOM::Element<std::string>& node); }; diff --git a/src/uscxml/plugins/invoker/graphics/openscenegraph/OSGInvoker.cpp b/src/uscxml/plugins/invoker/graphics/openscenegraph/OSGInvoker.cpp index 9e435d2..dac4f99 100644 --- a/src/uscxml/plugins/invoker/graphics/openscenegraph/OSGInvoker.cpp +++ b/src/uscxml/plugins/invoker/graphics/openscenegraph/OSGInvoker.cpp @@ -66,9 +66,9 @@ bool pluginConnect(pluma::Host& host) { #endif #define OSG_TAG_HANDLE(tagName, procFunc) \ -} else if (iequals(LOCALNAME(childs.item(i)), tagName) && \ +} else if (iequals(LOCALNAME(childElem), tagName) && \ validChildren.find(tagName) != validChildren.end()) { \ - procFunc(childs.item(i));\ + procFunc(childElem);\ OSGInvoker::OSGInvoker() { @@ -167,7 +167,7 @@ void OSGInvoker::handleEvent(Arabica::DOM::Events::Event<std::string>& event) { } } -void OSGInvoker::processDisplay(const Arabica::DOM::Node<std::string>& element) { +void OSGInvoker::processDisplay(const Arabica::DOM::Element<std::string>& element) { // std::cout << element << std::endl; if (_displays.find(element) == _displays.end()) { @@ -188,7 +188,7 @@ void OSGInvoker::processDisplay(const Arabica::DOM::Node<std::string>& element) } } -void OSGInvoker::processViewport(const Arabica::DOM::Node<std::string>& element) { +void OSGInvoker::processViewport(const Arabica::DOM::Element<std::string>& element) { if (_displays.find(element.getParentNode()) == _displays.end()) return; @@ -236,7 +236,7 @@ void OSGInvoker::processViewport(const Arabica::DOM::Node<std::string>& element) void OSGInvoker::processCamera(const Arabica::DOM::Node<std::string>& element) {} void OSGInvoker::updateCamera(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event) {} -void OSGInvoker::processTranslation(const Arabica::DOM::Node<std::string>& element) { +void OSGInvoker::processTranslation(const Arabica::DOM::Element<std::string>& element) { assert(_nodes.find(element.getParentNode()) != _nodes.end()); osg::ref_ptr<osg::Node> node = _nodes[element.getParentNode()]; @@ -269,7 +269,7 @@ void OSGInvoker::processTranslation(const Arabica::DOM::Node<std::string>& eleme processChildren(validChilds, element); } -void OSGInvoker::processRotation(const Arabica::DOM::Node<std::string>& element) { +void OSGInvoker::processRotation(const Arabica::DOM::Element<std::string>& element) { assert(_nodes.find(element.getParentNode()) != _nodes.end()); osg::ref_ptr<osg::Node> node = _nodes[element.getParentNode()]; @@ -296,12 +296,12 @@ void OSGInvoker::updateRotation(osg::ref_ptr<osg::Node> node, Arabica::DOM::Even osg::ref_ptr<osg::MatrixTransform> transform = static_cast<osg::MatrixTransform*>(node->asTransform()); if (false) { } else if (iequals(event.getType(), "DOMAttrModified")) { - osg::Matrix rotation = rotationFromElement(Arabica::DOM::Node<std::string>(event.getTarget())); + osg::Matrix rotation = rotationFromElement(Arabica::DOM::Element<std::string>(Arabica::DOM::Node<std::string>(event.getTarget()))); transform->setMatrix(rotation); } } -osg::Matrix OSGInvoker::rotationFromElement(const Arabica::DOM::Node<std::string>& element) { +osg::Matrix OSGInvoker::rotationFromElement(const Arabica::DOM::Element<std::string>& element) { double pitch = 0, roll = 0, yaw = 0; if (HAS_ATTR(element, "pitch")) { NumAttr pitchAttr = NumAttr(ATTR(element, "pitch")); @@ -342,7 +342,7 @@ osg::Matrix OSGInvoker::rotationFromElement(const Arabica::DOM::Node<std::string return rotation; } -void OSGInvoker::processScale(const Arabica::DOM::Node<std::string>& element) { +void OSGInvoker::processScale(const Arabica::DOM::Element<std::string>& element) { assert(_nodes.find(element.getParentNode()) != _nodes.end()); osg::ref_ptr<osg::Node> node = _nodes[element.getParentNode()]; @@ -375,7 +375,7 @@ void OSGInvoker::processScale(const Arabica::DOM::Node<std::string>& element) { processChildren(validChilds, element); } -void OSGInvoker::processNode(const Arabica::DOM::Node<std::string>& element) { +void OSGInvoker::processNode(const Arabica::DOM::Element<std::string>& element) { _nodes_t::iterator nodeIter = _nodes.find(element.getParentNode()); assert(nodeIter != _nodes.end()); @@ -407,7 +407,7 @@ void OSGInvoker::processNode(const Arabica::DOM::Node<std::string>& element) { } } -void OSGInvoker::processSphere(const Arabica::DOM::Node<std::string>& element) { +void OSGInvoker::processSphere(const Arabica::DOM::Element<std::string>& element) { assert(_nodes.find(element.getParentNode()) != _nodes.end()); osg::ref_ptr<osg::Node> parent = _nodes[element.getParentNode()]; @@ -434,7 +434,7 @@ void OSGInvoker::processSphere(const Arabica::DOM::Node<std::string>& element) { void OSGInvoker::updateSphere(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event) { } -void OSGInvoker::processBox(const Arabica::DOM::Node<std::string>& element) { +void OSGInvoker::processBox(const Arabica::DOM::Element<std::string>& element) { assert(_nodes.find(element.getParentNode()) != _nodes.end()); osg::ref_ptr<osg::Node> parent = _nodes[element.getParentNode()]; @@ -462,7 +462,7 @@ void OSGInvoker::processBox(const Arabica::DOM::Node<std::string>& element) { } void OSGInvoker::updateBox(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event) { } -void OSGInvoker::processCapsule(const Arabica::DOM::Node<std::string>& element) { +void OSGInvoker::processCapsule(const Arabica::DOM::Element<std::string>& element) { assert(_nodes.find(element.getParentNode()) != _nodes.end()); osg::ref_ptr<osg::Node> parent = _nodes[element.getParentNode()]; @@ -487,7 +487,7 @@ void OSGInvoker::processCapsule(const Arabica::DOM::Node<std::string>& element) void OSGInvoker::updateCapsule(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event) { } -void OSGInvoker::processCone(const Arabica::DOM::Node<std::string>& element) { +void OSGInvoker::processCone(const Arabica::DOM::Element<std::string>& element) { assert(_nodes.find(element.getParentNode()) != _nodes.end()); osg::ref_ptr<osg::Node> parent = _nodes[element.getParentNode()]; @@ -514,7 +514,7 @@ void OSGInvoker::processCone(const Arabica::DOM::Node<std::string>& element) { void OSGInvoker::updateCone(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event) { } -void OSGInvoker::processCylinder(const Arabica::DOM::Node<std::string>& element) { +void OSGInvoker::processCylinder(const Arabica::DOM::Element<std::string>& element) { assert(_nodes.find(element.getParentNode()) != _nodes.end()); osg::ref_ptr<osg::Node> parent = _nodes[element.getParentNode()]; @@ -541,7 +541,7 @@ void OSGInvoker::processCylinder(const Arabica::DOM::Node<std::string>& element) void OSGInvoker::updateCylinder(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event) { } -osg::Vec4 OSGInvoker::getColor(const Arabica::DOM::Node<std::string>& element, const std::string& attr, bool& valid) { +osg::Vec4 OSGInvoker::getColor(const Arabica::DOM::Element<std::string>& element, const std::string& attr, bool& valid) { if (HAS_ATTR(element, attr)) { std::string color = ATTR(element, attr); @@ -576,7 +576,7 @@ osg::Vec4 OSGInvoker::getColor(const Arabica::DOM::Node<std::string>& element, c return osg::Vec4(); } -osg::ref_ptr<osg::Material> OSGInvoker::getMaterial(const Arabica::DOM::Node<std::string>& element) { +osg::ref_ptr<osg::Material> OSGInvoker::getMaterial(const Arabica::DOM::Element<std::string>& element) { osg::ref_ptr<osg::Material> nodeMat; @@ -630,6 +630,7 @@ void OSGInvoker::processChildren(const std::set<std::string>& validChildren, con for (int i = 0; i < childs.getLength(); ++i) { if (childs.item(i).getNodeType() != Arabica::DOM::Node_base::ELEMENT_NODE) continue; + Arabica::DOM::Element<std::string> childElem = Arabica::DOM::Element<std::string>(childs.item(i)); if (false) { OSG_TAG_HANDLE("node", processNode); OSG_TAG_HANDLE("translation", processTranslation); @@ -644,12 +645,12 @@ void OSGInvoker::processChildren(const std::set<std::string>& validChildren, con OSG_TAG_HANDLE("capsule", processCapsule); OSG_TAG_HANDLE("cylinder", processCylinder); } else { - LOG(INFO) << "Unknown XML element " << TAGNAME(childs.item(i)); + LOG(INFO) << "Unknown XML element " << TAGNAME(childElem); } } } -void OSGInvoker::getViewport(const Arabica::DOM::Node<std::string>& element, +void OSGInvoker::getViewport(const Arabica::DOM::Element<std::string>& element, unsigned int& x, unsigned int& y, unsigned int& width, @@ -659,7 +660,7 @@ void OSGInvoker::getViewport(const Arabica::DOM::Node<std::string>& element, } -void OSGInvoker::getViewport(const Arabica::DOM::Node<std::string>& element, +void OSGInvoker::getViewport(const Arabica::DOM::Element<std::string>& element, unsigned int& x, unsigned int& y, unsigned int& width, @@ -674,7 +675,7 @@ void OSGInvoker::getViewport(const Arabica::DOM::Node<std::string>& element, getViewport(element, x, y, width, height, fullWidth, fullHeight); } -void OSGInvoker::getViewport(const Arabica::DOM::Node<std::string>& element, +void OSGInvoker::getViewport(const Arabica::DOM::Element<std::string>& element, unsigned int& x, unsigned int& y, unsigned int& width, diff --git a/src/uscxml/plugins/invoker/graphics/openscenegraph/OSGInvoker.h b/src/uscxml/plugins/invoker/graphics/openscenegraph/OSGInvoker.h index af06e23..30be8ca 100644 --- a/src/uscxml/plugins/invoker/graphics/openscenegraph/OSGInvoker.h +++ b/src/uscxml/plugins/invoker/graphics/openscenegraph/OSGInvoker.h @@ -61,58 +61,58 @@ public: virtual void runOnMainThread(); protected: - void processDisplay(const Arabica::DOM::Node<std::string>& element); + void processDisplay(const Arabica::DOM::Element<std::string>& element); void updateDisplay(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event); - void processViewport(const Arabica::DOM::Node<std::string>& element); + void processViewport(const Arabica::DOM::Element<std::string>& element); void updateViewport(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event); void processCamera(const Arabica::DOM::Node<std::string>& element); void updateCamera(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event); - void processTranslation(const Arabica::DOM::Node<std::string>& element); + void processTranslation(const Arabica::DOM::Element<std::string>& element); void updateTranslation(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event); - void processRotation(const Arabica::DOM::Node<std::string>& element); + void processRotation(const Arabica::DOM::Element<std::string>& element); void updateRotation(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event); - static osg::Matrix rotationFromElement(const Arabica::DOM::Node<std::string>& element); + static osg::Matrix rotationFromElement(const Arabica::DOM::Element<std::string>& element); - void processScale(const Arabica::DOM::Node<std::string>& element); + void processScale(const Arabica::DOM::Element<std::string>& element); void updateScale(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event); - void processNode(const Arabica::DOM::Node<std::string>& element); + void processNode(const Arabica::DOM::Element<std::string>& element); void updateNode(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event); - void processSphere(const Arabica::DOM::Node<std::string>& element); + void processSphere(const Arabica::DOM::Element<std::string>& element); void updateSphere(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event); - void processBox(const Arabica::DOM::Node<std::string>& element); + void processBox(const Arabica::DOM::Element<std::string>& element); void updateBox(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event); - void processCapsule(const Arabica::DOM::Node<std::string>& element); + void processCapsule(const Arabica::DOM::Element<std::string>& element); void updateCapsule(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event); - void processCone(const Arabica::DOM::Node<std::string>& element); + void processCone(const Arabica::DOM::Element<std::string>& element); void updateCone(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event); - void processCylinder(const Arabica::DOM::Node<std::string>& element); + void processCylinder(const Arabica::DOM::Element<std::string>& element); void updateCylinder(osg::ref_ptr<osg::Node> node, Arabica::DOM::Events::Event<std::string>& event); - osg::Vec4 getColor(const Arabica::DOM::Node<std::string>& element, const std::string& attr, bool& valid); - osg::ref_ptr<osg::Material> getMaterial(const Arabica::DOM::Node<std::string>& element); + osg::Vec4 getColor(const Arabica::DOM::Element<std::string>& element, const std::string& attr, bool& valid); + osg::ref_ptr<osg::Material> getMaterial(const Arabica::DOM::Element<std::string>& element); osg::Vec4 parseVec4(const std::string& coeffs, int& number); void processChildren(const std::set<std::string>& validChildren, const Arabica::DOM::Node<std::string>& element); - void getViewport(const Arabica::DOM::Node<std::string>& element, + void getViewport(const Arabica::DOM::Element<std::string>& element, unsigned int& x, unsigned int& y, unsigned int& width, unsigned int& height, int& screenId); - void getViewport(const Arabica::DOM::Node<std::string>& element, + void getViewport(const Arabica::DOM::Element<std::string>& element, unsigned int& x, unsigned int& y, unsigned int& width, unsigned int& height, CompositeDisplay* display); - void getViewport(const Arabica::DOM::Node<std::string>& element, + void getViewport(const Arabica::DOM::Element<std::string>& element, unsigned int& x, unsigned int& y, unsigned int& width, diff --git a/src/uscxml/plugins/invoker/xhtml/XHTMLInvoker.cpp b/src/uscxml/plugins/invoker/xhtml/XHTMLInvoker.cpp index 5b67f7c..285db72 100644 --- a/src/uscxml/plugins/invoker/xhtml/XHTMLInvoker.cpp +++ b/src/uscxml/plugins/invoker/xhtml/XHTMLInvoker.cpp @@ -186,11 +186,12 @@ void XHTMLInvoker::reply(const SendRequest& req, const HTTPServer::Request& long std::stringstream ss; // Arabica::DOM::Node<std::string> content = req.dom.getDocumentElement(); Arabica::DOM::Node<std::string> content = req.dom; - if (content && iequals(content.getLocalName(), "content")) { - reply.headers["X-SCXML-Type"] = (HAS_ATTR(content, "type") ? ATTR(content, "type") : "replacechildren"); - reply.headers["X-SCXML-XPath"] = (HAS_ATTR(content, "xpath") ? ATTR(content, "xpath") : "/html/body"); - if (HAS_ATTR(content, "attr")) - reply.headers["X-SCXML-Attr"] = ATTR(content, "attr"); + if (content && content.getNodeType() == Arabica::DOM::Node_base::ELEMENT_NODE && iequals(content.getLocalName(), "content")) { + Arabica::DOM::Element<std::string> contentElem = Arabica::DOM::Element<std::string>(content); + reply.headers["X-SCXML-Type"] = (HAS_ATTR(contentElem, "type") ? ATTR(contentElem, "type") : "replacechildren"); + reply.headers["X-SCXML-XPath"] = (HAS_ATTR(contentElem, "xpath") ? ATTR(contentElem, "xpath") : "/html/body"); + if (HAS_ATTR(contentElem, "attr")) + reply.headers["X-SCXML-Attr"] = ATTR(contentElem, "attr"); } // ss << req.getFirstDOMElement(); ss << req.dom; |