2010-06-21 Marek Habersack <mhabersack@novell.com>
[mcs.git] / class / System.Web.Services / System.Web.Services.Protocols / MimeFormatter.cs
blobbc402f12ec2147535d84bfc3b1b90c25eb561d4b
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 //
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.
32 using System.Web.Services;
33 using System.Xml;
35 namespace System.Web.Services.Protocols {
36 public abstract class MimeFormatter {
38 #region Constructors
40 protected MimeFormatter ()
44 #endregion // Constructors
46 #region Methods
48 public static MimeFormatter CreateInstance (Type type, object initializer)
50 MimeFormatter ob = (MimeFormatter) Activator.CreateInstance (type);
51 ob.Initialize (initializer);
52 return ob;
55 public abstract object GetInitializer (LogicalMethodInfo methodInfo);
57 public static object GetInitializer (Type type, LogicalMethodInfo methodInfo)
59 MimeFormatter ob = (MimeFormatter) Activator.CreateInstance (type);
60 return ob.GetInitializer (methodInfo);
63 public virtual object[] GetInitializers (LogicalMethodInfo[] methodInfos)
65 object[] initializers = new object [methodInfos.Length];
66 for (int n=0; n<methodInfos.Length; n++)
67 initializers [n] = GetInitializer (methodInfos[n]);
69 return initializers;
72 public static object[] GetInitializers (Type type, LogicalMethodInfo[] methodInfos)
74 MimeFormatter ob = (MimeFormatter) Activator.CreateInstance (type);
75 return ob.GetInitializers (methodInfos);
78 public abstract void Initialize (object initializer);
80 internal static object StringToObj (Type type, string value)
82 if (type.IsEnum)
83 return Enum.Parse (type, value);
85 switch (Type.GetTypeCode (type))
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];
105 throw new InvalidOperationException ("Type not supported");
108 internal static string ObjToString (object value)
110 if (value == null) return "";
111 switch (Type.GetTypeCode (value.GetType ()))
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;
129 if (value.GetType().IsEnum)
130 return value.ToString ();
132 throw new InvalidOperationException ("Type not supported");
135 #endregion // Methods