otsdaq  v2_01_00
SOAPCommand.cc
1 #include "otsdaq-core/SOAPUtilities/SOAPCommand.h"
2 #include "otsdaq-core/MessageFacility/MessageFacility.h"
3 #include "otsdaq-core/Macros/CoutMacros.h"
4 
5 #include <xoap/SOAPElement.h>
6 #include <xoap/SOAPEnvelope.h>
7 #include <xoap/domutils.h>
8 
9 #include <iostream>
10 
11 using namespace ots;
12 
13 //========================================================================================================================
14 SOAPCommand::SOAPCommand (void)
15 {}
16 
17 //========================================================================================================================
18 SOAPCommand::SOAPCommand (const xoap::MessageReference& message)
19 {
20  translate(message);
21 }
22 
23 //========================================================================================================================
24 SOAPCommand::SOAPCommand (std::string command) :
25  command_(command)
26 {
27 }
28 //========================================================================================================================
29 SOAPCommand::SOAPCommand (std::string command, SOAPParameters parameters) :
30  command_ (command),
31  parameters_ (parameters)
32 {}
33 
34 //========================================================================================================================
35 SOAPCommand::SOAPCommand (std::string command, SOAPParameter parameter) :
36  command_ (command),
37  parameters_ (parameter)
38 {}
39 
40 //========================================================================================================================
41 SOAPCommand::~SOAPCommand(void)
42 {}
43 
44 //Getters
45 //========================================================================================================================
46 //const xoap::MessageReference SOAPCommand::translate(void)
47 //{
48  //FIXME
49 //}
50 
51 //========================================================================================================================
52 const std::string& SOAPCommand::getCommand(void) const
53 {
54  return command_;
55 }
56 
57 //========================================================================================================================
58 const SOAPParameters& SOAPCommand::getParameters(void) const
59 {
60  return parameters_;
61 }
62 
63 SOAPParameters& SOAPCommand::getParametersRef()
64 {
65  return parameters_;
66 }
67 
68 //========================================================================================================================
69 std::string SOAPCommand::getParameterValue(std::string parameterName) const
70 {
71  SOAPParameters::const_iterator it;
72  if((it=parameters_.find(parameterName)) != parameters_.end())
73  return it->second;
74  return "";
75 }
76 
77 //========================================================================================================================
78 unsigned int SOAPCommand::getParametersSize(void) const
79 {
80  return parameters_.size();
81 }
82 //Setters
83 //========================================================================================================================
84 void SOAPCommand::translate(const xoap::MessageReference& message)
85 {
86  //A SOAP message can ONLY have 1 command so we get the .begin() of the vector of commands
87  xoap::SOAPElement messageCommand = *(message->getSOAPPart().getEnvelope().getBody().getChildElements().begin());
88  command_ = messageCommand.getElementName().getLocalName();
89  DOMNamedNodeMap* parameters = messageCommand.getDOM()->getAttributes();
90  for(unsigned int i=0; i<parameters->getLength(); i++)
91  {
92 
93  parameters_.addParameter(xoap::XMLCh2String(parameters->item(i)->getNodeName()), xoap::XMLCh2String(parameters->item(i)->getNodeValue()));
94  }
95 }
96 
97 //========================================================================================================================
98 void SOAPCommand::setCommand(std::string command)
99 {
100  command_ = command;
101 }
102 
103 //========================================================================================================================
104 void SOAPCommand::setParameters(const SOAPParameters& parameters)
105 {
106  parameters_ = parameters;
107 }
108 
109 //========================================================================================================================
110 void SOAPCommand::setParameter(std::string parameterName, std::string parameterValue)
111 {
112  parameters_.addParameter(parameterName, parameterValue);
113 }
114 
115 //========================================================================================================================
116 void SOAPCommand::setParameter(const SOAPParameter parameter)
117 {
118  parameters_.addParameter(parameter.getName(), parameter.getValue());
119 }
120 
121 //========================================================================================================================
122 bool SOAPCommand::hasParameters(void) const
123 {
124  return (parameters_.size() != 0);
125 }
126 
127 //========================================================================================================================
128 bool SOAPCommand::findParameter(std::string parameterName) const
129 {
130  return (parameters_.find(parameterName) != parameters_.end());
131 }
132 
133 //========================================================================================================================
134 namespace ots
135 {
136  std::ostream& operator<<(std::ostream& os, const SOAPCommand& c)
137 {
138  os << "Command: " << c.getCommand();
139  unsigned int p=0;
140  for(SOAPParameters::const_iterator it=(c.getParameters()).begin(); it!=(c.getParameters()).end(); it++)
141  os << " Par " << p << " Name: " << it->first << " Value: " << it->second << ",";
142  return os;
143 }
144 }