* ExtensionManager.cs: Read extension types from the configuration file.
[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                         importer.Import (this, codeNamespace, codeCompileUnit, importInfo);\r
92                         \r
93                         return importer.Warnings;\r
94                 }\r
95                 \r
96                 ProtocolImporter GetImporter ()\r
97                 {\r
98                         switch ((protocolName != null && protocolName != "") ? protocolName : "Soap")\r
99                         {\r
100                                 case "Soap": return new SoapProtocolImporter ();\r
101                                 default: throw new NotSupportedException ();\r
102                         }\r
103                 }\r
104 #endregion\r
105         }\r
106 \r
107         internal class ImportInfo\r
108         {\r
109                 public ServiceDescription ServiceDescription;\r
110                 public string AppSettingUrlKey;\r
111                 public string AppSettingBaseUrl;\r
112         }\r
113 \r
114 }