00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _Wsdl_H
00023 #define _Wsdl_H
00024
00025 #include <string>
00026 #include <list>
00027 #include <Sockets/XmlNode.h>
00028
00029
00030 class Application;
00031
00032 class Wsdl
00033 {
00034 class NSFil {
00035 public:
00036 NSFil(FILE *fil, const std::string& ns, const std::string& href = "") : m_fil(fil), m_ns(ns) {
00037 if (!m_ns.empty())
00038 {
00039 if (!href.empty())
00040 fprintf(m_fil, "/** %s */\n", href.c_str());
00041 fprintf(m_fil, "namespace %s {\n\n", m_ns.c_str());
00042 }
00043 }
00044 ~NSFil() {
00045 if (!m_ns.empty())
00046 {
00047 fprintf(m_fil, "} // namespace %s\n\n", m_ns.c_str());
00048 }
00049 }
00050 private:
00051 FILE *m_fil;
00052 std::string m_ns;
00053 };
00054
00055 public:
00056 Wsdl(Application& appl, Xml::XmlDocument& doc);
00057 ~Wsdl();
00058
00059 Application& GetApplication() const { return m_appl; }
00060
00061 const std::string GetTargetNamespace() const;
00062 const std::string GetTargetNamespacePrefix() const;
00063
00064 std::list<std::string> GetPorts() const;
00065 const std::string GetPortname() const;
00066 std::list<std::string> GetOperations(const std::string& portname) const;
00067
00068 const std::string GetSoapAction(const std::string& portname, const std::string& op) const;
00069
00070 const std::string GetMessage(const std::string& portname, const std::string& op, const std::string& type) const;
00071
00072 void ShowMessage(const std::string& msgname);
00073 void ShowElement(const Xml::XmlNode& element_node);
00074 void ShowComplexType(const Xml::XmlNode& complex);
00075
00076 std::list<std::pair<std::string, Xml::XmlNode> > GetMessageParameters(const std::string& msgname, std::string& path) const;
00077
00078 Xml::XmlNode GetPortTypeOp(const std::string& portname, const std::string& op) const;
00079 Xml::XmlNode GetBindingOp(const std::string& portname, const std::string& op) const;
00080 Xml::XmlNode GetMessage(const std::string& msgname) const;
00081 Xml::XmlNode GetSchema(const std::string& target_ns) const;
00082 Xml::XmlNode GetElement(const std::string& name) const;
00083 Xml::XmlNode FindComplexType(const std::string& ns_href, const std::string& type) const;
00084 Xml::XmlNode FindSimpleType(const std::string& ns_href, const std::string& type) const;
00085 Xml::XmlNode GetElement(const Xml::XmlNode& node, const std::string& name) const;
00086
00087 void CreateInterface();
00088 void CreateImplementation();
00089
00090 const std::string GetParent(const std::string& href, const std::string& classname) const;
00091
00092 const std::list<std::string>& ComplexTypes(const std::string& ns_href) const;
00093 const std::list<std::string>& SimpleTypes(const std::string& ns_href) const;
00094
00095 const std::string NamespaceFromHref(const std::string& href) const;
00096
00098 const std::string GetNamespace(const std::string& ns_href) const;
00099
00100 private:
00101 void ParseElements(Xml::XmlDocument& doc, const std::string& targetNs = "");
00102 void ParseElements(const Xml::XmlNode& node, const std::string& ns_href, const std::string& parent_class = "");
00103 void ParseTypes(const Xml::XmlNode& node, const std::string& ns_href);
00104 Xml::XmlNode ParseComplexType(const Xml::XmlNode& node, const std::string& ns_href, const std::string& name);
00105 void AddLicense(FILE *);
00106
00107 Application& m_appl;
00108
00110 Xml::XmlDocument& m_doc;
00111
00113 std::list<Xml::XmlDocument *> m_import;
00114
00116 std::map<std::string, std::list<std::string> > m_complexType;
00118 std::map<std::string, std::list<std::string> > m_simpleType;
00120 std::map<std::string, std::map<std::string, Xml::XmlNode> > m_complexTypeMap;
00122 std::map<std::string, std::map<std::string, Xml::XmlNode> > m_simpleTypeMap;
00123
00125 std::map<std::string, std::map<std::string, std::string> > m_parent;
00126
00127 };
00128
00129
00130
00131
00132 #endif // _Wsdl_H