2004-03-23 Umadevi S (sumadevi@novell.com)
[mono.git] / mcs / class / System.Data / System.Data.OleDb / OleDbParameterCollection.cs
index c31b7ed400402e3a6f83dd3c6ed03de53abe1e3b..e1dd3d1ab355acff536e72a42aaa54009d575583 100644 (file)
@@ -3,42 +3,95 @@
 //
 // Author:
 //   Rodrigo Moya (rodrigo@ximian.com)
+//   Tim Coleman (tim@timcoleman.com)
+//   Umadevi S  (sumadevi@novell.com)
 //
 // Copyright (C) Rodrigo Moya, 2002
+// Copyright (C) Tim Coleman, 2002
+// Copyright (C) Novell Inc.
 //
 
 using System.Collections;
 using System.Data;
 using System.Data.Common;
+using System.ComponentModel;
 
 namespace System.Data.OleDb
 {
+        [ListBindable (false)]
+        [EditorAttribute ("Microsoft.VSDesigner.Data.Design.DBParametersEditor, "+ Consts.AssemblyMicrosoft_VSDesigner, "System.Drawing.Design.UITypeEditor, "+ Consts.AssemblySystem_Drawing )]
        public sealed class OleDbParameterCollection : MarshalByRefObject,
                IDataParameterCollection, IList, ICollection, IEnumerable
        {
-               private ArrayList m_list = new ArrayList ();
+               #region Fields
 
-               /*
-                * Properties
-                */
+               ArrayList list = new ArrayList ();
 
-               int ICollection.Count {
-                       get {
-                               return m_list.Count;
-                       }
+               #endregion // Fields
+
+               #region Constructors
+                                                                                                    
+                public OleDbParameterCollection () {
+                }
+                                                                                                    
+                #endregion // Constructors
+       
+               #region Properties
+               
+               [Browsable (false)]
+                [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               public int Count {
+                       get { return list.Count; }
+               }
+               
+               [Browsable (false)]
+                [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               public OleDbParameter this[int index] {
+                       get { return (OleDbParameter) list[index]; }
+                       set { list[index] = value; }
                }
 
-               public IDataParameter this[int index]
-               {
+               [Browsable (false)]
+                [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               public OleDbParameter this[string parameterName] {
                        get {
-                               return (OleDbParameter) m_list[index];
-                       }
-                       set {
-                               m_list[index] = value;
-                       }
+                                foreach (OleDbParameter p in list)
+                                        if (p.ParameterName.Equals (parameterName))
+                                                return p; 
+                               throw new IndexOutOfRangeException ("The specified name does not exist: " + parameterName);
+                        }
+                        set {
+                                if (!Contains (parameterName))                                                                                         throw new IndexOutOfRangeException("The specified name does not exist: " + parameterName);
+                                this [IndexOf (parameterName)] = value;
+                        }                                                                                           
+               }
+
+               int ICollection.Count {
+                       get { return list.Count; }
+               }
+
+               bool IList.IsFixedSize {
+                       get { return false; }
+               }
+               
+               bool IList.IsReadOnly {
+                       get { return false; }
+               }
+               
+               bool ICollection.IsSynchronized {
+                       get { return list.IsSynchronized; }
                }
 
-               public object this[string name]
+               object ICollection.SyncRoot {
+                       get { return list.SyncRoot; }
+               }
+               
+               object IList.this[int index] {
+                       get { return list[index]; }
+                       set { list[index] = value; }
+               }
+
+               object IDataParameterCollection.this[string name]
                {
                        [MonoTODO]
                        get {
@@ -50,70 +103,85 @@ namespace System.Data.OleDb
                        }
                }
 
-               /*
-                * Methods
-                */
-
-               int IList.Add (object value)
-               {
-                       if (!(value is IDataParameter))
-                               throw new InvalidCastException ();
+               internal IntPtr GdaParameterList {
+                       [MonoTODO]
+                       get {
+                               IntPtr param_list;
 
-                       m_list.Add (value);
-                       return m_list.IndexOf (value);
+                               param_list = libgda.gda_parameter_list_new ();
+                               // FIXME: add parameters to list
+                               
+                               return param_list;
+                       }
                }
 
+               #endregion // Properties
+
+               #region Methods
+               
+                public int Add (object value) {
+                         if (!(value is OleDbParameter))
+                                throw new InvalidCastException ("The parameter was not an OleDbParameter.");                      
+                        Add ((OleDbParameter) value);                      
+                        return IndexOf (value);
+                }
+                                                                                                    
                public OleDbParameter Add (OleDbParameter parameter)
                {
-                       m_list.Add (parameter);
-                       return parameter;
+                         if (parameter.Container != null)
+                                throw new ArgumentException ("The OleDbParameter specified in the value parameter is already added to this or another OleDbParameterCollection.");
+                                                                                                    
+                        parameter.Container = this;
+                        list.Add (parameter);
+                        return parameter;
                }
 
                public OleDbParameter Add (string name, object value)
                {
-                       OleDbParameter parameter = new OleDbParameter (name, value);
-                       m_list.Add (parameter);
-                       return parameter;
+                       return Add (new OleDbParameter (name, value));  
                }
 
                public OleDbParameter Add (string name, OleDbType type)
                {
-                       OleDbParameter parameter = new OleDbParameter (name, type);
-                       m_list.Add (parameter);
-                       return parameter;
+                       return Add (new OleDbParameter (name, type));
                }
 
                public OleDbParameter Add (string name, OleDbType type, int width)
                {
-                       OleDbParameter parameter = new OleDbParameter (name, type, width);
-                       m_list.Add (parameter);
-                       return parameter;
+                       return Add (new OleDbParameter (name, type, width));
                }
 
                public OleDbParameter Add (string name, OleDbType type,
                                           int width, string src_col)
                {
-                       OleDbParameter parameter = new OleDbParameter (name, type, width, src_col);
-                       m_list.Add (parameter);
-                       return parameter;
+                       return Add (new OleDbParameter (name, type, width, src_col));
+               }
+
+               int IList.Add (object value)
+               {
+                       if (!(value is IDataParameter))
+                               throw new InvalidCastException ();
+
+                       list.Add (value);
+                       return list.IndexOf (value);
                }
 
                void IList.Clear ()
                {
-                       m_list.Clear ();
+                       list.Clear ();
                }
 
                bool IList.Contains (object value)
                {
-                       return m_list.Contains (value);
+                       return list.Contains (value);
                }
 
                bool IDataParameterCollection.Contains (string value)
                {
-                       for (int i = 0; i < m_list.Count; i++) {
-                               OleDbParameter parameter;
+                       for (int i = 0; i < list.Count; i++) {
+                               IDataParameter parameter;
 
-                               parameter = (OleDbParameter) m_list[i];
+                               parameter = (IDataParameter) list[i];
                                if (parameter.ParameterName == value)
                                        return true;
                        }
@@ -123,37 +191,115 @@ namespace System.Data.OleDb
 
                void ICollection.CopyTo (Array array, int index)
                {
-                       ((OleDbParameter[])(m_list.ToArray ())).CopyTo (array, index);
+                       ((OleDbParameter[])(list.ToArray ())).CopyTo (array, index);
                }
 
+               IEnumerator IEnumerable.GetEnumerator ()
+               {
+                       return list.GetEnumerator ();
+               }
+               
                int IList.IndexOf (object value)
                {
-                       return m_list.IndexOf (value);
+                       return list.IndexOf (value);
                }
 
                int IDataParameterCollection.IndexOf (string name)
                {
-                       return m_list.IndexOf ((object) this[name]);
+                       return list.IndexOf (((IDataParameterCollection) this)[name]);
                }
 
                void IList.Insert (int index, object value)
                {
-                       m_list.Insert (index, value);
+                       list.Insert (index, value);
                }
 
                void IList.Remove (object value)
                {
-                       m_list.Remove (value);
+                       list.Remove (value);
                }
 
                void IList.RemoveAt (int index)
                {
-                       m_list.Remove ((object) m_list[index]);
+                       list.Remove ((object) list[index]);
                }
 
                void IDataParameterCollection.RemoveAt (string name)
                {
-                       m_list.Remove ((object) this[name]);
+                       list.Remove (((IDataParameterCollection) this)[name]);
                }
+       
+               public void Clear() {
+                       
+                       foreach (OleDbParameter p in list)
+                                p.Container = null;
+                                                                                                    
+                        list.Clear ();
+                }
+
+               public bool Contains (object value) {
+       
+                       if (!(value is OleDbParameter))
+                                throw new InvalidCastException ("The parameter was not an OleDbParameter.");
+                        return Contains (((OleDbParameter) value).ParameterName);
+                }
+                                                                                                    
+                public bool Contains (string value) {
+                
+                        foreach (OleDbParameter p in list)
+                                if (p.ParameterName.Equals (value))
+                                        return true;
+                        return false;
+                }
+                                                                                                    
+                public void CopyTo (Array array, int index) {
+                
+                        list.CopyTo (array, index);
+                }
+                                                                                                    
+                public IEnumerator GetEnumerator() {
+                
+                        return list.GetEnumerator ();
+                }
+               
+               public int IndexOf (object value) {
+                
+                        if (!(value is OleDbParameter))
+                                throw new InvalidCastException ("The parameter was not an OleDbParameter.");
+                        return IndexOf (((OleDbParameter) value).ParameterName);
+                }
+                                                                                                    
+                public int IndexOf (string parameterName) {
+                
+                        for (int i = 0; i < Count; i += 1)
+                                if (this [i].ParameterName.Equals (parameterName))
+                                        return i;
+                        return -1;
+                }
+                                                                                                    
+                public void Insert (int index, object value) {
+                
+                        list.Insert (index, value);
+                }
+                                                                                                    
+                public void Remove (object value) {
+                
+                        ((OleDbParameter) value).Container = null;
+                        list.Remove (value);
+                }
+                                                                                                    
+                public void RemoveAt (int index) {
+                
+                        this [index].Container = null;
+                        list.RemoveAt (index);
+                }
+               
+               public void RemoveAt (string parameterName) {
+                
+                        RemoveAt (IndexOf (parameterName));
+                }
+
+
+               #endregion // Methods
        }
 }