2009-06-12 Bill Holmes <billholmes54@gmail.com>
[mono.git] / mcs / class / System.Data.Linq / src / DbMetal / Schema / TableAlias.cs
1 #region MIT license\r
2 // \r
3 // MIT license\r
4 //\r
5 // Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne\r
6 // \r
7 // Permission is hereby granted, free of charge, to any person obtaining a copy\r
8 // of this software and associated documentation files (the "Software"), to deal\r
9 // in the Software without restriction, including without limitation the rights\r
10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
11 // copies of the Software, and to permit persons to whom the Software is\r
12 // furnished to do so, subject to the following conditions:\r
13 // \r
14 // The above copyright notice and this permission notice shall be included in\r
15 // all copies or substantial portions of the Software.\r
16 // \r
17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
23 // THE SOFTWARE.\r
24 // \r
25 #endregion\r
26 \r
27 using System;\r
28 using System.Collections.Generic;\r
29 using System.IO;\r
30 using System.Linq;\r
31 using System.Xml.Serialization;\r
32 using DbLinq.Vendor;\r
33 using DbMetal;\r
34 \r
35 namespace DbMetal.Schema\r
36 {\r
37     public class TableAlias\r
38     {\r
39         public class Renamings : INameAliases\r
40         {\r
41             [XmlElement("Renaming")]\r
42             public readonly List<Renaming> Arr = new List<Renaming>();\r
43 \r
44             protected string GetAlias(string name)\r
45             {\r
46                 return (from r in Arr where r.old == name select r.@new).SingleOrDefault();\r
47             }\r
48 \r
49             public string GetTableTypeAlias(string table, string schema)\r
50             {\r
51                 return GetAlias(table);\r
52             }\r
53 \r
54             public string GetTableMemberAlias(string table, string schema)\r
55             {\r
56                 return null;\r
57             }\r
58 \r
59             public string GetColumnMemberAlias(string column, string table, string schema)\r
60             {\r
61                 return GetAlias(column);\r
62             }\r
63 \r
64             public string GetColumnForcedType(string column, string table, string schema)\r
65             {\r
66                 return GetAlias(column);\r
67             }\r
68         }\r
69 \r
70         public class Renaming\r
71         {\r
72             [XmlAttribute]\r
73             public string old;\r
74             [XmlAttribute]\r
75             public string @new;\r
76         }\r
77 \r
78         public static Renamings Load(string fileName)\r
79         {\r
80             using (var stream = File.OpenRead(fileName))\r
81             {\r
82                 var renamingsXmlSerializer = new XmlSerializer(typeof(Renamings));\r
83                 var renamings = (Renamings)renamingsXmlSerializer.Deserialize(stream);\r
84                 return renamings;\r
85             }\r
86         }\r
87 \r
88         public static IDictionary<string, string> Load(string fileName, Parameters parameters)\r
89         {\r
90             if (!System.IO.File.Exists(fileName))\r
91                 throw new ArgumentException("Renames file missing:" + parameters.Aliases);\r
92 \r
93             Console.WriteLine("Loading renames file: " + fileName);\r
94 \r
95             Renamings renamings = Load(parameters.Aliases);\r
96 \r
97             Dictionary<string, string> aliases = new Dictionary<string, string>();\r
98             foreach (Renaming renaming in renamings.Arr)\r
99             {\r
100                 aliases[renaming.old] = renaming.@new;\r
101             }\r
102             return aliases;\r
103         }\r
104 \r
105         public static IDictionary<string, string> Load(Parameters parameters)\r
106         {\r
107             if (parameters.Aliases == null)\r
108                 return new Dictionary<string, string>();\r
109             return Load(parameters.Aliases, parameters);\r
110         }\r
111 \r
112     }\r
113 }