Author: lluis
Date: 2005-06-23 13:52:49 -0400 (Thu, 23 Jun 2005)
New Revision: 46445

Added:
   
trunk/mcs/class/System.Web/System.Web.Configuration/VirtualDirectoryMapping.cs
   
trunk/mcs/class/System.Web/System.Web.Configuration/VirtualDirectoryMappingCollection.cs
   
trunk/mcs/class/System.Web/System.Web.Configuration/WebConfigurationFileMap.cs
   trunk/mcs/class/System.Web/System.Web.Configuration/WebConfigurationHost.cs
   
trunk/mcs/class/System.Web/System.Web.Configuration/WebConfigurationManager.cs
Modified:
   trunk/mcs/class/System.Web/System.Web.Configuration/ChangeLog
Log:
2005-06-23  Lluis Sanchez Gual <[EMAIL PROTECTED]>

        * VirtualDirectoryMapping.cs: Implemented.
        * WebConfigurationManager.cs: Initial implementation.
        * VirtualDirectoryMappingCollection.cs: Implemented.
        * WebConfigurationFileMap.cs: Implemented.
        * WebConfigurationHost.cs: Initial implementation of class
        that supports IInternalConfigHost.




Modified: trunk/mcs/class/System.Web/System.Web.Configuration/ChangeLog
===================================================================
--- trunk/mcs/class/System.Web/System.Web.Configuration/ChangeLog       
2005-06-23 17:52:14 UTC (rev 46444)
+++ trunk/mcs/class/System.Web/System.Web.Configuration/ChangeLog       
2005-06-23 17:52:49 UTC (rev 46445)
@@ -1,3 +1,12 @@
+2005-06-23  Lluis Sanchez Gual <[EMAIL PROTECTED]>
+
+       * VirtualDirectoryMapping.cs: Implemented.
+       * WebConfigurationManager.cs: Initial implementation.
+       * VirtualDirectoryMappingCollection.cs: Implemented.
+       * WebConfigurationFileMap.cs: Implemented.
+       * WebConfigurationHost.cs: Initial implementation of class
+       that supports IInternalConfigHost.
+
 2005-06-19 Ilya Kharmatsky <ilyak-at-mainsoft.com>
 
     * HttpRuntimeConfig.cs: Added TARGET_JVM directive in "using clause"
@@ -3,5 +12,5 @@
       in order to exclude in J2EE configuration usage of unsupported
       CodeDome API.
-       
+
 2005-06-15  Lluis Sanchez Gual <[EMAIL PROTECTED]>
 

Added: 
trunk/mcs/class/System.Web/System.Web.Configuration/VirtualDirectoryMapping.cs
===================================================================
--- 
trunk/mcs/class/System.Web/System.Web.Configuration/VirtualDirectoryMapping.cs  
    2005-06-23 17:52:14 UTC (rev 46444)
+++ 
trunk/mcs/class/System.Web/System.Web.Configuration/VirtualDirectoryMapping.cs  
    2005-06-23 17:52:49 UTC (rev 46445)
@@ -0,0 +1,82 @@
+//
+// System.Configuration.VirtualDirectoryMapping.cs
+//
+// Authors:
+//  Lluis Sanchez Gual ([EMAIL PROTECTED])
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+//
+
+#if NET_2_0
+
+using System.Collections.Specialized;
+
+namespace System.Web.Configuration
+{
+       public sealed class VirtualDirectoryMapping
+       {
+               string physicalDirectory;
+               bool isAppRoot;
+               string configFileBaseName;
+               string virtualDirectory;
+               
+               public VirtualDirectoryMapping (string physicalDirectory, bool 
isAppRoot)
+               {
+                       this.physicalDirectory = physicalDirectory;
+                       this.isAppRoot = isAppRoot;
+               }
+               
+               public VirtualDirectoryMapping (string physicalDirectory, bool 
isAppRoot, string configFileBaseName)
+               {
+                       this.physicalDirectory = physicalDirectory;
+                       this.isAppRoot = isAppRoot;
+                       this.configFileBaseName = configFileBaseName;
+               }
+               
+               internal void SetVirtualDirectory (string dir)
+               {
+                       virtualDirectory = dir;
+               }
+               
+               [MonoTODO ("Do something with this")]
+               public string ConfigFileBaseName {
+                       get { return configFileBaseName; }
+                       set { configFileBaseName = value; }
+               }
+               
+               [MonoTODO ("Do something with this")]
+               public bool IsAppRoot {
+                       get { return isAppRoot; }
+                       set { isAppRoot = value; }
+               }
+               
+               public string PhysicalDirectory {
+                       get { return physicalDirectory; }
+                       set { physicalDirectory = value; }
+               }
+               
+               public string VirtualDirectory {
+                       get { return virtualDirectory; }
+               }
+       }
+}
+#endif

