Copy from 72246 to trunk
[mono.git] / mcs / class / System.Configuration / System.Configuration / SectionInfo.cs
index 06f4fe37f2a4f586ddca54c66e8b41e8d63dee3f..cb3a2a1c9f8185572885481ac2520932c4cb1d8c 100644 (file)
@@ -30,6 +30,7 @@ using System;
 using System.Collections;
 using System.Collections.Specialized;
 using System.Xml;
+using System.Text;
 using System.IO;
 
 namespace System.Configuration
@@ -37,6 +38,8 @@ namespace System.Configuration
        internal class SectionInfo: ConfigInfo
        {
                bool allowLocation = true;
+               bool requirePermission = true;
+               bool restartOnExternalChanges;
                ConfigurationAllowDefinition allowDefinition = ConfigurationAllowDefinition.Everywhere;
                ConfigurationAllowExeDefinition allowExeDefinition = ConfigurationAllowExeDefinition.MachineToApplication;
 
@@ -44,14 +47,15 @@ namespace System.Configuration
                {
                }
                
-               public SectionInfo (string sectionName, string typeName,
-                                   bool allowLocation, ConfigurationAllowDefinition allowDefinition, ConfigurationAllowExeDefinition allowExeDefinition)
+               public SectionInfo (string sectionName, SectionInformation info)
                {
                        Name = sectionName;
-                       TypeName = typeName;
-                       this.allowLocation = allowLocation;
-                       this.allowDefinition = allowDefinition;
-                       this.allowExeDefinition = allowExeDefinition;
+                       TypeName = info.Type;
+                       this.allowLocation = info.AllowLocation;
+                       this.allowDefinition = info.AllowDefinition;
+                       this.allowExeDefinition = info.AllowExeDefinition;
+                       this.requirePermission = info.RequirePermission;
+                       this.restartOnExternalChanges = info.RestartOnExternalChanges;
                }
                
                public override object CreateInstance ()
@@ -62,6 +66,9 @@ namespace System.Configuration
                                sec.SectionInformation.AllowLocation = allowLocation;
                                sec.SectionInformation.AllowDefinition = allowDefinition;
                                sec.SectionInformation.AllowExeDefinition = allowExeDefinition;
+                               sec.SectionInformation.RequirePermission = requirePermission;
+                               sec.SectionInformation.RestartOnExternalChanges = restartOnExternalChanges;
+                               sec.SectionInformation.SetName (Name);
                        }
                        return ob;
                }
@@ -121,8 +128,24 @@ namespace System.Configuration
                                                        ThrowException ("location is a reserved section name", reader);
                                                break;
                                                
+                                       case "requirePermission":
+                                               string reqPerm = reader.Value;
+                                               bool reqPermValue = (reqPerm == "true");
+                                               if (!reqPermValue && reqPerm != "false")
+                                                       ThrowException ("Invalid attribute value", reader);
+                                               requirePermission = reqPermValue;
+                                               break;
+
+                                       case "restartOnExternalChanges":
+                                               string restart = reader.Value;
+                                               bool restartValue = (restart == "true");
+                                               if (!restartValue && restart != "false")
+                                                       ThrowException ("Invalid attribute value", reader);
+                                               restartOnExternalChanges = restartValue;
+                                               break;
+
                                        default:
-                                               ThrowException ("Unrecognized attribute.", reader);
+                                               ThrowException (String.Format ("Unrecognized attribute: {0}", reader.Name), reader);
                                                break;
                                }
                        }
@@ -145,6 +168,8 @@ namespace System.Configuration
                                writer.WriteAttributeString ("allowDefinition", allowDefinition.ToString ());
                        if (allowExeDefinition != ConfigurationAllowExeDefinition.MachineToApplication)
                                writer.WriteAttributeString ("allowExeDefinition", allowExeDefinition.ToString ());
+                       if (!requirePermission)
+                               writer.WriteAttributeString ("requirePermission", "false");
                        writer.WriteEndElement ();
                }
                
@@ -169,6 +194,18 @@ namespace System.Configuration
                        if (section != null) {
                                ConfigurationSection parentSection = config.Parent != null ? config.Parent.GetSectionInstance (this, false) : null;
                                xml = section.SerializeSection (parentSection, Name, mode);
+
+                               if (section.SectionInformation.IsProtected) {
+                                       StringBuilder sb = new StringBuilder ();
+                                       sb.AppendFormat ("<{0} configProtectionProvider=\"{1}\">\n",
+                                                        Name,
+                                                        section.SectionInformation.ProtectionProvider.Name);
+                                       sb.Append (config.ConfigHost.EncryptSection (xml,
+                                                                                    section.SectionInformation.ProtectionProvider,
+                                                                                    ProtectedConfiguration.Section));
+                                       sb.AppendFormat ("</{0}>", Name);
+                                       xml = sb.ToString ();
+                               }
                        }
                        else {
                                xml = config.GetSectionXml (this);
@@ -181,6 +218,9 @@ namespace System.Configuration
                                tr.Close ();*/
                        }
                }
+               
+               internal override void Merge (ConfigInfo data)
+               {}
        }
 }