treat DefaultWsdlHelpGenerator.jvm.aspx as DefaultWsdlHelpGenerator.aspx; correctly...
[mono.git] / mcs / class / System.Web.Services / System.Web.Services.Protocols / MimeFormatter.cs
1 // 
2 // System.Web.Services.Protocols.MimeFormatter.cs
3 //
4 // Author:
5 //   Tim Coleman (tim@timcoleman.com)
6 //   Lluis Sanchez Gual (lluis@ximian.com)
7 //
8 // Copyright (C) Tim Coleman, 2002
9 //
10
11 //
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
19 // 
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
22 // 
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 //
31
32 using System.Web.Services;
33 using System.Xml;
34
35 namespace System.Web.Services.Protocols {
36         public abstract class MimeFormatter {
37
38                 #region Constructors
39
40                 protected MimeFormatter () 
41                 {
42                 }
43                 
44                 #endregion // Constructors
45
46                 #region Methods
47
48                 public static MimeFormatter CreateInstance (Type type, object initializer)
49                 {
50                         MimeFormatter ob = (MimeFormatter) Activator.CreateInstance (type);
51                         ob.Initialize (initializer);
52                         return ob;
53                 }
54
55                 public abstract object GetInitializer (LogicalMethodInfo methodInfo);
56
57                 public static object GetInitializer (Type type, LogicalMethodInfo methodInfo)
58                 {
59                         MimeFormatter ob = (MimeFormatter) Activator.CreateInstance (type);
60                         return ob.GetInitializer (methodInfo);
61                 }
62
63                 public virtual object[] GetInitializers (LogicalMethodInfo[] methodInfos)
64                 {
65                         object[] initializers = new object [methodInfos.Length];
66                         for (int n=0; n<methodInfos.Length; n++)
67                                 initializers [n] = GetInitializer (methodInfos[n]);
68                                 
69                         return initializers;
70                 }
71
72                 public static object[] GetInitializers (Type type, LogicalMethodInfo[] methodInfos)
73                 {
74                         MimeFormatter ob = (MimeFormatter) Activator.CreateInstance (type);
75                         return ob.GetInitializers (methodInfos);
76                 }
77
78                 public abstract void Initialize (object initializer);   
79
80                 internal static object StringToObj (Type type, string value)
81                 {
82                         if (type.IsEnum)
83                                 return Enum.Parse (type, value);
84                         
85                         switch (Type.GetTypeCode (type))
86                         {
87                                 case TypeCode.Boolean: return XmlConvert.ToBoolean (value);
88                                 case TypeCode.Byte: return XmlConvert.ToByte (value);
89                                 case TypeCode.DateTime: return XmlConvert.ToDateTime (value);
90                                 case TypeCode.Decimal: return XmlConvert.ToDecimal (value);
91                                 case TypeCode.Double: return XmlConvert.ToDouble (value);
92                                 case TypeCode.Int16: return XmlConvert.ToInt16 (value);
93                                 case TypeCode.Int32: return XmlConvert.ToInt32 (value);
94                                 case TypeCode.Int64: return XmlConvert.ToInt64 (value);
95                                 case TypeCode.SByte: return XmlConvert.ToSByte (value);
96                                 case TypeCode.Single: return XmlConvert.ToSingle (value);
97                                 case TypeCode.UInt16: return XmlConvert.ToUInt16 (value);
98                                 case TypeCode.UInt32: return XmlConvert.ToUInt32 (value);
99                                 case TypeCode.UInt64: return XmlConvert.ToUInt64 (value);
100                                 case TypeCode.String: return value;
101                                 case TypeCode.Char:
102                                         if (value.Length != 1) throw new InvalidOperationException ("Invalid char value");
103                                         return value [0];
104                         }
105                         throw new InvalidOperationException ("Type not supported");
106                 }
107
108                 internal static string ObjToString (object value)
109                 {
110                         if (value == null) return "";
111                         switch (Type.GetTypeCode (value.GetType ()))
112                         {
113                                 case TypeCode.Boolean: return XmlConvert.ToString ((bool)value);
114                                 case TypeCode.Byte: return XmlConvert.ToString ((byte)value);
115                                 case TypeCode.Char: return XmlConvert.ToString ((char)value);
116                                 case TypeCode.DateTime: return XmlConvert.ToString ((DateTime)value);
117                                 case TypeCode.Decimal: return XmlConvert.ToString ((decimal)value);
118                                 case TypeCode.Double: return XmlConvert.ToString ((double)value);
119                                 case TypeCode.Int16: return XmlConvert.ToString ((Int16)value);
120                                 case TypeCode.Int32: return XmlConvert.ToString ((Int32)value);
121                                 case TypeCode.Int64: return XmlConvert.ToString ((Int64)value);
122                                 case TypeCode.SByte: return XmlConvert.ToString ((sbyte)value);
123                                 case TypeCode.Single: return XmlConvert.ToString ((Single)value);
124                                 case TypeCode.UInt16: return XmlConvert.ToString ((UInt16)value);
125                                 case TypeCode.UInt32: return XmlConvert.ToString ((UInt32)value);
126                                 case TypeCode.UInt64: return XmlConvert.ToString ((UInt64)value);
127                                 case TypeCode.String: return value as string;
128                         }
129                         if (value.GetType().IsEnum)
130                                 return value.ToString ();
131
132                         throw new InvalidOperationException ("Type not supported");
133                 }
134                 
135                 #endregion // Methods
136         }
137 }