using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core.Helpers; namespace Tango.SQLExaminer { public class ExaminerConfigurationBuilder { private ExaminerConfiguration _config; private String GetConfigurationFilePath(ExaminerConfigurationType type) { return Path.Combine(Helper.SQL_EXAMINER_CONFIG_FOLDER, type.ToString() + ".xml"); } public ExaminerConfigurationBuilder(ExaminerConfigurationType type) { _config = ExaminerConfiguration.FromFile(GetConfigurationFilePath(type)); _config.ConfigurationType = type; _config.DataSources.Clear(); } public ExaminerConfigurationBuilder(String filePath) { _config = ExaminerConfiguration.FromFile(filePath); _config.DataSources.Clear(); } public ExaminerConfigurationBuilder SetSource(Core.DataSource dataSource) { DataSource d1 = _config.DataSources.SingleOrDefault(x => x.ID == 1); if (d1 == null) { d1 = new DataSource(); _config.DataSources.Add(d1); } d1.ID = 1; d1.DataBase = dataSource.Catalog; d1.Server = dataSource.Address; if (dataSource.IntegratedSecurity) { d1.IntegratedSecurity = "True"; } else { d1.UserName = dataSource.UserName; d1.Password = dataSource.Password; } if (dataSource.Type == Core.DataSourceType.Azure) { d1.Type = "SqlAzure"; } return this; } public ExaminerConfigurationBuilder SetTarget(Core.DataSource dataSource) { DataSource d2 = _config.DataSources.SingleOrDefault(x => x.ID == 2); if (d2 == null) { d2 = new DataSource(); _config.DataSources.Add(d2); } d2.ID = 2; d2.DataBase = dataSource.Catalog; d2.Server = dataSource.Address; if (dataSource.IntegratedSecurity) { d2.IntegratedSecurity = "True"; } else { d2.UserName = dataSource.UserName; d2.Password = dataSource.Password; } if (dataSource.Type == Core.DataSourceType.Azure) { d2.Type = "SqlAzure"; } return this; } public ExaminerConfigurationBuilder SetBackupFile(String path) { var backup_action = _config.Actions.SingleOrDefault(x => x.Type == "backup"); if (backup_action != null) { backup_action.Path = path; } else { _config.Actions.Insert(0, new Action() { Type = "backup", Path = path, }); } return this; } public ExaminerConfigurationBuilder Synchronize() { var sync_action = _config.Actions.SingleOrDefault(x => x.Type == "synchronize"); if (sync_action == null) { _config.Actions.Add(new Action() { Type = "synchronize" }); } return this; } public ExaminerConfigurationBuilder NoSynchronize() { var sync_action = _config.Actions.SingleOrDefault(x => x.Type == "synchronize"); if (sync_action != null) { _config.Actions.Remove(sync_action); } return this; } public ExaminerConfigurationBuilder SetReportFile(String path) { var Report_action = _config.Actions.SingleOrDefault(x => x.Type == "report"); if (Report_action != null) { Report_action.Path = path; } else { _config.Actions.Add(new Action() { Type = "report", Path = path, ReportType = "xml", ReportOn = "Different, OnlyInDb1, OnlyInDb2" }); } return this; } public ExaminerConfigurationBuilder SetLogFile(String path) { var no_log_option = _config.Options.AdditionalOptions.SingleOrDefault(x => x.Name == "Nolog"); if (no_log_option != null) { _config.Options.AdditionalOptions.Remove(no_log_option); } _config.Options.AdditionalOptions.Add(new AdditionalOption() { Name = "Log", Value = path, }); return this; } public ExaminerConfigurationBuilder SetMachineSerialNumber(String serialNumber) { foreach (var query in _config.Objects.ObjectList.Object.SelectMany(x => x.Queries)) { query.Text.InnerText = query.Text.InnerText.Replace("@", serialNumber); } return this; } public ExaminerConfiguration Build() { return _config; } } }