Salome HOME
merge from branch DEV tag mergeto_trunk_04apr08
[modules/yacs.git] / src / yacsloader / xmlrpcParsers.hxx
1
2 #ifndef _XMLRPCPARSERS_HXX_
3 #define _XMLRPCPARSERS_HXX_
4
5 #include "parserBase.hxx"
6 #include "factory.hxx"
7 #include <vector>
8 #include <string>
9
10 namespace YACS
11 {
12 /*! \brief Class for XML-RPC value parser.
13  *
14  *  This class is used to parse XML data that describes a sequence in XML-RPC format
15  *
16  *  Its XML schema is:
17    \verbatim
18      <xsd:complexType name="ValueType">
19        <xsd:choice >
20          <xsd:element name="int" type="IntType"/>
21          <xsd:element name="boolean" type="BooleanType"/>
22          <xsd:element name="double" type="DoubleType"/>
23          <xsd:element name="string" type="StringType"/>
24          <xsd:element name="objref" type="ObjrefType"/>
25          <xsd:element name="array" type="ArrayType"/>
26          <xsd:element name="struct" type="StructType"/>
27        </xsd:choice>
28      </xsd:complexType>
29    \endverbatim
30  */
31 struct valuetypeParser: parser
32 {
33   static valuetypeParser valueParser;
34   virtual void onStart(const XML_Char* el, const XML_Char** attr);
35   virtual void onEnd(const char *el,parser* child);
36   virtual void pre ();
37   virtual void int_ (const int& d);
38   virtual void boolean (const bool& d);
39   virtual void double_ (const double& d);
40   virtual void string(const std::string& d);
41   virtual void objref(const std::string& d);
42   virtual void array (const std::string& d);
43   virtual void struct_ (const std::string& d);
44   virtual std::string post();
45   std::string _data;
46   std::vector<std::string> _v;
47 };
48
49 /*! \brief Class for XML-RPC data parser.
50  *
51  *  This class is used to parse XML data that describes a sequence in XML-RPC format
52  *
53  *  Its XML schema is:
54    \verbatim
55      <xsd:complexType name="DataType">
56        <xsd:element name="value" type="ValueType"/>
57      </xsd:complexType>
58    \endverbatim
59  */
60 struct datatypeParser: parser
61 {
62   static datatypeParser dataParser;
63   virtual void onStart(const XML_Char* el, const XML_Char** attr);
64   virtual void onEnd(const char *el,parser* child);
65   virtual void pre ();
66   virtual void value (const std::string& v);
67   virtual std::string post();
68   std::string _data;
69   std::vector<std::string> _datas;
70 };
71
72 /*! \brief Class for XML-RPC member parser.
73  *
74  *  This class is used to parse XML data that describes a sequence in XML-RPC format
75  *
76  *  Its XML schema is:
77    \verbatim
78      <xsd:complexType name="MemberDataType">
79        <xsd:element name="name" type="StringType"/>
80        <xsd:element name="value" type="ValueType"/>
81      </xsd:complexType>
82    \endverbatim
83  */
84 struct memberdatatypeParser: parser
85 {
86   static memberdatatypeParser memberdataParser;
87   virtual void onStart(const XML_Char* el, const XML_Char** attr);
88   virtual void onEnd(const char *el,parser* child);
89   virtual void pre ();
90   virtual void name (const std::string& v);
91   virtual void value (const std::string& v);
92   virtual std::string post();
93   std::string _data;
94   std::vector<std::string> _datas;
95 };
96
97 /*! \brief Class for XML-RPC struct parser.
98  *
99  *  This class is used to parse XML data that describes a sequence in XML-RPC format
100  *
101  *  Its XML schema is:
102    \verbatim
103      <xsd:complexType name="StructDataType">
104        <xsd:element name="member" type="MemberDataType" minOccurs="1"/>
105      </xsd:complexType>
106    \endverbatim
107  */
108 struct structdatatypeParser: parser
109 {
110   static structdatatypeParser structdataParser;
111   virtual void onStart(const XML_Char* el, const XML_Char** attr);
112   virtual void onEnd(const char *el,parser* child);
113   virtual void pre ();
114   virtual void member (const std::string& d);
115   virtual std::string post();
116   std::string _members;
117   std::vector<std::string> _membersStack;
118 };
119
120 /*! \brief Class for XML-RPC array parser.
121  *
122  *  This class is used to parse XML data that describes a sequence in XML-RPC format
123  *
124  *  Its XML schema is:
125    \verbatim
126      <xsd:complexType name="ArrayType">
127        <xsd:element name="data" type="DataType" minOccurs="1" maxOccurs="1"/>
128      </xsd:complexType>
129    \endverbatim
130  */
131 struct arraytypeParser: parser
132 {
133   static arraytypeParser arrayParser;
134   virtual void onStart(const XML_Char* el, const XML_Char** attr);
135   virtual void onEnd(const char *el,parser* child);
136   virtual void pre ();
137   virtual void data (const std::string& d);
138   virtual std::string post();
139   std::vector<std::string> _arrays;
140 };
141
142 struct parametertypeParser: parser
143 {
144   static parametertypeParser parameterParser;
145
146   virtual void onStart(const XML_Char* el, const XML_Char** attr);
147   virtual void onEnd(const char *el,parser* child);
148     virtual void pre ();
149     virtual void tonode (const std::string& name);
150     virtual void toport (const std::string& name);
151     virtual void value (const std::string& name);
152     virtual myparam& post();
153     myparam _param;
154 };
155
156 }
157
158 #endif