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