2002-11-04 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / System / System.Configuration / ConfigXmlDocument.cs
1 //
2 // System.Configuration.ConfigXmlDocument
3 //
4 // Authors:
5 //      Gonzalo Paniagua Javier (gonzalo@ximian.com)
6 //
7 // (C) 2002 Ximian, Inc (http://www.ximian.com)
8 //
9
10 using System;
11 using System.IO;
12 using System.Xml;
13
14 namespace System.Configuration
15 {
16         public sealed class ConfigXmlDocument : XmlDocument, IConfigXmlNode
17         {
18                 XmlTextReader reader;
19                 string fileName;
20                 int lineNumber;
21
22                 public override XmlAttribute CreateAttribute (string prefix,
23                                                               string localName,
24                                                               string namespaceUri)
25                 {
26                         return new ConfigXmlAttribute (this, prefix, localName, namespaceUri);
27                 }
28
29                 public override XmlCDataSection CreateCDataSection (string data)
30                 {
31                         return new ConfigXmlCDataSection (this, data);
32                 }
33
34                 public override XmlComment CreateComment (string comment)
35                 {
36                         return new ConfigXmlComment (this, comment);
37                 }
38
39                 public override XmlElement CreateElement (string prefix, string localName, string namespaceUri)
40                 {
41                         return new ConfigXmlElement (this, prefix, localName, namespaceUri);
42                 }
43
44                 public override XmlSignificantWhitespace CreateSignificantWhitespace (string data)
45                 {
46                         return base.CreateSignificantWhitespace (data);
47                 }
48
49                 public override XmlText CreateTextNode (string text)
50                 {
51                         return new ConfigXmlText (this, text);
52                 }
53
54                 public override XmlWhitespace CreateWhitespace (string data)
55                 {
56                         return base.CreateWhitespace (data);
57                 }
58
59                 public override void Load (string filename)
60                 {
61                         LoadSingleElement (filename, new XmlTextReader (filename));
62                 }
63
64                 public void LoadSingleElement (string filename, XmlTextReader sourceReader)
65                 {
66
67                         fileName = filename;
68                         lineNumber = sourceReader.LineNumber;
69                         string xml = sourceReader.ReadOuterXml();
70                         reader = new XmlTextReader (new StringReader (xml), sourceReader.NameTable);
71                         reader.MoveToContent ();
72                         Load (reader);
73                         reader.Close ();
74                 }
75
76                 public string Filename
77                 {
78                         get {
79                                 return fileName;
80                         }
81                 }
82
83                 public int LineNumber
84                 {
85                         get {
86                                 return lineNumber;
87                         }
88                 }
89
90                 //
91                 // Wrappers for Xml* that just provide file name and line number addition
92                 //
93                 class ConfigXmlAttribute : XmlAttribute, IConfigXmlNode
94                 {
95                         string fileName;
96                         int lineNumber;
97
98                         public ConfigXmlAttribute (ConfigXmlDocument document,
99                                                    string prefix,
100                                                    string localName,
101                                                    string namespaceUri)
102                                 : base (prefix, localName, namespaceUri, document)
103                         {
104                                 fileName = document.Filename;
105                                 lineNumber = document.LineNumber;
106                         }
107
108                         public string Filename
109                         {
110                                 get {
111                                         return fileName;
112                                 }
113                         }
114
115                         public int LineNumber
116                         {
117                                 get {
118                                         return lineNumber;
119                                 }
120                         }
121                 }
122                 
123                 class ConfigXmlCDataSection : XmlCDataSection, IConfigXmlNode
124                 {
125                         string fileName;
126                         int lineNumber;
127
128                         public ConfigXmlCDataSection (ConfigXmlDocument document, string data)
129                                 : base (data, document)
130                         {
131                                 fileName = document.Filename;
132                                 lineNumber = document.LineNumber;
133                         }
134
135                         public string Filename
136                         {
137                                 get {
138                                         return fileName;
139                                 }
140                         }
141
142                         public int LineNumber
143                         {
144                                 get {
145                                         return lineNumber;
146                                 }
147                         }
148                 }
149                 
150                 class ConfigXmlComment : XmlComment, IConfigXmlNode
151                 {
152                         string fileName;
153                         int lineNumber;
154
155                         public ConfigXmlComment (ConfigXmlDocument document, string comment)
156                                 : base (comment, document)
157                         {
158                                 fileName = document.Filename;
159                                 lineNumber = document.LineNumber;
160                         }
161
162                         public string Filename
163                         {
164                                 get {
165                                         return fileName;
166                                 }
167                         }
168
169                         public int LineNumber
170                         {
171                                 get {
172                                         return lineNumber;
173                                 }
174                         }
175                 }
176         
177                 class ConfigXmlElement : XmlElement, IConfigXmlNode
178                 {
179                         string fileName;
180                         int lineNumber;
181
182                         public ConfigXmlElement (ConfigXmlDocument document,
183                                                  string prefix,
184                                                  string localName,
185                                                  string namespaceUri)
186                                 : base (prefix, localName, namespaceUri, document)
187                         {
188                                 fileName = document.Filename;
189                                 lineNumber = document.LineNumber;
190                         }
191
192                         public string Filename
193                         {
194                                 get {
195                                         return fileName;
196                                 }
197                         }
198
199                         public int LineNumber
200                         {
201                                 get {
202                                         return lineNumber;
203                                 }
204                         }
205                 }
206
207                 class ConfigXmlText : XmlText, IConfigXmlNode
208                 {
209                         string fileName;
210                         int lineNumber;
211
212                         public ConfigXmlText (ConfigXmlDocument document, string data)
213                                 : base (data, document)
214                         {
215                                 fileName = document.Filename;
216                                 lineNumber = document.LineNumber;
217                         }
218
219                         public string Filename
220                         {
221                                 get {
222                                         return fileName;
223                                 }
224                         }
225
226                         public int LineNumber
227                         {
228                                 get {
229                                         return lineNumber;
230                                 }
231                         }
232                 }
233         }
234 }
235