00001 #include "otsdaq-core/SOAPUtilities/SOAPCommand.h"
00002 #include "otsdaq-core/MessageFacility/MessageFacility.h"
00003 #include "otsdaq-core/Macros/CoutMacros.h"
00004
00005 #include <xoap/SOAPElement.h>
00006 #include <xoap/SOAPEnvelope.h>
00007 #include <xoap/domutils.h>
00008
00009 #include <iostream>
00010
00011 using namespace ots;
00012
00013
00014 SOAPCommand::SOAPCommand (void)
00015 {}
00016
00017
00018 SOAPCommand::SOAPCommand (const xoap::MessageReference& message)
00019 {
00020 translate(message);
00021 }
00022
00023
00024 SOAPCommand::SOAPCommand (std::string command) :
00025 command_(command)
00026 {
00027 }
00028
00029 SOAPCommand::SOAPCommand (std::string command, SOAPParameters parameters) :
00030 command_ (command),
00031 parameters_ (parameters)
00032 {}
00033
00034
00035 SOAPCommand::SOAPCommand (std::string command, SOAPParameter parameter) :
00036 command_ (command),
00037 parameters_ (parameter)
00038 {}
00039
00040
00041 SOAPCommand::~SOAPCommand(void)
00042 {}
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 const std::string& SOAPCommand::getCommand(void) const
00053 {
00054 return command_;
00055 }
00056
00057
00058 const SOAPParameters& SOAPCommand::getParameters(void) const
00059 {
00060 return parameters_;
00061 }
00062
00063 SOAPParameters& SOAPCommand::getParametersRef()
00064 {
00065 return parameters_;
00066 }
00067
00068
00069 std::string SOAPCommand::getParameterValue(std::string parameterName) const
00070 {
00071 SOAPParameters::const_iterator it;
00072 if((it=parameters_.find(parameterName)) != parameters_.end())
00073 return it->second;
00074 return "";
00075 }
00076
00077
00078 unsigned int SOAPCommand::getParametersSize(void) const
00079 {
00080 return parameters_.size();
00081 }
00082
00083
00084 void SOAPCommand::translate(const xoap::MessageReference& message)
00085 {
00086
00087 xoap::SOAPElement messageCommand = *(message->getSOAPPart().getEnvelope().getBody().getChildElements().begin());
00088 command_ = messageCommand.getElementName().getLocalName();
00089 DOMNamedNodeMap* parameters = messageCommand.getDOM()->getAttributes();
00090 for(unsigned int i=0; i<parameters->getLength(); i++)
00091 {
00092
00093 parameters_.addParameter(xoap::XMLCh2String(parameters->item(i)->getNodeName()), xoap::XMLCh2String(parameters->item(i)->getNodeValue()));
00094 }
00095 }
00096
00097
00098 void SOAPCommand::setCommand(std::string command)
00099 {
00100 command_ = command;
00101 }
00102
00103
00104 void SOAPCommand::setParameters(const SOAPParameters& parameters)
00105 {
00106 parameters_ = parameters;
00107 }
00108
00109
00110 void SOAPCommand::setParameter(std::string parameterName, std::string parameterValue)
00111 {
00112 parameters_.addParameter(parameterName, parameterValue);
00113 }
00114
00115
00116 void SOAPCommand::setParameter(const SOAPParameter parameter)
00117 {
00118 parameters_.addParameter(parameter.getName(), parameter.getValue());
00119 }
00120
00121
00122 bool SOAPCommand::hasParameters(void) const
00123 {
00124 return (parameters_.size() != 0);
00125 }
00126
00127
00128 bool SOAPCommand::findParameter(std::string parameterName) const
00129 {
00130 return (parameters_.find(parameterName) != parameters_.end());
00131 }
00132
00133
00134 namespace ots
00135 {
00136 std::ostream& operator<<(std::ostream& os, const SOAPCommand& c)
00137 {
00138 os << "Command: " << c.getCommand();
00139 unsigned int p=0;
00140 for(SOAPParameters::const_iterator it=(c.getParameters()).begin(); it!=(c.getParameters()).end(); it++)
00141 os << " Par " << p << " Name: " << it->first << " Value: " << it->second << ",";
00142 return os;
00143 }
00144 }