* roottypes.cs: Rename from tree.cs.
[mono.git] / mcs / class / System.XML / System.Xml.Serialization / SoapAttributes.cs
1 //\r
2 // SoapAttributes.cs: \r
3 //\r
4 // Author:\r
5 //   John Donagher (john@webmeta.com)\r
6 //\r
7 // (C) 2002 John Donagher\r
8 //\r
9 \r
10 //\r
11 // Permission is hereby granted, free of charge, to any person obtaining\r
12 // a copy of this software and associated documentation files (the\r
13 // "Software"), to deal in the Software without restriction, including\r
14 // without limitation the rights to use, copy, modify, merge, publish,\r
15 // distribute, sublicense, and/or sell copies of the Software, and to\r
16 // permit persons to whom the Software is furnished to do so, subject to\r
17 // the following conditions:\r
18 // \r
19 // The above copyright notice and this permission notice shall be\r
20 // included in all copies or substantial portions of the Software.\r
21 // \r
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
29 //\r
30 \r
31 using System.Reflection;\r
32 using System;\r
33 using System.ComponentModel;\r
34 \r
35 namespace System.Xml.Serialization\r
36 {\r
37         /// <summary>\r
38         /// Summary description for SoapAttributes.\r
39         /// </summary>\r
40         public class SoapAttributes\r
41         {\r
42                 private SoapAttributeAttribute soapAttribute;\r
43                 private object soapDefaultValue = System.DBNull.Value;\r
44                 private SoapElementAttribute soapElement;\r
45                 private SoapEnumAttribute soapEnum;\r
46                 private bool soapIgnore;\r
47                 private SoapTypeAttribute soapType;\r
48 \r
49                 public SoapAttributes ()\r
50                 {\r
51                 }\r
52                 \r
53                 public SoapAttributes (ICustomAttributeProvider provider)\r
54                 {\r
55                         object[] attributes = provider.GetCustomAttributes(false);\r
56                         foreach(object obj in attributes)\r
57                         {\r
58                                 if(obj is SoapAttributeAttribute)\r
59                                         soapAttribute = (SoapAttributeAttribute) obj;\r
60                                 else if(obj is DefaultValueAttribute)\r
61                                         soapDefaultValue = ((DefaultValueAttribute) obj).Value;\r
62                                 else if(obj is SoapElementAttribute)\r
63                                         soapElement = (SoapElementAttribute) obj;\r
64                                 else if(obj is SoapEnumAttribute)\r
65                                         soapEnum = (SoapEnumAttribute) obj;\r
66                                 else if(obj is SoapIgnoreAttribute)\r
67                                         soapIgnore = true;\r
68                                 else if(obj is SoapTypeAttribute)\r
69                                         soapType = (SoapTypeAttribute) obj;\r
70                         }\r
71                 }\r
72 \r
73                 public SoapAttributeAttribute SoapAttribute \r
74                 {\r
75                         get { return  soapAttribute; } \r
76                         set { soapAttribute = value; }\r
77                 }\r
78 \r
79                 public object SoapDefaultValue \r
80                 {\r
81                         get { return  soapDefaultValue; } \r
82                         set { soapDefaultValue = value; }\r
83                 }\r
84 \r
85                 public SoapElementAttribute SoapElement \r
86                 {\r
87                         get { return  soapElement; } \r
88                         set { soapElement = value; }\r
89                 }\r
90 \r
91                 public SoapEnumAttribute SoapEnum \r
92                 {\r
93                         get { return  soapEnum; } \r
94                         set { soapEnum = value; }\r
95                 }\r
96 \r
97                 public bool SoapIgnore\r
98                 {\r
99                         get { return  soapIgnore; } \r
100                         set { soapIgnore = value; }\r
101                 }\r
102 \r
103                 public SoapTypeAttribute SoapType \r
104                 {\r
105                         get { return  soapType; } \r
106                         set { soapType = value; }\r
107                 }\r
108                 \r
109                 internal void AddKeyHash (System.Text.StringBuilder sb)\r
110                 {\r
111                         sb.Append ("SA ");\r
112                         \r
113                         if (soapIgnore) \r
114                                 sb.Append ('i');\r
115                                 \r
116                         if (soapAttribute != null)\r
117                                 soapAttribute.AddKeyHash (sb);\r
118                                 \r
119                         if (soapElement != null)\r
120                                 soapElement.AddKeyHash (sb);\r
121                                 \r
122                         if (soapEnum != null)\r
123                                 soapEnum.AddKeyHash (sb);\r
124                                 \r
125                         if (soapType != null)\r
126                                 soapType.AddKeyHash (sb);\r
127                                 \r
128                         if (soapDefaultValue == null) {\r
129                                 sb.Append ("n");\r
130                         }\r
131                         else if (!(soapDefaultValue is System.DBNull)) {\r
132                                 string v = XmlCustomFormatter.ToXmlString (TypeTranslator.GetTypeData (soapDefaultValue.GetType()), soapDefaultValue);\r
133                                 sb.Append ("v" + v);\r
134                         }\r
135                         sb.Append ("|");\r
136                 }       \r
137         }\r
138 }\r