00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _MESSAGEH
00021 #define _MESSAGEH
00022
00023 #include <string>
00024 #include <vector>
00025 #include "xmlpull/Qname.h"
00026 #include "xmlpull/wsdlpull_export.h"
00027 #include "schemaparser/Element.h"
00028 #include "wsdlparser/WsdlException.h"
00029 #include "wsdlparser/WsdlElement.h"
00030
00031 namespace WsdlPull {
00032
00033 class WSDLPULL_EXPORT Part{
00034 public:
00035
00036 typedef enum
00037 {
00038 None,
00039 Elem,
00040 Type
00041 }PartRefType;
00042
00043 Part(const std::string& n);
00044 ~Part();
00045 PartRefType refType()const;
00046 std::string name()const;
00047 int type()const;
00048 const Element* element()const;
00049 int schemaId()const;
00050 void setPartType(int typeId,int schema);
00051 void setPartElement(const Element* e,int schema);
00052 private:
00053 std::string pname;
00054 PartRefType discriminator;
00055 union {
00056 int type_id;
00057 const Element * e;
00058 };
00059 int schema_id;
00060 };
00061
00062
00063 class WSDLPULL_EXPORT Message:public WsdlElement
00064 {
00065 public:
00066
00067 Message(WsdlParser& w);
00068 ~Message();
00069
00070
00071
00072
00073
00074
00075
00076 int getNumParts(void) const;
00077
00078
00079
00080
00081
00082
00083 int getPartIndex(std::string & nam) const ;
00084
00085
00086
00087
00088
00089
00090 int getPartType(int index) const;
00091 int getPartType(const std::string & nam) const;
00092
00093
00094
00095
00096
00097
00098
00099
00100 const Element * getPartElement(int index)const;
00101
00102
00103
00104
00105
00106 const Part* getMessagePart(size_t index)const;
00107 const Part* getMessagePart(const std::string & nam)const;
00108
00109
00110
00111
00112
00113 int getPartContentSchemaId(int index) const;
00114 int getPartContentSchemaId(const std::string & nam) const;
00115
00116 std::string getPartName(int index) const;
00117 Part::PartRefType getPartRefType(const std::string & nam) const;
00118 Part::PartRefType getPartRefType(int index) const;
00119
00120
00121
00122
00123
00124
00125
00126 void addPart(std::string pname,
00127 Part::PartRefType reftype,
00128 void* d,
00129 int schema_id);
00130
00131
00132
00133
00134 private:
00135 std::vector<Part> parts;
00136 };
00137
00138 inline
00139 Message::Message(WsdlParser & w)
00140 :WsdlElement(w)
00141 {
00142 parts.clear();
00143 }
00144
00145 inline
00146 Message::~Message()
00147 {
00148 }
00149
00150
00151 inline
00152 int
00153 Message::getNumParts(void) const
00154 {
00155 return parts.size();
00156 }
00157
00158 inline
00159 std::string
00160 Message::getPartName(int index) const
00161 {
00162 return parts[index].name();
00163 }
00164
00165 inline
00166 int
00167 Message::getPartContentSchemaId(int index) const
00168 {
00169 return parts[index].schemaId();
00170 }
00171
00172 inline
00173 int
00174 Message::getPartType(int index) const
00175 {
00176 return parts[index].type();
00177 }
00178
00179 inline
00180 const Element *
00181 Message::getPartElement(int index)const
00182 {
00183 return parts[index].element();
00184 }
00185
00186 inline
00187 Part::Part(const std::string& n)
00188 :pname(n),
00189 discriminator(Part::None),
00190 e(0)
00191 {
00192 }
00193
00194 inline
00195 Part::~Part(){}
00196
00197 inline
00198 Part::PartRefType
00199 Part::refType()const
00200 {
00201 return discriminator;
00202 }
00203 inline
00204 std::string
00205 Part::name()const
00206 {
00207 return pname;
00208 }
00209
00210 inline
00211 int
00212 Part::schemaId()const
00213 {
00214 return schema_id;
00215 }
00216 }
00217 #endif