83d762c4f98f6597e3a8e2130910be67c03bdd02
[mono.git] / mcs / class / System.Web.Services / System.Web.Services.Description / ServiceDescriptionFormatExtensionCollection.cs
1 // \r
2 // System.Web.Services.Description.ServiceDescriptionFormatExtensionCollection.cs\r
3 //\r
4 // Author:\r
5 //   Tim Coleman (tim@timcoleman.com)\r
6 //\r
7 // Copyright (C) Tim Coleman, 2002\r
8 //\r
9
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 \r
31 using System.Collections;\r
32 using System.Web.Services;\r
33 using System.Xml;\r
34 \r
35 namespace System.Web.Services.Description {\r
36         public sealed class ServiceDescriptionFormatExtensionCollection : ServiceDescriptionBaseCollection {\r
37                 \r
38                 #region Constructors\r
39         \r
40                 public ServiceDescriptionFormatExtensionCollection (object parent) \r
41                         : base (parent)\r
42                 {\r
43                 }\r
44 \r
45                 #endregion // Constructors\r
46 \r
47                 #region Properties\r
48 \r
49                 public object this [int index] {\r
50                         get { \r
51                                 if (index < 0 || index > Count)\r
52                                         throw new ArgumentOutOfRangeException ();\r
53 \r
54                                 return List[index]; \r
55                         }\r
56                         set { List[index] = value; }\r
57                 }\r
58 \r
59                 #endregion // Properties\r
60 \r
61                 #region Methods\r
62 \r
63                 public int Add (object extension) \r
64                 {\r
65                         Insert (Count, extension);\r
66                         return (Count - 1);\r
67                 }\r
68 \r
69                 public bool Contains (object extension)\r
70                 {\r
71                         return List.Contains (extension);\r
72                 }\r
73 \r
74                 public void CopyTo (object[] array, int index) \r
75                 {\r
76                         List.CopyTo (array, index);\r
77                 }\r
78 \r
79                 public object Find (Type type)\r
80                 {\r
81                         foreach (object value in List)\r
82                                 if (type.IsAssignableFrom (value.GetType ()))\r
83                                         return value;\r
84                         return null;\r
85                 }\r
86 \r
87                 public XmlElement Find (string name, string ns)\r
88                 {\r
89                         XmlElement xmlElement;\r
90                         foreach (object value in List) \r
91                                 if (value is XmlElement) {\r
92                                         xmlElement = (value as XmlElement);\r
93                                         if (xmlElement.Name == name && xmlElement.NamespaceURI == ns)\r
94                                                 return xmlElement;\r
95                                 }\r
96                         return null;\r
97                 }\r
98 \r
99                 public object[] FindAll (Type type)\r
100                 {\r
101                         ArrayList searchResults = new ArrayList ();\r
102                         foreach (object value in List)\r
103                                 if (value.GetType () == type)\r
104                                         searchResults.Add (value);\r
105                         object[] returnValue = new object [searchResults.Count];\r
106 \r
107                         if (searchResults.Count > 0)\r
108                                 searchResults.CopyTo (returnValue);\r
109 \r
110                         return returnValue;\r
111                 }\r
112 \r
113                 public XmlElement[] FindAll (string name, string ns)\r
114                 {\r
115                         ArrayList searchResults = new ArrayList ();\r
116                         XmlElement xmlElement;\r
117 \r
118                         foreach (object value in List)\r
119                                 if (value is XmlElement) {\r
120                                         xmlElement = (value as XmlElement);\r
121                                         if (xmlElement.Name == name && xmlElement.NamespaceURI == ns)\r
122                                                 searchResults.Add (xmlElement);\r
123                                 }\r
124 \r
125                         XmlElement[] returnValue = new XmlElement [searchResults.Count];\r
126 \r
127                         if (searchResults.Count > 0)\r
128                                 searchResults.CopyTo (returnValue);\r
129 \r
130                         return returnValue;\r
131                 }\r
132 \r
133                 public int IndexOf (object extension)\r
134                 {\r
135                         return List.IndexOf (extension);\r
136                 }\r
137 \r
138                 public void Insert (int index, object extension)\r
139                 {\r
140                         List.Insert (index, extension);\r
141                 }\r
142 \r
143                 [MonoTODO]\r
144                 public bool IsHandled (object item)\r
145                 {\r
146                         throw new NotImplementedException ();\r
147                 }\r
148 \r
149                 [MonoTODO]\r
150                 public bool IsRequired (object item)\r
151                 {\r
152                         throw new NotImplementedException ();\r
153                 }\r
154         \r
155                 protected override void OnValidate (object value)\r
156                 {\r
157                         if (value == null)\r
158                                 throw new ArgumentNullException ();\r
159                         if (!(value is XmlElement || value is ServiceDescriptionFormatExtension))\r
160                                 throw new ArgumentException ();\r
161                 }\r
162         \r
163                 public void Remove (object extension)\r
164                 {\r
165                         List.Remove (extension);\r
166                 }\r
167                         \r
168                 protected override void SetParent (object value, object parent)\r
169                 {\r
170                         ((ServiceDescriptionFormatExtension) value).SetParent (parent);\r
171                 }\r
172                         \r
173                 #endregion // Methods\r
174         }\r
175 }\r