Added: 
trunk/mcs/class/System.Web/System.Web.Configuration/VirtualDirectoryMappingCollection.cs
===================================================================
--- 
trunk/mcs/class/System.Web/System.Web.Configuration/VirtualDirectoryMappingCollection.cs
    2005-06-23 17:52:14 UTC (rev 46444)
+++ 
trunk/mcs/class/System.Web/System.Web.Configuration/VirtualDirectoryMappingCollection.cs
    2005-06-23 17:52:49 UTC (rev 46445)
@@ -0,0 +1,92 @@
+//
+// System.Configuration.VirtualDirectoryMappingCollection.cs
+//
+// Authors:
+//  Lluis Sanchez Gual ([EMAIL PROTECTED])
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+//
+
+#if NET_2_0
+
+using System.Collections;
+using System.Collections.Specialized;
+
+namespace System.Web.Configuration
+{
+       public sealed class VirtualDirectoryMappingCollection: 
NameObjectCollectionBase
+       {
+               public void Add (string virtualDirectory, 
VirtualDirectoryMapping mapping)
+               {
+                       mapping.SetVirtualDirectory (virtualDirectory);
+                       BaseAdd (virtualDirectory, mapping);
+               }
+               
+               public void Clear ()
+               {
+                       BaseClear ();
+               }
+               
+               public void CopyTo (VirtualDirectoryMapping[] array, int index)
+               {
+                       ((ICollection)this).CopyTo (array, index);
+               }
+               
+               public VirtualDirectoryMapping Get (int index)
+               {
+                       return (VirtualDirectoryMapping) BaseGet (index);
+               }
+               
+               public VirtualDirectoryMapping Get (string virtualDirectory)
+               {
+                       return (VirtualDirectoryMapping) BaseGet 
(virtualDirectory);
+               }
+               
+               public string GetKey (int index)
+               {
+                       return BaseGetKey (index);
+               }
+               
+               public void Remove (string virtualDirectory)
+               {
+                       BaseRemove (virtualDirectory);
+               }
+               
+               public void RemoveAt (int index)
+               {
+                       BaseRemoveAt (index);
+               }
+               
+               public ICollection AllKeys {
+                       get { return BaseGetAllKeys (); }
+               }
+               
+               public VirtualDirectoryMapping this [int index] {
+                       get { return (VirtualDirectoryMapping) BaseGet (index); 
}
+               }
+               
+               public VirtualDirectoryMapping this [string virtualDirectory] {
+                       get { return (VirtualDirectoryMapping) BaseGet 
(virtualDirectory); }
+               }
+       }
+}
+#endif

Added: 
trunk/mcs/class/System.Web/System.Web.Configuration/WebConfigurationFileMap.cs
===================================================================
--- 
trunk/mcs/class/System.Web/System.Web.Configuration/WebConfigurationFileMap.cs  
    2005-06-23 17:52:14 UTC (rev 46444)
+++ 
trunk/mcs/class/System.Web/System.Web.Configuration/WebConfigurationFileMap.cs  
    2005-06-23 17:52:49 UTC (rev 46445)
