otsdaq  v2_05_02_indev
SOAPCommand.cc
1 #include "otsdaq/SOAPUtilities/SOAPCommand.h"
2 #include "otsdaq/Macros/CoutMacros.h"
3 #include "otsdaq/MessageFacility/MessageFacility.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 SOAPCommand::SOAPCommand(const xoap::MessageReference& message) { translate(message); }
18 
19 //==============================================================================
20 SOAPCommand::SOAPCommand(std::string command) : command_(command) {}
21 //==============================================================================
22 SOAPCommand::SOAPCommand(std::string command, SOAPParameters parameters) : command_(command), parameters_(parameters) {}
23 
24 //==============================================================================
25 SOAPCommand::SOAPCommand(std::string command, SOAPParameter parameter) : command_(command), parameters_(parameter) {}
26 
27 //==============================================================================
28 SOAPCommand::~SOAPCommand(void) {}
29 
30 // Getters
31 //==============================================================================
32 // const xoap::MessageReference SOAPCommand::translate(void)
33 //{
34 // FIXME
35 //}
36 
37 //==============================================================================
38 const std::string& SOAPCommand::getCommand(void) const { return command_; }
39 
40 //==============================================================================
41 const SOAPParameters& SOAPCommand::getParameters(void) const { return parameters_; }
42 
43 SOAPParameters& SOAPCommand::getParametersRef() { return parameters_; }
44 
45 //==============================================================================
46 std::string SOAPCommand::getParameterValue(std::string parameterName) const
47 {
48  SOAPParameters::const_iterator it;
49  if((it = parameters_.find(parameterName)) != parameters_.end())
50  return it->second;
51  return "";
52 }
53 
54 //==============================================================================
55 unsigned int SOAPCommand::getParametersSize(void) const { return parameters_.size(); }
56 // Setters
57 //==============================================================================
58 void SOAPCommand::translate(const xoap::MessageReference& message)
59 {
60  // A SOAP message can ONLY have 1 command so we get the .begin() of the vector of
61  // commands
62  xoap::SOAPElement messageCommand = *(message->getSOAPPart().getEnvelope().getBody().getChildElements().begin());
63  command_ = messageCommand.getElementName().getLocalName();
64  DOMNamedNodeMap* parameters = messageCommand.getDOM()->getAttributes();
65  for(unsigned int i = 0; i < parameters->getLength(); i++)
66  {
67  parameters_.addParameter(xoap::XMLCh2String(parameters->item(i)->getNodeName()), xoap::XMLCh2String(parameters->item(i)->getNodeValue()));
68  }
69 }
70 
71 //==============================================================================
72 void SOAPCommand::setCommand(std::string command) { command_ = command; }
73 
74 //==============================================================================
75 void SOAPCommand::setParameters(const SOAPParameters& parameters) { parameters_ = parameters; }
76 
77 //==============================================================================
78 void SOAPCommand::setParameter(std::string parameterName, std::string parameterValue) { parameters_.addParameter(parameterName, parameterValue); }
79 
80 //==============================================================================
81 void SOAPCommand::setParameter(const SOAPParameter parameter) { parameters_.addParameter(parameter.getName(), parameter.getValue()); }
82 
83 //==============================================================================
84 bool SOAPCommand::hasParameters(void) const { return (parameters_.size() != 0); }
85 
86 //==============================================================================
87 bool SOAPCommand::findParameter(std::string parameterName) const { return (parameters_.find(parameterName) != parameters_.end()); }
88 
89 //==============================================================================
90 namespace ots
91 {
92 std::ostream& operator<<(std::ostream& os, const SOAPCommand& c)
93 {
94  os << "Command: " << c.getCommand();
95  unsigned int p = 0;
96  for(SOAPParameters::const_iterator it = (c.getParameters()).begin(); it != (c.getParameters()).end(); it++)
97  os << " Par " << p << " Name: " << it->first << " Value: " << it->second << ",";
98  return os;
99 }
100 } // namespace ots