2004-12-10 Sureshkumar T <tsureshkumar@novell.com>
[mono.git] / mcs / class / System.Data / System.Data.Common / DataColumnMapping.cs
1 //
2 // System.Data.Common.DataColumnMapping.cs
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 //
13 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
14 //
15 // Permission is hereby granted, free of charge, to any person obtaining
16 // a copy of this software and associated documentation files (the
17 // "Software"), to deal in the Software without restriction, including
18 // without limitation the rights to use, copy, modify, merge, publish,
19 // distribute, sublicense, and/or sell copies of the Software, and to
20 // permit persons to whom the Software is furnished to do so, subject to
21 // the following conditions:
22 // 
23 // The above copyright notice and this permission notice shall be
24 // included in all copies or substantial portions of the Software.
25 // 
26 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
30 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
31 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
32 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 //
34
35 using System.ComponentModel;
36 using System.Data;
37
38 namespace System.Data.Common {
39         [TypeConverterAttribute (typeof (DataColumnMappingConverter))]
40         public sealed class DataColumnMapping : MarshalByRefObject, IColumnMapping, ICloneable
41         {
42                 #region Fields
43
44                 string sourceColumn;
45                 string dataSetColumn;
46
47                 #endregion // Fields
48
49                 #region Constructors
50                 
51                 public DataColumnMapping () 
52                 {
53                         sourceColumn = String.Empty;
54                         dataSetColumn = String.Empty;
55                 }
56
57                 public DataColumnMapping (string sourceColumn, string dataSetColumn) 
58                 {
59                         this.sourceColumn = sourceColumn;
60                         this.dataSetColumn = dataSetColumn;
61                 }
62
63                 #endregion // Constructors
64
65                 #region Properties
66
67                 [DataSysDescription ("DataColumn.ColumnName")]
68                 [DefaultValue ("")]
69                 public string DataSetColumn {
70                         get { return dataSetColumn; }
71                         set { dataSetColumn = value; }
72                 }
73
74                 [DataSysDescription ("Source column name - case sensitive.")]
75                 [DefaultValue ("")]
76                 public string SourceColumn {
77                         get { return sourceColumn; }
78                         set { sourceColumn = value; }
79                 }
80
81                 #endregion // Properties
82
83                 #region Methods
84
85                 [EditorBrowsable (EditorBrowsableState.Advanced)]
86                 public DataColumn GetDataColumnBySchemaAction (DataTable dataTable, Type dataType, MissingSchemaAction schemaAction) 
87                 {
88                         if (dataTable.Columns.Contains (dataSetColumn))
89                                 return dataTable.Columns [dataSetColumn];
90                         if (schemaAction == MissingSchemaAction.Ignore)
91                                 return null;
92                         if (schemaAction == MissingSchemaAction.Error)
93                                 throw new InvalidOperationException (String.Format ("Missing the DataColumn '{0}' in the DataTable '{1}' for the SourceColumn '{2}'", DataSetColumn, dataTable.TableName, SourceColumn));
94                         return new DataColumn (dataSetColumn, dataType);
95                 }
96
97 #if NET_2_0
98                 [MonoTODO]
99                 public static DataColumn GetDataColumnBySchemaAction (string sourceColumn, string dataSetColumn, DataTable dataTable, Type dataType, MissingSchemaAction schemaAction)
100                 {
101                         throw new NotImplementedException ();
102                 }
103 #endif
104
105                 object ICloneable.Clone ()
106                 {
107                         return new DataColumnMapping (SourceColumn, DataSetColumn);
108                 }
109
110                 public override string ToString ()
111                 {
112                         return SourceColumn; 
113                 }
114
115                 #endregion // Methods
116         }
117 }