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/element/respond/RespondElement.cpp | |
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/element/respond/RespondElement.cpp')
-rw-r--r-- | src/uscxml/plugins/element/respond/RespondElement.cpp | 35 |
1 files changed, 19 insertions, 16 deletions
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) { } |