2005-11-24 Chris Toshok <toshok@ximian.com>
[mono.git] / mcs / class / System.Data / System.Data.Common / DataTableMapping.cs
1 //
2 // System.Data.Common.DataTableMapping.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 (DataTableMappingConverter))]
40         public sealed class DataTableMapping : MarshalByRefObject, ITableMapping, ICloneable
41         {
42                 #region Fields
43
44                 string sourceTable;
45                 string dataSetTable;
46                 DataColumnMappingCollection columnMappings;
47
48                 #endregion // Fields
49
50                 #region Constructors
51
52                 public DataTableMapping () 
53                 {
54                         dataSetTable = String.Empty;
55                         sourceTable = String.Empty;
56                         columnMappings = new DataColumnMappingCollection ();
57                 }
58
59                 public DataTableMapping (string sourceTable, string dataSetTable) 
60                         : this ()
61                 {
62                         this.sourceTable = sourceTable;
63                         this.dataSetTable = dataSetTable;
64                 }
65                 
66                 public DataTableMapping (string sourceTable, string dataSetTable, DataColumnMapping[] columnMappings) 
67                         : this (sourceTable, dataSetTable)
68                 {
69                         this.columnMappings.AddRange (columnMappings);
70                 }
71
72                 #endregion // Constructors
73
74                 #region Properties
75
76                 [DataSysDescription ("Individual columns mappings when this table mapping is matched.")]
77                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Content)]
78                 public DataColumnMappingCollection ColumnMappings {
79                         get { return columnMappings; }
80                 }
81
82                 [DataSysDescription ("DataTable.TableName")]
83                 [DefaultValue ("")]
84                 public string DataSetTable {
85                         get { return dataSetTable; } 
86                         set { dataSetTable = value; }
87                 }
88
89                 IColumnMappingCollection ITableMapping.ColumnMappings {
90                         get { return ColumnMappings; }
91                 }
92         
93                 [DataSysDescription ("The DataTableMapping source table name. This name is case sensitive.")]
94                 [DefaultValue ("")]
95                 public string SourceTable {
96                         get { return sourceTable; }
97                         set { sourceTable = value; }
98                 }
99
100                 #endregion // Properties
101
102                 #region Methods
103
104                 [EditorBrowsable (EditorBrowsableState.Advanced)]
105                 public DataColumnMapping GetColumnMappingBySchemaAction (string sourceColumn, MissingMappingAction mappingAction) 
106                 {
107                         return DataColumnMappingCollection.GetColumnMappingBySchemaAction (columnMappings, sourceColumn, mappingAction);
108                 }
109
110 #if NET_2_0
111                 [MonoTODO]
112                 public DataColumn GetDataColumn (string sourceColumn, Type dataType, DataTable dataTable, MissingMappingAction mappingAction, MissingSchemaAction schemaAction)
113                 {
114                         throw new NotImplementedException ();
115                 }
116 #endif
117
118                 [EditorBrowsable (EditorBrowsableState.Advanced)]
119                 public DataTable GetDataTableBySchemaAction (DataSet dataSet, MissingSchemaAction schemaAction) 
120                 {
121                         if (dataSet.Tables.Contains (DataSetTable))
122                                 return dataSet.Tables [DataSetTable];
123                         if (schemaAction == MissingSchemaAction.Ignore)
124                                 return null;
125                         if (schemaAction == MissingSchemaAction.Error)
126                                 throw new InvalidOperationException (String.Format ("Missing the '{0} DataTable for the '{1}' SourceTable", DataSetTable, SourceTable));
127                         return new DataTable (DataSetTable);
128                 }
129
130                 object ICloneable.Clone ()
131                 {
132                         DataColumnMapping [] arr = new DataColumnMapping [columnMappings.Count];
133                         columnMappings.CopyTo (arr, 0);
134                         return new DataTableMapping (SourceTable, DataSetTable, arr);
135                 }
136
137                 public override string ToString ()
138                 {
139                         return SourceTable; 
140                 }
141                 
142                 #endregion // Methods
143         }
144 }