#region Disclaimer / License // Copyright (C) 2010, Jackie Ng // http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie@gmail.com // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // #endregion using System; using System.Collections.Generic; using System.Text; using System.Xml; namespace Maestro.Editors.FeatureSource.Providers.Odbc { internal static class OdbcDriverMap { static Dictionary _drivers; static OdbcDriverMap() { _drivers = new Dictionary(); if (System.IO.File.Exists("OdbcEditorMap.xml")) { var doc = new XmlDocument(); doc.Load("OdbcEditorMap.xml"); var list = doc.SelectNodes("//OdbcDriverMap/Driver"); foreach (XmlNode node in list) { try { string provider = node.Attributes["name"].Value.ToUpper(); string typeName = node.Attributes["type"].Value; _drivers[provider] = Type.GetType(typeName); } catch { } } } } public static string[] EnumerateDrivers() { return new List(_drivers.Keys).ToArray(); } public static OdbcDriverInfo GetDriver(string provider) { OdbcDriverInfo driver = null; string name = provider.ToUpper(); if (_drivers.ContainsKey(name)) { driver = (OdbcDriverInfo)Activator.CreateInstance(_drivers[name]); } else { throw new OdbcDriverNotFoundException(provider); } return driver; } } /// /// Thrown when an ODBC driver is not found /// [global::System.Serializable] public class OdbcDriverNotFoundException : Exception { // // For guidelines regarding the creation of new exception types, see // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconerrorraisinghandlingguidelines.asp // and // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp07192001.asp // /// /// Initializes a new instance of the class. /// public OdbcDriverNotFoundException() { } /// /// Initializes a new instance of the class. /// /// The message. public OdbcDriverNotFoundException(string message) : base(message) { } /// /// Initializes a new instance of the class. /// /// The message. /// The inner. public OdbcDriverNotFoundException(string message, Exception inner) : base(message, inner) { } /// /// Initializes a new instance of the class. /// /// The that holds the serialized object data about the exception being thrown. /// The that contains contextual information about the source or destination. /// /// The parameter is null. /// /// /// /// The class name is null or is zero (0). /// protected OdbcDriverNotFoundException( System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context) { } } }