@@ -0,0 +1,65 @@
+//
+// System.Configuration.ExeConfigurationFileMap.cs
+//
+// Authors:
+//  Lluis Sanchez Gual ([EMAIL PROTECTED])
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+//
+
+#if NET_2_0
+
+using System;
+using System.Configuration;
+
+namespace System.Web.Configuration
+{
+       [Serializable]
+       public sealed class WebConfigurationFileMap: ConfigurationFileMap
+       {
+               VirtualDirectoryMappingCollection virtualDirectories;
+               
+               public WebConfigurationFileMap ()
+               {
+                       virtualDirectories = new 
VirtualDirectoryMappingCollection ();
+               }
+               
+               public VirtualDirectoryMappingCollection VirtualDirectories {
+                       get { return virtualDirectories; }
+               }
+               
+               public override object Clone ()
+               {
+                       WebConfigurationFileMap map = new 
WebConfigurationFileMap ();
+                       map.MachineConfigFilename = MachineConfigFilename;
+                       
+                       map.virtualDirectories = new 
VirtualDirectoryMappingCollection ();
+                       foreach (VirtualDirectoryMapping vmap in 
virtualDirectories) {
+                               VirtualDirectoryMapping nvmap = new 
VirtualDirectoryMapping (vmap.PhysicalDirectory, vmap.IsAppRoot, 
vmap.ConfigFileBaseName);
+                               map.virtualDirectories.Add 
(vmap.VirtualDirectory, nvmap);
+                       }
+                       
+                       return map;
+               }
+       }
+}
+#endif

