New test.
[mono.git] / mcs / class / System.Data / Mainsoft.Data.Configuration.jvm / KeyMapperBase.cs
old mode 100755 (executable)
new mode 100644 (file)
index f4fff36..ca914ae
@@ -34,6 +34,7 @@ using System.Collections;
 using System.Collections.Specialized;
 using System.Text;
 using System.Globalization;
+using System.IO;
 
 namespace Mainsoft.Data.Configuration
 {
@@ -44,6 +45,7 @@ namespace Mainsoft.Data.Configuration
                private readonly IDictionary _dictionary;
                private readonly NameValueCollection _mapping;
                private readonly NameValueCollection _actualKeys;
+               const string DataDirectoryPlaceholder = "|DataDirectory|";
 
                #endregion // Fields
 
@@ -58,39 +60,6 @@ namespace Mainsoft.Data.Configuration
 
                #endregion // Constructors
 
-               #region Properties
-
-               public object this [object key]
-               {
-                       get { 
-
-                               if (!(key is String))
-                                       throw new ArgumentException("key is not string");
-
-                               string skey = (string)key;
-
-                               skey = GetConnectionStringKey(skey);
-                               if (skey == null)
-                                       return null;
-
-                               return _dictionary[skey];
-                       }
-
-                       set {
-                               if (!(key is String))
-                                       throw new ArgumentException("key is not string");
-
-                               string skey = (string)key;
-
-                               skey = GetConnectionStringKey(skey);
-                               if (skey == null)
-                                       skey = (string)key;
-
-                               _dictionary[skey] = value;
-                       }
-               }
-               #endregion // Properties
-
                #region Methods
 
                public string GetConnectionStringKey (string key)
@@ -129,6 +98,17 @@ namespace Mainsoft.Data.Configuration
                        }
                        //connectionString += ";";
 
+                       if (connectionString.IndexOf (DataDirectoryPlaceholder, StringComparison.Ordinal) >= 0) {
+                               string dataDirectory = (string) AppDomain.CurrentDomain.GetData ("DataDirectory");
+                               if (dataDirectory != null && dataDirectory.Length > 0) {
+                                       char lastChar = dataDirectory [dataDirectory.Length - 1];
+                                       if (lastChar != Path.DirectorySeparatorChar &&
+                                               lastChar != Path.AltDirectorySeparatorChar)
+                                               dataDirectory += '/';
+                               }
+                               connectionString = connectionString.Replace (DataDirectoryPlaceholder, dataDirectory);
+                       }
+
                        bool inQuote = false;
                        bool inDQuote = false;
                        bool inName = true;
@@ -221,49 +201,78 @@ namespace Mainsoft.Data.Configuration
 
                #region IDictionary Members
 
-               public bool IsFixedSize
+               public virtual bool IsFixedSize
                {
                        get { return _dictionary.IsFixedSize; }
                }
 
-               public bool IsReadOnly
+               public virtual bool IsReadOnly
                {
                        get { return _dictionary.IsReadOnly; }
                }
 
-               public ICollection Keys
+               public virtual ICollection Keys
                {
                        get { 
                                return _dictionary.Keys; 
                        }
                }
 
-               public ICollection Values
+               public virtual object this [object key] {
+                       get { 
+
+                               if (!(key is String))
+                                       throw new ArgumentException("key is not string");
+
+                               string skey = (string)key;
+
+                               skey = GetConnectionStringKey(skey);
+                               if (skey == null)
+                                       return null;
+
+                               return _dictionary[skey];
+                       }
+
+                       set {
+                               if (!(key is String))
+                                       throw new ArgumentException("key is not string");
+
+                               string skey = (string)key;
+
+                               skey = GetConnectionStringKey(skey);
+                               if (skey == null)
+                                       skey = (string)key;
+
+                               _dictionary[skey] = value;
+                       }
+               }
+
+               public virtual ICollection Values
                {
                        get { return _dictionary.Values; }
                }
 
-               public void Add (object key, object value)
+               public virtual void Add (object key, object value)
                {
                        _dictionary.Add ((string)key, (string)value);
                }
 
-               public void Clear ()
+               public virtual void Clear ()
                {
                        _dictionary.Clear ();
                }
 
-               public bool Contains (object key)
+               public virtual bool Contains (object key)
                {
                        return _dictionary.Contains (key);
                }
 
-               public IDictionaryEnumerator GetEnumerator ()
+               public virtual IDictionaryEnumerator GetEnumerator ()
                {
                        return _dictionary.GetEnumerator ();
                }
 
-               public void Remove (object key)
+               public virtual void Remove (object key)
                {
                        _dictionary.Remove ((string)key);
                }
@@ -274,29 +283,29 @@ namespace Mainsoft.Data.Configuration
 
                IEnumerator IEnumerable.GetEnumerator () 
                {
-                       return _dictionary.GetEnumerator ();
+                       return this.GetEnumerator();
                }
 
                #endregion // IEnumerable Members
 
                #region ICollection Members
 
-               public bool IsSynchronized 
+               public virtual bool IsSynchronized 
                {
                        get { return ((ICollection)_dictionary).IsSynchronized; }
                }
 
-               public int Count 
+               public virtual int Count 
                {
                        get { return _dictionary.Count; }
                }
 
-               public void CopyTo (Array array, int index) 
+               public virtual void CopyTo (Array array, int index) 
                {
                        _dictionary.CopyTo (array, index);
                }
 
-               public object SyncRoot 
+               public virtual object SyncRoot 
                {
                        get {return ((ICollection)_dictionary).SyncRoot; }
                }