122 lines
4.5 KiB
C#
122 lines
4.5 KiB
C#
|
|
///
|
|||
|
|
/// Copyright (c) 2013-2020 Sensus Slovensko a.s.
|
|||
|
|
///
|
|||
|
|
using System;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Xml.Serialization;
|
|||
|
|
|
|||
|
|
namespace Common
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// Test bench database settings, contains bench name and settings od several databases
|
|||
|
|
/// </summary>
|
|||
|
|
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);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Extract and return a DB server from a MySQL connection string.
|
|||
|
|
/// </summary>
|
|||
|
|
public static string GetDBServer(string connectionString)
|
|||
|
|
{
|
|||
|
|
return GetFromConnectionString(connectionString, new string[] { "SERVER=" });
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Extract and return a DB name from a MySQL connection string.
|
|||
|
|
/// </summary>
|
|||
|
|
public static string GetDBName(string connectionString)
|
|||
|
|
{
|
|||
|
|
return GetFromConnectionString(connectionString, new string[] { "DATABASE=" });
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Extract and return a username from a MySQL connection string
|
|||
|
|
/// </summary>
|
|||
|
|
public static string GetDBUser(string connectionString)
|
|||
|
|
{
|
|||
|
|
return GetFromConnectionString(connectionString, new string[] { "USER=", "UID=" });
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Extract and return a password from a MySQL connection string
|
|||
|
|
/// </summary>
|
|||
|
|
public static string GetDBPassword(string connectionString)
|
|||
|
|
{
|
|||
|
|
return GetFromConnectionString(connectionString, new string[] { "PASSWORD=", "PWD=" });
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 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.
|
|||
|
|
/// </summary>
|
|||
|
|
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);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|