2005-08-16 Marek Safar <marek.safar@seznam.cz>
[mono.git] / mcs / class / System.Data / System.Data.OleDb / OleDbParameterCollection.cs
1 //
2 // System.Data.OleDb.OleDbParameterCollection
3 //
4 // Author:
5 //   Rodrigo Moya (rodrigo@ximian.com)
6 //   Tim Coleman (tim@timcoleman.com)
7 //   Umadevi S   (sumadevi@novell.com)
8 //
9 // Copyright (C) Rodrigo Moya, 2002
10 // Copyright (C) Tim Coleman, 2002
11 // Copyright (C) Novell Inc.
12 //
13
14 //
15 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
16 //
17 // Permission is hereby granted, free of charge, to any person obtaining
18 // a copy of this software and associated documentation files (the
19 // "Software"), to deal in the Software without restriction, including
20 // without limitation the rights to use, copy, modify, merge, publish,
21 // distribute, sublicense, and/or sell copies of the Software, and to
22 // permit persons to whom the Software is furnished to do so, subject to
23 // the following conditions:
24 // 
25 // The above copyright notice and this permission notice shall be
26 // included in all copies or substantial portions of the Software.
27 // 
28 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 //
36
37 using System.Collections;
38 using System.Data;
39 using System.Data.Common;
40 using System.ComponentModel;
41
42 namespace System.Data.OleDb
43 {
44         [ListBindable (false)]
45         [EditorAttribute ("Microsoft.VSDesigner.Data.Design.DBParametersEditor, "+ Consts.AssemblyMicrosoft_VSDesigner, "System.Drawing.Design.UITypeEditor, "+ Consts.AssemblySystem_Drawing )]
46         public sealed class OleDbParameterCollection : MarshalByRefObject,
47                 IDataParameterCollection, IList, ICollection, IEnumerable
48         {
49                 #region Fields
50
51                 ArrayList list = new ArrayList ();
52
53                 #endregion // Fields
54
55                 #region Constructors
56                                                                                                     
57                 internal OleDbParameterCollection () {
58                 }
59                                                                                                     
60                 #endregion // Constructors
61         
62                 #region Properties
63                 
64                 [Browsable (false)]
65                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
66                 public int Count {
67                         get { return list.Count; }
68                 }
69                 
70                 [Browsable (false)]
71                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
72                 public OleDbParameter this[int index] {
73                         get { return (OleDbParameter) list[index]; }
74                         set { list[index] = value; }
75                 }
76
77                 [Browsable (false)]
78                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
79                 public OleDbParameter this[string parameterName] {
80                         get {
81                                 foreach (OleDbParameter p in list)
82                                         if (p.ParameterName.Equals (parameterName))
83                                                 return p; 
84                                 throw new IndexOutOfRangeException ("The specified name does not exist: " + parameterName);
85                         }
86                         set {
87                                 if (!Contains (parameterName))                                                                                  throw new IndexOutOfRangeException("The specified name does not exist: " + parameterName);
88                                 this [IndexOf (parameterName)] = value;
89                         }                                                                                           
90                 }
91
92                 int ICollection.Count {
93                         get { return list.Count; }
94                 }
95
96                 bool IList.IsFixedSize {
97                         get { return false; }
98                 }
99                 
100                 bool IList.IsReadOnly {
101                         get { return false; }
102                 }
103                 
104                 bool ICollection.IsSynchronized {
105                         get { return list.IsSynchronized; }
106                 }
107
108                 object ICollection.SyncRoot {
109                         get { return list.SyncRoot; }
110                 }
111                 
112                 object IList.this[int index] {
113                         get { return list[index]; }
114                         set { list[index] = value; }
115                 }
116
117                 object IDataParameterCollection.this[string name]
118                 {
119                         [MonoTODO]
120                         get {
121                                 throw new NotImplementedException ();
122                         }
123                         [MonoTODO]
124                         set {
125                                 throw new NotImplementedException ();
126                         }
127                 }
128
129                 internal IntPtr GdaParameterList {
130                         [MonoTODO]
131                         get {
132                                 IntPtr param_list;
133
134                                 param_list = libgda.gda_parameter_list_new ();
135                                 // FIXME: add parameters to list
136                                 
137                                 return param_list;
138                         }
139                 }
140
141                 #endregion // Properties
142
143                 #region Methods
144                 
145                  public int Add (object value) {
146                          if (!(value is OleDbParameter))
147                                 throw new InvalidCastException ("The parameter was not an OleDbParameter.");                      
148                          Add ((OleDbParameter) value);                      
149                          return IndexOf (value);
150                 }
151                                                                                                     
152                 public OleDbParameter Add (OleDbParameter parameter)
153                 {
154                           if (parameter.Container != null)
155                                 throw new ArgumentException ("The OleDbParameter specified in the value parameter is already added to this or another OleDbParameterCollection.");
156                                                                                                     
157                         parameter.Container = this;
158                         list.Add (parameter);
159                         return parameter;
160                 }
161
162                 public OleDbParameter Add (string name, object value)
163                 {
164                         return Add (new OleDbParameter (name, value));  
165                 }
166
167                 public OleDbParameter Add (string name, OleDbType type)
168                 {
169                         return Add (new OleDbParameter (name, type));
170                 }
171
172                 public OleDbParameter Add (string name, OleDbType type, int width)
173                 {
174                         return Add (new OleDbParameter (name, type, width));
175                 }
176
177                 public OleDbParameter Add (string name, OleDbType type,
178                                            int width, string src_col)
179                 {
180                         return Add (new OleDbParameter (name, type, width, src_col));
181                 }
182
183                 int IList.Add (object value)
184                 {
185                         if (!(value is IDataParameter))
186                                 throw new InvalidCastException ();
187
188                         list.Add (value);
189                         return list.IndexOf (value);
190                 }
191
192                 void IList.Clear ()
193                 {
194                         list.Clear ();
195                 }
196
197                 bool IList.Contains (object value)
198                 {
199                         return list.Contains (value);
200                 }
201
202                 bool IDataParameterCollection.Contains (string value)
203                 {
204                         for (int i = 0; i < list.Count; i++) {
205                                 IDataParameter parameter;
206
207                                 parameter = (IDataParameter) list[i];
208                                 if (parameter.ParameterName == value)
209                                         return true;
210                         }
211
212                         return false;
213                 }
214
215                 void ICollection.CopyTo (Array array, int index)
216                 {
217                         ((OleDbParameter[])(list.ToArray ())).CopyTo (array, index);
218                 }
219
220                 IEnumerator IEnumerable.GetEnumerator ()
221                 {
222                         return list.GetEnumerator ();
223                 }
224                 
225                 int IList.IndexOf (object value)
226                 {
227                         return list.IndexOf (value);
228                 }
229
230                 int IDataParameterCollection.IndexOf (string name)
231                 {
232                         return list.IndexOf (((IDataParameterCollection) this)[name]);
233                 }
234
235                 void IList.Insert (int index, object value)
236                 {
237                         list.Insert (index, value);
238                 }
239
240                 void IList.Remove (object value)
241                 {
242                         list.Remove (value);
243                 }
244
245                 void IList.RemoveAt (int index)
246                 {
247                         list.Remove ((object) list[index]);
248                 }
249
250                 void IDataParameterCollection.RemoveAt (string name)
251                 {
252                         list.Remove (((IDataParameterCollection) this)[name]);
253                 }
254         
255                 public void Clear() {
256                        
257                         foreach (OleDbParameter p in list)
258                                 p.Container = null;
259                                                                                                     
260                         list.Clear ();
261                 }
262
263                 public bool Contains (object value) {
264         
265                         if (!(value is OleDbParameter))
266                                 throw new InvalidCastException ("The parameter was not an OleDbParameter.");
267                         return Contains (((OleDbParameter) value).ParameterName);
268                 }
269                                                                                                     
270                 public bool Contains (string value) {
271                 
272                         foreach (OleDbParameter p in list)
273                                 if (p.ParameterName.Equals (value))
274                                         return true;
275                         return false;
276                 }
277                                                                                                     
278                 public void CopyTo (Array array, int index) {
279                 
280                         list.CopyTo (array, index);
281                 }
282                                                                                                     
283                 public IEnumerator GetEnumerator() {
284                 
285                         return list.GetEnumerator ();
286                 }
287                 
288                 public int IndexOf (object value) {
289                 
290                         if (!(value is OleDbParameter))
291                                 throw new InvalidCastException ("The parameter was not an OleDbParameter.");
292                         return IndexOf (((OleDbParameter) value).ParameterName);
293                 }
294                                                                                                     
295                 public int IndexOf (string parameterName) {
296                 
297                         for (int i = 0; i < Count; i += 1)
298                                 if (this [i].ParameterName.Equals (parameterName))
299                                         return i;
300                         return -1;
301                 }
302                                                                                                     
303                 public void Insert (int index, object value) {
304                 
305                         list.Insert (index, value);
306                 }
307                                                                                                     
308                 public void Remove (object value) {
309                 
310                         ((OleDbParameter) value).Container = null;
311                         list.Remove (value);
312                 }
313                                                                                                     
314                 public void RemoveAt (int index) {
315                 
316                         this [index].Container = null;
317                         list.RemoveAt (index);
318                 }
319                 
320                 public void RemoveAt (string parameterName) {
321                 
322                         RemoveAt (IndexOf (parameterName));
323                 }
324
325
326                 #endregion // Methods
327         }
328 }