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