2004-03-18 Umadevi S (sumadevi@novell.com)
[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 using System.Collections;
15 using System.Data;
16 using System.Data.Common;
17 using System.ComponentModel;
18
19 namespace System.Data.OleDb
20 {
21         [ListBindable (false)]
22         [EditorAttribute ("Microsoft.VSDesigner.Data.Design.DBParametersEditor, "+ Consts.AssemblyMicrosoft_VSDesigner, "System.Drawing.Design.UITypeEditor, "+ Consts.AssemblySystem_Drawing )]
23         public sealed class OleDbParameterCollection : MarshalByRefObject,
24                 IDataParameterCollection, IList, ICollection, IEnumerable
25         {
26                 #region Fields
27
28                 ArrayList list = new ArrayList ();
29
30                 #endregion // Fields
31
32                 #region Constructors
33                                                                                                     
34                 public OleDbParameterCollection () {
35                 }
36                                                                                                     
37                 #endregion // Constructors
38         
39                 #region Properties
40                 
41                 [Browsable (false)]
42                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
43                 public int Count {
44                         get { return list.Count; }
45                 }
46                 
47                 [Browsable (false)]
48                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
49                 public OleDbParameter this[int index] {
50                         get { return (OleDbParameter) list[index]; }
51                         set { list[index] = value; }
52                 }
53
54                 [Browsable (false)]
55                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
56                 public OleDbParameter this[string parameterName] {
57                         get {
58                                 foreach (OleDbParameter p in list)
59                                         if (p.ParameterName.Equals (parameterName))
60                                                 return p; 
61                                 throw new IndexOutOfRangeException ("The specified name does not exist: " + parameterName);
62                         }
63                         set {
64                                 if (!Contains (parameterName))                                                                                  throw new IndexOutOfRangeException("The specified name does not exist: " + parameterName);
65                                 this [IndexOf (parameterName)] = value;
66                         }                                                                                           
67                 }
68
69                 int ICollection.Count {
70                         get { return list.Count; }
71                 }
72
73                 bool IList.IsFixedSize {
74                         get { return false; }
75                 }
76                 
77                 bool IList.IsReadOnly {
78                         get { return false; }
79                 }
80                 
81                 bool ICollection.IsSynchronized {
82                         get { return list.IsSynchronized; }
83                 }
84
85                 object ICollection.SyncRoot {
86                         get { return list.SyncRoot; }
87                 }
88                 
89                 object IList.this[int index] {
90                         get { return list[index]; }
91                         set { list[index] = value; }
92                 }
93
94                 object IDataParameterCollection.this[string name]
95                 {
96                         [MonoTODO]
97                         get {
98                                 throw new NotImplementedException ();
99                         }
100                         [MonoTODO]
101                         set {
102                                 throw new NotImplementedException ();
103                         }
104                 }
105
106                 internal IntPtr GdaParameterList {
107                         [MonoTODO]
108                         get {
109                                 IntPtr param_list;
110
111                                 param_list = libgda.gda_parameter_list_new ();
112                                 // FIXME: add parameters to list
113                                 
114                                 return param_list;
115                         }
116                 }
117
118                 #endregion // Properties
119
120                 #region Methods
121                 
122                  public int Add (object value) {
123                          if (!(value is OleDbParameter))
124                                 throw new InvalidCastException ("The parameter was not an OleDbParameter.");                      
125                          Add ((OleDbParameter) value);                      
126                          return IndexOf (value);
127                 }
128                                                                                                     
129                 public OleDbParameter Add (OleDbParameter parameter)
130                 {
131                           if (parameter.Container != null)
132                                 throw new ArgumentException ("The OleDbParameter specified in the value parameter is already added to this or another OleDbParameterCollection.");
133                                                                                                     
134                         parameter.Container = this;
135                         list.Add (parameter);
136                         return parameter;
137                 }
138
139                 public OleDbParameter Add (string name, object value)
140                 {
141                         return Add (new OleDbParameter (name, value));  
142                 }
143
144                 public OleDbParameter Add (string name, OleDbType type)
145                 {
146                         return Add (new OleDbParameter (name, type));
147                 }
148
149                 public OleDbParameter Add (string name, OleDbType type, int width)
150                 {
151                         return Add (new OleDbParameter (name, type, width));
152                 }
153
154                 public OleDbParameter Add (string name, OleDbType type,
155                                            int width, string src_col)
156                 {
157                         return Add (new OleDbParameter (name, type, width, src_col));
158                 }
159
160                 int IList.Add (object value)
161                 {
162                         if (!(value is IDataParameter))
163                                 throw new InvalidCastException ();
164
165                         list.Add (value);
166                         return list.IndexOf (value);
167                 }
168
169                 void IList.Clear ()
170                 {
171                         list.Clear ();
172                 }
173
174                 bool IList.Contains (object value)
175                 {
176                         return list.Contains (value);
177                 }
178
179                 bool IDataParameterCollection.Contains (string value)
180                 {
181                         for (int i = 0; i < list.Count; i++) {
182                                 IDataParameter parameter;
183
184                                 parameter = (IDataParameter) list[i];
185                                 if (parameter.ParameterName == value)
186                                         return true;
187                         }
188
189                         return false;
190                 }
191
192                 void ICollection.CopyTo (Array array, int index)
193                 {
194                         ((OleDbParameter[])(list.ToArray ())).CopyTo (array, index);
195                 }
196
197                 IEnumerator IEnumerable.GetEnumerator ()
198                 {
199                         return list.GetEnumerator ();
200                 }
201                 
202                 int IList.IndexOf (object value)
203                 {
204                         return list.IndexOf (value);
205                 }
206
207                 int IDataParameterCollection.IndexOf (string name)
208                 {
209                         return list.IndexOf (((IDataParameterCollection) this)[name]);
210                 }
211
212                 void IList.Insert (int index, object value)
213                 {
214                         list.Insert (index, value);
215                 }
216
217                 void IList.Remove (object value)
218                 {
219                         list.Remove (value);
220                 }
221
222                 void IList.RemoveAt (int index)
223                 {
224                         list.Remove ((object) list[index]);
225                 }
226
227                 void IDataParameterCollection.RemoveAt (string name)
228                 {
229                         list.Remove (((IDataParameterCollection) this)[name]);
230                 }
231         
232                 public void Clear() {
233                        
234                         foreach (OleDbParameter p in list)
235                                 p.Container = null;
236                                                                                                     
237                         list.Clear ();
238                 }
239
240                 public bool Contains (object value) {
241         
242                         if (!(value is OleDbParameter))
243                                 throw new InvalidCastException ("The parameter was not an OleDbParameter.");
244                         return Contains (((OleDbParameter) value).ParameterName);
245                 }
246                                                                                                     
247                 public bool Contains (string value) {
248                 
249                         foreach (OleDbParameter p in list)
250                                 if (p.ParameterName.Equals (value))
251                                         return true;
252                         return false;
253                 }
254                                                                                                     
255                 public void CopyTo (Array array, int index) {
256                 
257                         list.CopyTo (array, index);
258                 }
259                                                                                                     
260                 public IEnumerator GetEnumerator() {
261                 
262                         return list.GetEnumerator ();
263                 }
264                 
265                 public int IndexOf (object value) {
266                 
267                         if (!(value is OleDbParameter))
268                                 throw new InvalidCastException ("The parameter was not an OleDbParameter.");
269                         return IndexOf (((OleDbParameter) value).ParameterName);
270                 }
271                                                                                                     
272                 public int IndexOf (string parameterName) {
273                 
274                         for (int i = 0; i < Count; i += 1)
275                                 if (this [i].ParameterName.Equals (parameterName))
276                                         return i;
277                         return -1;
278                 }
279                                                                                                     
280                 public void Insert (int index, object value) {
281                 
282                         list.Insert (index, value);
283                 }
284                                                                                                     
285                 public void Remove (object value) {
286                 
287                         ((OleDbParameter) value).Container = null;
288                         list.Remove (value);
289                 }
290                                                                                                     
291                 public void RemoveAt (int index) {
292                 
293                         this [index].Container = null;
294                         list.RemoveAt (index);
295                 }
296                 
297                 public void RemoveAt (string parameterName) {
298                 
299                         RemoveAt (IndexOf (parameterName));
300                 }
301
302
303                 #endregion // Methods
304         }
305 }