2002-05-24 Tim Coleman <tim@timcoleman.com>
[mono.git] / mcs / class / System.Data / System.Data.Common / DataColumnMappingCollection.cs
1 //
2 // System.Data.Common.DataColumnCollection
3 //
4 // Author:
5 //   Rodrigo Moya (rodrigo@ximian.com)
6 //
7 // (C) Ximian, Inc
8 //
9
10 using System;
11 using System.Collections;
12 using System.Data;
13
14 namespace System.Data.Common
15 {
16         /// <summary>
17         /// Contains a collection of DataColumnMapping objects. This class cannot be inherited.
18         /// </summary>
19         public sealed class DataColumnMappingCollection : MarshalByRefObject, IColumnMappingCollection , IList, ICollection, IEnumerable
20         {
21                 #region Fields
22
23                 ArrayList list;
24                 Hashtable sourceColumns;
25                 Hashtable dataSetColumns;
26
27                 #endregion
28
29                 #region Constructors 
30
31                 public DataColumnMappingCollection () 
32                 {
33                         list = new ArrayList ();
34                         sourceColumns = new Hashtable ();
35                         dataSetColumns = new Hashtable ();
36                 }
37
38                 #endregion
39
40                 #region Properties
41
42                 public int Count {
43                         get { return list.Count; }
44                 }
45
46                 public DataColumnMapping this[int index] {
47                         get { return (DataColumnMapping)(list[index]); }
48                         set { 
49                                 DataColumnMapping mapping = (DataColumnMapping)(list[index]);
50                                 sourceColumns[mapping] = value;
51                                 dataSetColumns[mapping] = value;
52                                 list[index] = value;
53                         }
54                 }
55
56                 public DataColumnMapping this[string sourceColumn] {
57                         get { return (DataColumnMapping)(sourceColumns[sourceColumn]); }
58                         set { this[list.IndexOf (sourceColumns[sourceColumn])] = value; }
59                 }
60
61                 object ICollection.SyncRoot {
62                         get { return list.SyncRoot; }
63                 }
64
65                 bool ICollection.IsSynchronized {
66                         get { return list.IsSynchronized; }
67                 }
68
69                 object IColumnMappingCollection.this[string sourceColumn] {
70                         get { return this[sourceColumn]; }
71                         set {
72                                 if (!(value is DataColumnMapping))
73                                         throw new ArgumentException ();
74                                 this[sourceColumn] = (DataColumnMapping)value;
75                         }
76                 }
77
78                 object IList.this[int index] {
79                         get { return this[index]; }
80                         set {
81                                 if (!(value is DataColumnMapping))
82                                         throw new ArgumentException ();
83                                 this[index] = (DataColumnMapping)value;
84                          }
85                 }
86
87                 bool IList.IsReadOnly {
88                         get { return false; }
89                 }
90
91                 bool IList.IsFixedSize {
92                         get { return false; }
93                 }
94                 
95
96                 #endregion
97
98                 #region Methods
99
100                 public int Add (object value)
101                 {
102                         if (!(value is DataColumnMapping))
103                                 throw new InvalidCastException ();
104
105                         list.Add (value);
106                         sourceColumns[((DataColumnMapping)value).SourceColumn] = value;
107                         dataSetColumns[((DataColumnMapping)value).DataSetColumn] = value;
108                         return list.IndexOf (value);
109                 }
110
111                 public DataColumnMapping Add (string sourceColumn, string dataSetColumn)
112                 {
113                         DataColumnMapping mapping = new DataColumnMapping (sourceColumn, dataSetColumn);
114                         Add (mapping);
115                         return mapping;
116                 }
117
118                 public void AddRange (DataColumnMapping[] values) 
119                 {
120                         foreach (DataColumnMapping mapping in values)
121                                 Add (mapping);
122                 }
123
124                 public void Clear () 
125                 {
126                         list.Clear ();
127                 }
128
129                 public bool Contains (object value) 
130                 {
131                         return (list.Contains (value));
132                 }
133
134                 public bool Contains (string value)
135                 {
136                         return (sourceColumns.Contains (value));
137                 }
138
139                 public void CopyTo (Array array, int index) 
140                 {
141                         ((DataColumn[])(list.ToArray())).CopyTo (array, index);
142                 }
143
144                 public DataColumnMapping GetByDataSetColumn (string value) 
145                 {
146                         return (DataColumnMapping)(dataSetColumns[value]);
147                 }
148
149                 public static DataColumnMapping GetColumnMappingBySchemaAction (DataColumnMappingCollection columnMappings, string sourceColumn, MissingMappingAction mappingAction) 
150                 {
151                         if (columnMappings.Contains (sourceColumn))
152                                 return columnMappings[sourceColumn];
153
154                         if (mappingAction == MissingMappingAction.Ignore)
155                                 return null;
156
157                         if (mappingAction == MissingMappingAction.Error)
158                                 throw new SystemException ();
159
160                         return new DataColumnMapping (sourceColumn, sourceColumn);
161                 }
162
163                 public IEnumerator GetEnumerator ()
164                 {
165                         return list.GetEnumerator ();
166                 }
167
168                 IColumnMapping IColumnMappingCollection.Add (string sourceColumnName, string dataSetColumnName)
169                 {
170                         return Add (sourceColumnName, dataSetColumnName);
171                 }
172
173                 IColumnMapping IColumnMappingCollection.GetByDataSetColumn (string dataSetColumnName)
174                 {
175                         return GetByDataSetColumn (dataSetColumnName);
176                 }
177
178                 public int IndexOf (object value) 
179                 {
180                         return list.IndexOf (value);
181                 }
182
183                 public int IndexOf (string sourceColumn)
184                 {
185                         return list.IndexOf (sourceColumns[sourceColumn]);
186                 }
187
188                 public int IndexOfDataSetColumn (string value) 
189                 {
190                         return list.IndexOf (dataSetColumns[value]);
191                 }
192
193                 public void Insert (int index, object value) 
194                 {
195                         list.Insert (index, value);
196                         sourceColumns[((DataColumnMapping)value).SourceColumn] = value;
197                         dataSetColumns[((DataColumnMapping)value).DataSetColumn] = value;
198                 }
199
200                 public void Remove (object value) 
201                 {
202                         sourceColumns.Remove(((DataColumnMapping)value).SourceColumn);
203                         dataSetColumns.Remove(((DataColumnMapping)value).DataSetColumn);
204                         list.Remove (value);
205                 }
206
207                 public void RemoveAt (int index) 
208                 {
209                         Remove (list[index]);
210                 }
211
212                 public void RemoveAt (string sourceColumn)
213                 {
214                         RemoveAt (list.IndexOf (sourceColumns[sourceColumn]));
215                 }
216
217                 #endregion
218         }
219 }