* Binding.cs: removed extra XmlIgnore attribute on ServiceDescription
[mono.git] / mcs / class / System.Web.Services / System.Web.Services.Description / ServiceDescriptionImporter.cs
1 // \r
2 // System.Web.Services.Description.ServiceDescriptionImporter.cs\r
3 //\r
4 // Author:\r
5 //   Tim Coleman (tim@timcoleman.com)\r
6 //   Lluis Sanchez Gual (lluis@ximian.com)\r
7 //\r
8 // Copyright (C) Tim Coleman, 2002\r
9 //\r
10 \r
11 using System;\r
12 using System.CodeDom;\r
13 using System.Web.Services;\r
14 using System.Web.Services.Protocols;\r
15 using System.Web.Services.Description;\r
16 using System.Xml.Serialization;\r
17 using System.Xml;\r
18 using System.Collections;\r
19 using System.Configuration;\r
20 \r
21 namespace System.Web.Services.Description {\r
22         public class ServiceDescriptionImporter {\r
23 \r
24                 #region Fields\r
25 \r
26                 string protocolName;\r
27                 XmlSchemas schemas;\r
28                 ServiceDescriptionCollection serviceDescriptions;\r
29                 ServiceDescriptionImportStyle style;\r
30 \r
31                 ArrayList importInfo = new ArrayList ();\r
32                 \r
33 \r
34                 #endregion // Fields\r
35 \r
36                 #region Constructors\r
37         \r
38                 public ServiceDescriptionImporter ()\r
39                 {\r
40                         protocolName = String.Empty;\r
41                         schemas = new XmlSchemas ();\r
42                         serviceDescriptions = new ServiceDescriptionCollection ();\r
43                         style = ServiceDescriptionImportStyle.Client;\r
44                 }\r
45                 \r
46                 #endregion // Constructors\r
47 \r
48                 #region Properties\r
49 \r
50                 public string ProtocolName {\r
51                         get { return protocolName; }\r
52                         set { protocolName = value; }\r
53                 }\r
54 \r
55                 public XmlSchemas Schemas {\r
56                         get { return schemas; }\r
57                 }\r
58 \r
59                 public ServiceDescriptionCollection ServiceDescriptions {\r
60                         get { return serviceDescriptions; }\r
61                 }\r
62 \r
63                 public ServiceDescriptionImportStyle Style {\r
64                         get { return style; }\r
65                         set { style = value; }\r
66                 }\r
67         \r
68                 #endregion // Properties\r
69 \r
70                 #region Methods\r
71 \r
72                 public void AddServiceDescription (ServiceDescription serviceDescription, string appSettingUrlKey, string appSettingBaseUrl)\r
73                 {\r
74                         if (appSettingUrlKey != null && appSettingUrlKey == string.Empty && style == ServiceDescriptionImportStyle.Server)\r
75                                 throw new InvalidOperationException ("Cannot set appSettingUrlKey if Style is Server");\r
76 \r
77                         ImportInfo info = new ImportInfo ();\r
78                         info.ServiceDescription = serviceDescription;\r
79                         info.AppSettingUrlKey = appSettingUrlKey;\r
80                         info.AppSettingBaseUrl = appSettingBaseUrl;\r
81                         importInfo.Add (info);\r
82                         serviceDescriptions.Add (serviceDescription);\r
83                         \r
84                         if (serviceDescription.Types != null)\r
85                                 schemas.Add (serviceDescription.Types.Schemas);\r
86                 }\r
87 \r
88                 public ServiceDescriptionImportWarnings Import (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit)\r
89                 {\r
90                         ProtocolImporter importer = GetImporter ();\r
91                         \r
92                         if (!importer.Import (this, codeNamespace, codeCompileUnit, importInfo))\r
93                                 throw new Exception ("None of the supported bindings was found");\r
94                                 \r
95                         return importer.Warnings;\r
96                 }\r
97                 \r
98                 ProtocolImporter GetImporter ()\r
99                 {\r
100                         ArrayList importers = GetSupportedImporters ();\r
101                         if (protocolName == null || protocolName == "") protocolName = "Soap";\r
102                         foreach (ProtocolImporter importer in importers) {\r
103                                 if (importer.ProtocolName == protocolName)\r
104                                         return importer;\r
105                         }\r
106                         \r
107                         throw new Exception ("Protocol " + protocolName + " not supported");\r
108                 }\r
109                 \r
110                 ArrayList GetSupportedImporters ()\r
111                 {\r
112                         ArrayList list = new ArrayList ();\r
113                         list.Add (new SoapProtocolImporter ());\r
114                         list.Add (new HttpGetProtocolImporter ());\r
115                         list.Add (new HttpPostProtocolImporter ());\r
116                         return list;\r
117                 }\r
118                 \r
119 #endregion\r
120         }\r
121 \r
122         internal class ImportInfo\r
123         {\r
124                 public ServiceDescription ServiceDescription;\r
125                 public string AppSettingUrlKey;\r
126                 public string AppSettingBaseUrl;\r
127         }\r
128 \r
129 }