2 // System.Configuration.AppSettingsSection.cs
5 // Duncan Mak (duncan@ximian.com)
7 // Permission is hereby granted, free of charge, to any person obtaining
8 // a copy of this software and associated documentation files (the
9 // "Software"), to deal in the Software without restriction, including
10 // without limitation the rights to use, copy, modify, merge, publish,
11 // distribute, sublicense, and/or sell copies of the Software, and to
12 // permit persons to whom the Software is furnished to do so, subject to
13 // the following conditions:
15 // The above copyright notice and this permission notice shall be
16 // included in all copies or substantial portions of the Software.
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
29 #if NET_2_0 && XML_DEP
32 using System.Collections.Specialized;
36 namespace System.Configuration {
38 public sealed class AppSettingsSection : ConfigurationSection
40 ConfigNameValueCollection values;
43 public AppSettingsSection ()
47 protected internal override bool IsModified ()
49 return values != null && values.IsModified;
52 [MonoTODO ("Read file attribute")]
53 protected internal override void ReadXml (XmlReader reader, object context)
55 XmlDocument doc = new XmlDocument ();
56 XmlNode data = doc.ReadNode (reader);
57 hasClear = ((XmlElement)data)["clear"] != null;
58 values = ConfigHelper.GetNameValueCollection (values, data, "key", "value");
61 protected internal override void Reset (ConfigurationElement parentSection, object context)
63 AppSettingsSection sec = parentSection as AppSettingsSection;
64 if (sec != null && sec.values != null)
65 values = new ConfigNameValueCollection (sec.values);
70 protected internal override void ResetModified ()
72 if (values != null) values.ResetModified ();
75 protected internal override string WriteXml (
76 ConfigurationElement parent, object context, string name, ConfigurationUpdateMode mode)
78 AppSettingsSection sec = parent as AppSettingsSection;
79 NameValueCollection parentValues = sec != null && !hasClear ? sec.Settings : null;
81 StringWriter sw = new StringWriter ();
82 XmlTextWriter writer = new XmlTextWriter (sw);
83 writer.WriteStartElement ("appSettings");
86 writer.WriteStartElement ("clear");
87 writer.WriteEndElement ();
90 foreach (string key in values) {
91 string val = values [key];
92 string parentVal = parentValues != null ? parentValues [key] : null;
93 if (parentVal != val) {
94 writer.WriteStartElement ("add");
95 writer.WriteAttributeString ("key", key);
96 writer.WriteAttributeString ("value", val);
97 writer.WriteEndElement ();
101 if (parentValues != null) {
102 foreach (string key in parentValues) {
103 if (values [key] == null) {
104 writer.WriteStartElement ("remove");
105 writer.WriteAttributeString ("key", key);
106 writer.WriteEndElement ();
111 writer.WriteEndElement ();
112 return sw.ToString ();
117 get { throw new NotImplementedException (); }
118 set { throw new NotImplementedException (); }
121 public NameValueCollection Settings {
124 values = new ConfigNameValueCollection();