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