Added: 
trunk/mcs/class/System.Web/System.Web.Configuration/WebConfigurationHost.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web.Configuration/WebConfigurationHost.cs 
2005-06-23 17:52:14 UTC (rev 46444)
+++ trunk/mcs/class/System.Web/System.Web.Configuration/WebConfigurationHost.cs 
2005-06-23 17:52:49 UTC (rev 46445)
@@ -0,0 +1,317 @@
+//
+// System.Web.Configuration.WebConfigurationHost.cs
+//
+// Authors:
+//  Lluis Sanchez Gual ([EMAIL PROTECTED])
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+//
+
+#if NET_2_0
+
+using System;
+using System.IO;
+using System.Security;
+using System.Configuration;
+using System.Configuration.Internal;
+using System.Web.Util;
+
+namespace System.Web.Configuration
+{
+       class WebConfigurationHost: IInternalConfigHost
+       {
+               WebConfigurationFileMap map;
+               const string MachinePath = "machine:";
+               
+               public virtual object CreateConfigurationContext (string 
configPath, string locationSubPath)
+               {
+                       return null;
+               }
+               
+               public virtual object CreateDeprecatedConfigContext (string 
configPath)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual string DecryptSection (string encryptedXml, 
ProtectedConfigurationProvider protectionProvider, 
ProtectedConfigurationSection protectedSection)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual void DeleteStream (string streamName)
+               {
+                       File.Delete (streamName);
+               }
+               
+               public virtual string EncryptSection (string encryptedXml, 
ProtectedConfigurationProvider protectionProvider, 
ProtectedConfigurationSection protectedSection)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual string GetConfigPathFromLocationSubPath (string 
configPath, string locatinSubPath)
+               {
+                       return configPath + "/" + locatinSubPath;
+               }
+               
+               public virtual Type GetConfigType (string typeName, bool 
throwOnError)
+               {
+                       Type type = Type.GetType (typeName);
+                       if (type == null && throwOnError)
+                               throw new ConfigurationErrorsException ("Type 
not found: '" + typeName + "'");
+                       return type;
+               }
+               
+               public virtual string GetConfigTypeName (Type t)
+               {
+                       return t.AssemblyQualifiedName;
+               }
+               
+               public virtual void GetRestrictedPermissions 
(IInternalConfigRecord configRecord, out PermissionSet permissionSet, out bool 
isHostReady)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual string GetStreamName (string configPath)
+               {
+                       if (configPath == MachinePath) {
+                               if (map == null)
+                                       return 
System.Runtime.InteropServices.RuntimeEnvironment.SystemConfigurationFile;
+                               else
+                                       return map.MachineConfigFilename;
+                       }
+                       
+                       string dir = MapPath (configPath);
+                       return GetWebConfigFileName (dir);
+               }
+               
+               public virtual string GetStreamNameForConfigSource (string 
streamName, string configSource)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual object GetStreamVersion (string streamName)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual IDisposable Impersonate ()
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual void Init (IInternalConfigRoot root, params 
object[] hostInitParams)
+               {
+               }
+               
+               public virtual void InitForConfiguration (ref string 
locationSubPath, out string configPath, out string locationConfigPath, 
IInternalConfigRoot root, params object[] hostInitConfigurationParams)
+               {
+                       string fullPath = (string) hostInitConfigurationParams 
[1];
+                       
+                       map = (WebConfigurationFileMap) 
hostInitConfigurationParams [0];
+                       
+                       if (locationSubPath == MachinePath) {
+                               locationSubPath = null;
+                               configPath = MachinePath;
+                               locationConfigPath = null;
+                               return;
+                       }
+                       
+                       int i;
+                       if (locationSubPath == null) {
+                               configPath = fullPath;
+                               i = fullPath.LastIndexOf ("/");
+                       } else {
+                               configPath = locationSubPath;
+                               if (locationSubPath != "/")
+                                       i = locationSubPath.LastIndexOf ('/');
+                               else
+                                       i = -1;
+                       }
+                       
+                       if (i != -1) {
+                               locationConfigPath = configPath.Substring (i+1);
+                               
+                               if (i == 0)
+                                       locationSubPath = "/";
+                               else
+                                       locationSubPath = fullPath.Substring 
(0, i);
+                               
+                               string dir = MapPath (configPath);
+                               if (GetWebConfigFileName (dir) == null) {
+                                       InitForConfiguration (ref 
locationSubPath, out configPath, out locationConfigPath, root, 
hostInitConfigurationParams);
+                               }
+                       } else {
+                               locationSubPath = MachinePath;
+                               locationConfigPath = null;
+                               return;
+                       }
+               }
+               
+               public string MapPath (string virtualPath)
+               {
+                       if (map != null)
+                               return MapPathFromMapper (virtualPath);
+                       else
+                               return HttpContext.Current.Request.MapPath 
(virtualPath);
+               }
+               
+               public string NormalizeVirtualPath (string virtualPath)
+               {
+                       if (virtualPath == null || virtualPath.Length == 0)
+                               virtualPath = ".";
+                       else
+                               virtualPath = virtualPath.Trim ();
+
+                       if (virtualPath [0] == '~' && virtualPath.Length > 2 && 
virtualPath [1] == '/')
+                               virtualPath = virtualPath.Substring (1);
+                               
+                       if (System.IO.Path.DirectorySeparatorChar != '/')
+                               virtualPath = virtualPath.Replace 
(System.IO.Path.DirectorySeparatorChar, '/');
+
+                       if (UrlUtils.IsRooted (virtualPath)) {
+                               virtualPath = UrlUtils.Reduce (virtualPath);
+                       } else {
+                               if (map.VirtualDirectories.Count > 0) {
+                                       string root = map.VirtualDirectories 
[0].VirtualDirectory;
+                                       virtualPath = UrlUtils.Combine (root, 
virtualPath);
+                                       virtualPath = UrlUtils.Reduce 
(virtualPath);
+                               }
+                       }
+                       return virtualPath;
+               }
+
+               public string MapPathFromMapper (string virtualPath)
+               {
+                       string path = NormalizeVirtualPath (virtualPath);
+                       
+                       foreach (VirtualDirectoryMapping mapping in 
map.VirtualDirectories) {
+                               if (path.StartsWith (mapping.VirtualDirectory)) 
{
+                                       int i = mapping.VirtualDirectory.Length;
+                                       if (path.Length == i) {
+                                               return 
mapping.PhysicalDirectory;
+                                       }
+                                       else if (path [i] == '/') {
+                                               string pathPart = 
path.Substring (i + 1).Replace ('/', Path.DirectorySeparatorChar);
+                                               return Path.Combine 
(mapping.PhysicalDirectory, pathPart);
+                                       }
+                               }
+                       }
+                       throw new HttpException ("Invalid virtual directory: " 
+ virtualPath);
+               }
+
+               string GetWebConfigFileName (string dir)
+               {
+                       string file = Path.Combine (dir, "Web.config");
+                       if (File.Exists (file))
+                               return file;
+                       file = Path.Combine (dir, "web.config");
+                       if (File.Exists (file))
+                               return file;
+                       return null;
+               }
+               
+               public virtual bool IsAboveApplication (string configPath)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual bool IsConfigRecordRequired (string configPath)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual bool IsDefinitionAllowed (string configPath, 
ConfigurationAllowDefinition allowDefinition, ConfigurationAllowExeDefinition 
allowExeDefinition)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual bool IsFile (string streamName)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual bool IsLocationApplicable (string configPath)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual Stream OpenStreamForRead (string streamName)
+               {
+                       if (!File.Exists (streamName))
+                               throw new ConfigurationException ("File '" + 
streamName + "' not found");
+                               
+                       return new FileStream (streamName, FileMode.Open, 
FileAccess.Read);
+               }
+               
+               public virtual Stream OpenStreamForWrite (string streamName, 
string templateStreamName, ref object writeContext)
+               {
+                       return new FileStream (streamName, FileMode.Create, 
FileAccess.Write);
+               }
+               
+               public virtual bool PrefetchAll (string configPath, string 
streamName)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual bool PrefetchSection (string sectionGroupName, 
string sectionName)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual object StartMonitoringStreamForChanges (string 
streamName, StreamChangeCallback callback)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual void StopMonitoringStreamForChanges (string 
streamName, StreamChangeCallback callback)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual void VerifyDefinitionAllowed (string configPath, 
ConfigurationAllowDefinition allowDefinition, ConfigurationAllowExeDefinition 
allowExeDefinition, IConfigErrorInfo errorInfo)
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public virtual void WriteCompleted (string streamName, bool 
success, object writeContext)
+               {
+               }
+               
+               public virtual bool SupportsChangeNotifications {
+                       get { return false; }
+               }
+               
+               public virtual bool SupportsLocation {
+                       get { return false; }
+               }
+               
+               public virtual bool SupportsPath {
+                       get { return false; }
+               }
+               
+               public virtual bool SupportsRefresh {
+                       get { return false; }
+               }
+       }
+}
+
+#endif

Added: 
trunk/mcs/class/System.Web/System.Web.Configuration/WebConfigurationManager.cs
===================================================================
--- 
trunk/mcs/class/System.Web/System.Web.Configuration/WebConfigurationManager.cs  
    2005-06-23 17:52:14 UTC (rev 46444)
+++ 
trunk/mcs/class/System.Web/System.Web.Configuration/WebConfigurationManager.cs  
    2005-06-23 17:52:49 UTC (rev 46445)
@@ -0,0 +1,155 @@
+//
+// System.Web.Configuration.WebConfigurationManager.cs
+//
+// Authors:
+//     Lluis Sanchez Gual ([EMAIL PROTECTED])
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+//
+
+#if NET_2_0
+using System;
+using System.IO;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Reflection;
+using System.Xml;
+using System.Configuration;
+using System.Configuration.Internal;
+using _Configuration = System.Configuration.Configuration;
+
+namespace System.Web.Configuration {
+
+       public abstract class WebConfigurationManager
+       {
+               static IInternalConfigConfigurationFactory configFactory;
+               static Hashtable configurations = new Hashtable ();
+               
+               static WebConfigurationManager ()
+               {
+                       PropertyInfo prop = 
typeof(ConfigurationManager).GetProperty ("ConfigurationFactory", 
BindingFlags.Static | BindingFlags.NonPublic);
+                       if (prop != null)
+                               configFactory = prop.GetValue (null, null) as 
IInternalConfigConfigurationFactory;
+               }
+               
+               WebConfigurationManager ()
+               {
+               }
+               
+               public static _Configuration OpenWebConfiguration (string path)
+               {
+                       return OpenWebConfiguration (path, null, null, null, 
IntPtr.Zero, null);
+               }
+               
+               public static _Configuration OpenWebConfiguration (string path, 
string site)
+               {
+                       return OpenWebConfiguration (path, site, null, null, 
IntPtr.Zero, null);
+               }
+               
+               public static _Configuration OpenWebConfiguration (string path, 
string site, string locationSubPath)
+               {
+                       return OpenWebConfiguration (path, site, 
locationSubPath, null, IntPtr.Zero, null);
+               }
+               
+               public static _Configuration OpenWebConfiguration (string path, 
string site, string locationSubPath, string server, IntPtr userToken)
+               {
+                       return OpenWebConfiguration (path, site, 
locationSubPath, server, userToken, null);
+               }
+               
+               [MonoTODO ("Do something with the extra parameters")]
+               public static _Configuration OpenWebConfiguration (string path, 
string site, string locationSubPath, string server, IntPtr userToken, string 
password)
+               {
+                       string basePath = GetBasePath (path);
+                       _Configuration conf;
+                       
+                       lock (configurations) {
+                               conf = (_Configuration) configurations 
[basePath];
+                               if (conf == null) {
+                                       conf = ConfigurationFactory.Create 
(typeof(WebConfigurationHost), null, path, site, locationSubPath, server, 
userToken, password);
+                                       configurations [basePath] = conf;
+                               }
+                       }
+                       if (basePath.Length < path.Length) {
+                       
+                               // If the path has a file name, look for a 
location specific configuration
+                               
+                               int dif = path.Length - basePath.Length;
+                               string file = path.Substring (path.Length - 
dif);
+                               int i=0;
+                               while (i < file.Length && file [i] == '/')
+                                       i++;
+                               if (i != 0)
+                                       file = file.Substring (i);
+
+                               if (file.Length != 0) {
+                                       foreach (ConfigurationLocation loc in 
conf.Locations) {
+                                               if (loc.Path == file)
+                                                       return 
loc.OpenConfiguration ();
+                                       }
+                               }
+                       }
+                       return conf;
+               }
+               
+               public static _Configuration OpenMappedWebConfiguration 
(WebConfigurationFileMap fileMap, string path)
+               {
+                       return ConfigurationFactory.Create 
(typeof(WebConfigurationHost), fileMap, path);
+               }
+               
+               [MonoTODO ("Do something with the extra parameters")]
+               public static _Configuration OpenMappedWebConfiguration 
(WebConfigurationFileMap fileMap, string path, string site)
+               {
+                       return ConfigurationFactory.Create 
(typeof(WebConfigurationHost), fileMap, path, site);
+               }
+               
+               [MonoTODO ("Do something with the extra parameters")]
+               public static _Configuration OpenMappedWebConfiguration 
(WebConfigurationFileMap fileMap, string path, string site, string 
locationSubPath)
+               {
+                       return ConfigurationFactory.Create 
(typeof(WebConfigurationHost), fileMap, path, site, locationSubPath);
+               }
+               
+               public static _Configuration OpenMappedMachineConfiguration 
(ConfigurationFileMap fileMap)
+               {
+                       return ConfigurationFactory.Create 
(typeof(WebConfigurationHost), fileMap);
+               }
+               
+               internal static IInternalConfigConfigurationFactory 
ConfigurationFactory {
+                       get { return configFactory; }
+               }
+               
+               static string GetBasePath (string path)
+               {
+                       string pd = HttpContext.Current.Request.MapPath (path);
+
+                       if (!Directory.Exists (pd)) {
+                               int i = path.LastIndexOf ('/');
+                               path = path.Substring (0, i);
+                       } 
+                       
+                       while (path [path.Length - 1] == '/')
+                               path = path.Substring (0, path.Length - 1);
+                       return path;
+               }
+       }
+}
+
+#endif

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to