/// /// Copyright (c) 2013-2020 Sensus Slovensko a.s. /// using System; using System.Text; using System.Xml.Serialization; namespace Common { /// /// Test bench database settings, contains bench name and settings od several databases /// public class DatabaseSettings : ICloneable, IComparable { // Public fields public string BenchName; public bool IsRealBench; public DBSettings ProceduresDBSettings; /// Configuration database settings public DBSettings WaterMetersDBSettings; /// Results database settings public DBSettings EventsDBSettings; /// Events database settings public DBSettings UsersDBSettings; /// Shared configuration database settings // Constructor public DatabaseSettings() { BenchName = String.Empty; /// Empty string (avoid null) IsRealBench = false; ProceduresDBSettings = new DBSettings(DBType.MySql, string.Empty); WaterMetersDBSettings = new DBSettings(DBType.MySql, string.Empty); EventsDBSettings = new DBSettings(DBType.MySql, string.Empty); UsersDBSettings = new DBSettings(DBType.MySql, string.Empty); } public object Clone() { DatabaseSettings result = new DatabaseSettings(); result.BenchName = BenchName; result.IsRealBench = IsRealBench; result.ProceduresDBSettings = (DBSettings)ProceduresDBSettings.Clone(); result.WaterMetersDBSettings = (DBSettings)WaterMetersDBSettings.Clone(); result.EventsDBSettings = (DBSettings)EventsDBSettings.Clone(); result.UsersDBSettings = (DBSettings)UsersDBSettings.Clone(); return result; } public int CompareTo(object dbs2) { if (!(dbs2 is DatabaseSettings)) return 0; return String.Compare(BenchName, (dbs2 as DatabaseSettings).BenchName); } /// /// Extract and return a DB server from a MySQL connection string. /// public static string GetDBServer(string connectionString) { return GetFromConnectionString(connectionString, new string[] { "SERVER=" }); } /// /// Extract and return a DB name from a MySQL connection string. /// public static string GetDBName(string connectionString) { return GetFromConnectionString(connectionString, new string[] { "DATABASE=" }); } /// /// Extract and return a username from a MySQL connection string /// public static string GetDBUser(string connectionString) { return GetFromConnectionString(connectionString, new string[] { "USER=", "UID=" }); } /// /// Extract and return a password from a MySQL connection string /// public static string GetDBPassword(string connectionString) { return GetFromConnectionString(connectionString, new string[] { "PASSWORD=", "PWD=" }); } /// /// Extract and return an element of a MySQL connection string /// (a host, a database, a user name or a password). /// Return an empty string on any error. /// public static string GetFromConnectionString(string connectionString, string[] patterns) { foreach (var pattern in patterns) { int startIx = connectionString.IndexOf(pattern); if (startIx >= 0) { /// pattern found, extract the subsequent element startIx += pattern.Length; int endIx = connectionString.IndexOf(';', startIx); return (endIx > 0) ? connectionString.Substring(startIx, endIx - startIx) : string.Empty; } } /// pattern NOT found return string.Empty; } public override string ToString() { return string.Format("{0} config={1} results={2} events={3} users={4}", BenchName, ProceduresDBSettings.ConnectionString, WaterMetersDBSettings.ConnectionString, EventsDBSettings.ConnectionString, UsersDBSettings.ConnectionString); } } }