public void getData(string filename, string filterstring = null) { string configFilePath = "..\\..\\..\\Build\\Debug\\Configuration\\EpiInfo.Config.xml"; Epi.DataSets.Config configDataSet = new Epi.DataSets.Config(); configDataSet.ReadXml(configFilePath); Epi.Configuration.Load(configFilePath); System.Data.Common.DbConnectionStringBuilder dbCnnStringBuilder = new System.Data.Common.DbConnectionStringBuilder(); string provider = "Epi.Data.Office.CsvFileFactory, Epi.Data.Office"; IDbDriverFactory dbFactory = null; dbFactory = DbDriverFactoryCreator.GetDbDriverFactory(provider); IDbDriver db = dbFactory.CreateDatabaseObject(dbCnnStringBuilder); db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\\..\\Data;Extended Properties=\"text;HDR=Yes;FMT=Delimited\""; object selectedDataSource = db; IDbDriver dbDriver = (IDbDriver)selectedDataSource; DashboardHelper = new DashboardHelper(filename + "#csv", dbDriver); IGadgetParameters inputs = new GadgetParameters(); DashboardHelper.UserVarsNeedUpdating = true; string fs = null; if (!String.IsNullOrEmpty(filterstring)) { fs = "select * from " + filename + "#csv where " + filterstring; } PopulateDataSet(inputs, fs); }
/// <summary> /// Creates default configuration. Typically when Configuration structure is modified. /// </summary> /// <returns></returns> public static Configuration CreateDefaultConfiguration() { Config configDataSet = new Config(); Config.DirectoriesRow drow = configDataSet.Directories.NewDirectoriesRow(); // TODO: lookup temp folder?? drow.Working = "C:\\Temp\\"; // drow.Project = "C:\\Projects\\Epi Info 7\\"; string programFilesDirectoryName = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles).ToLower(); string installFolder = AppDomain.CurrentDomain.BaseDirectory; string writableFilesFolder = AppDomain.CurrentDomain.BaseDirectory; if (writableFilesFolder.ToLower().StartsWith(programFilesDirectoryName)) { string desktop = System.Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory).ToLower(); string localUserFolder = string.Empty; int index = desktop.LastIndexOf('\\'); if (index > 0 && !(desktop.StartsWith("\\"))) { localUserFolder = desktop.Substring(0, index); } if (Directory.Exists(localUserFolder)) { writableFilesFolder = localUserFolder + "\\Epi Info 7\\"; } else { writableFilesFolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments) + "\\Epi Info 7\\"; } } string configFolder = Path.Combine(writableFilesFolder, "Configuration\\"); if (!Directory.Exists(configFolder)) { Directory.CreateDirectory(configFolder); } drow.Configuration = configFolder; drow.Output = Path.Combine(writableFilesFolder, "Output\\"); drow.Templates = Path.Combine(writableFilesFolder, "Templates\\"); drow.Samples = Path.Combine(writableFilesFolder, "Resources\\Samples\\"); drow.Project = Path.Combine(writableFilesFolder, "Projects\\"); drow.LogDir = Path.Combine(writableFilesFolder, "Logs\\"); configDataSet.Directories.Rows.Add(drow); if (!Directory.Exists(drow.Output) && Directory.Exists(Path.Combine(installFolder, "Output\\"))) { Directory.CreateDirectory(drow.Output); DirectoryInfo sourceInfo = new DirectoryInfo(Path.Combine(installFolder, "Output\\")); DirectoryInfo targetInfo = new DirectoryInfo(drow.Output); Util.CopyDirectory(sourceInfo, targetInfo); } if (!Directory.Exists(drow.Templates) && Directory.Exists(Path.Combine(installFolder, "Templates\\"))) { Directory.CreateDirectory(drow.Templates); DirectoryInfo sourceInfo = new DirectoryInfo(Path.Combine(installFolder, "Templates\\")); DirectoryInfo targetInfo = new DirectoryInfo(drow.Templates); Util.CopyDirectory(sourceInfo, targetInfo); } //if (!Directory.Exists(drow.Samples)) //{ // Directory.CreateDirectory(drow.Samples); // DirectoryInfo sourceInfo = new DirectoryInfo(Path.Combine(installFolder, "Resources\\Samples\\")); // DirectoryInfo targetInfo = new DirectoryInfo(drow.Samples); // Util.CopyDirectory(sourceInfo, targetInfo); //} if (!Directory.Exists(drow.Project) && Directory.Exists(Path.Combine(installFolder, "Projects\\"))) { Directory.CreateDirectory(drow.Project); DirectoryInfo sourceInfo = new DirectoryInfo(Path.Combine(installFolder, "Projects\\")); DirectoryInfo targetInfo = new DirectoryInfo(drow.Project); Util.CopyDirectory(sourceInfo, targetInfo); } if (!Directory.Exists(drow.LogDir) && Directory.Exists(Path.Combine(installFolder, "Logs\\"))) { Directory.CreateDirectory(drow.LogDir); DirectoryInfo sourceInfo = new DirectoryInfo(Path.Combine(installFolder, "Logs\\")); DirectoryInfo targetInfo = new DirectoryInfo(drow.LogDir); Util.CopyDirectory(sourceInfo, targetInfo); } Config.VersionRow vrow = configDataSet.Version.NewVersionRow(); vrow.EpiInfoVersion = typeof(Configuration).Assembly.GetName().Version.Major; vrow.ConfigVersion = CurrentSchemaVersion; configDataSet.Version.Rows.Add(vrow); Config.RecentViewRow recentviewrow1 = configDataSet.RecentView.NewRecentViewRow(); recentviewrow1.Name = drow.Project + "Mumps\\Mumps.prj:Survey"; recentviewrow1.Location = drow.Project + "Mumps\\Mumps.prj:Survey"; recentviewrow1.LastAccessed = DateTime.Now; configDataSet.RecentView.Rows.Add(recentviewrow1); Config.RecentViewRow recentviewrow2 = configDataSet.RecentView.NewRecentViewRow(); recentviewrow2.Name = drow.Project + "HIV\\HIV.prj:Case"; recentviewrow2.Location = drow.Project + "HIV\\HIV.prj:Case"; recentviewrow2.LastAccessed = DateTime.Now; configDataSet.RecentView.Rows.Add(recentviewrow2); Config.RecentViewRow recentviewrow3 = configDataSet.RecentView.NewRecentViewRow(); recentviewrow3.Name = drow.Project + "EColi\\EColi.prj:FoodHistory"; recentviewrow3.Location = drow.Project + "EColi\\EColi.prj:FoodHistory"; recentviewrow3.LastAccessed = DateTime.Now; configDataSet.RecentView.Rows.Add(recentviewrow3); Config.RecentProjectRow recentprojectrow = configDataSet.RecentProject.NewRecentProjectRow(); recentprojectrow.Name = "Sample"; recentprojectrow.Location = drow.Project + "Sample\\Sample.prj"; recentprojectrow.LastAccessed = DateTime.Now; configDataSet.RecentProject.Rows.Add(recentprojectrow); Config.SettingsRow row = configDataSet.Settings.NewSettingsRow(); row.BackgroundImage = string.Empty; row.MRUProjectsCount = 4; row.MRUViewsCount = 4; row.MRUDataSourcesCount = 5; row.Language = "en-US"; row.Republish_IsRepbulishable = true; row.Republish_RequireSecurityKey = false; row.RepresentationOfYes = "Yes"; row.RepresentationOfNo = "No"; row.RepresentationOfMissing = "Missing"; row.DateFormat = @"MM-DD-YYYY"; row.TimeFormat = @"HH:MM:SS AMPM"; row.DateTimeFormat = @"MM-DD-YYYY HH:MM:SS AMPM"; row.StatisticsLevel = 4; row.RecordProcessingScope = 1; row.ShowCompletePrompt = true; row.ShowSelection = true; row.ShowGraphics = true; row.ShowPercents = true; row.ShowHyperlinks = true; row.ShowTables = true; row.IncludeMissingValues = false; row.SnapToGrid = true; row.EditorFontName = "Verdana"; row.EditorFontSize = 8.25M; row.ControlFontName = "Arial"; row.ControlFontSize = 10.25M; row.ShowStatusBar = true; row.PrecisionForStatistics = 2; row.MapServiceKey = "Aua5s8kFcEZMx5lsd8Vkerz3frboU1CwzvOyzX_vgSnzsnbqV7xlQ4WTRUlN19_Q"; row.LastAlertDate = new DateTime(2011, 9, 23); row.WebServiceAuthMode = 0; // 0 = Anon, 1 = NT row.EWEServiceAuthMode = 0; // 0 = Anon, 1 = NT row.WebServiceEndpointAddress = string.Empty; row.EWEServiceEndpointAddress = string.Empty; row.WebServiceBindingMode = "BASIC"; row.WebServiceMaxBufferPoolSize = 524288; row.WebServiceMaxReceivedMessageSize = 999999999; row.WebServiceReaderMaxDepth = 32; row.WebServiceReaderMaxStringContentLength = 2048000; row.WebServiceReaderMaxArrayLength = 16384; row.WebServiceReaderMaxBytesPerRead = 4096; row.WebServiceReaderMaxNameTableCharCount = 16384; row.EWEServiceBindingMode = "BASIC"; row.EWEServiceMaxBufferPoolSize = 524288; row.EWEServiceMaxReceivedMessageSize = 999999999; row.EWEServiceReaderMaxDepth = 32; row.EWEServiceReaderMaxStringContentLength = 2048000; row.EWEServiceReaderMaxArrayLength = 16384; row.EWEServiceReaderMaxBytesPerRead = 4096; row.EWEServiceReaderMaxNameTableCharCount = 16384; row.DashboardFrequencyRowLimit = 200; row.DashboardFrequencyStrataLimit = 100; row.DashboardFrequencyCrosstabLimit = 100; row.DashboardCombinedFrequencyRowLimit = 250; row.DashboardAberrationRowLimit = 366; row.DashboardLineListRowLimit = 2000; #if LINUX_BUILD row.DefaultDataDriver = MySQLDriver; #else row.DefaultDataDriver = AccessDriver; #endif row.DefaultDataFormatForRead = 3; row.FrameworkTcpPort = 11532; configDataSet.Settings.Rows.Add(row); // Data Drivers Config.DataDriversRow parentDataDriversRow = configDataSet.DataDrivers.NewDataDriversRow(); configDataSet.DataDrivers.Rows.Add(parentDataDriversRow); // Access driver Config.DataDriverRow dataDriverRow1 = configDataSet.DataDriver.NewDataDriverRow(); dataDriverRow1.DataDriversRow = parentDataDriversRow; dataDriverRow1.DisplayName = "Microsoft Access 2002-2003 (.mdb)"; dataDriverRow1.Type = AccessDriver; dataDriverRow1.DataProvider = true; dataDriverRow1.MetadataProvider = true; configDataSet.DataDriver.Rows.Add(dataDriverRow1); Config.DataDriverRow dataDriverRow3 = configDataSet.DataDriver.NewDataDriverRow(); dataDriverRow3.DataDriversRow = parentDataDriversRow; dataDriverRow3.DisplayName = "Microsoft Access 2007 (.accdb)"; dataDriverRow3.Type = Access2007Driver; dataDriverRow3.DataProvider = true; dataDriverRow3.MetadataProvider = false; configDataSet.DataDriver.Rows.Add(dataDriverRow3); // Excel driver Config.DataDriverRow dataDriverRowExcel = configDataSet.DataDriver.NewDataDriverRow(); dataDriverRowExcel.DataDriversRow = parentDataDriversRow; // Excel Workbook (*.xlsx) // Microsoft Excel 5.0/95 Workbook (*.xls) // Excel 97 - Excel 2003 Workbook (*.xls) dataDriverRowExcel.DisplayName = "Microsoft Excel 97-2003 Workbook (.xls)"; dataDriverRowExcel.Type = ExcelDriver; dataDriverRowExcel.DataProvider = true; dataDriverRowExcel.MetadataProvider = false; configDataSet.DataDriver.Rows.Add(dataDriverRowExcel); Config.DataDriverRow dataDriverRowExcel2007 = configDataSet.DataDriver.NewDataDriverRow(); dataDriverRowExcel2007.DataDriversRow = parentDataDriversRow; dataDriverRowExcel2007.DisplayName = "Microsoft Excel 2007 Workbook (.xlsx)"; dataDriverRowExcel2007.Type = Excel2007Driver; dataDriverRowExcel2007.DataProvider = true; dataDriverRowExcel2007.MetadataProvider = false; configDataSet.DataDriver.Rows.Add(dataDriverRowExcel2007); // SQL Server driver Config.DataDriverRow dataDriverRow2 = configDataSet.DataDriver.NewDataDriverRow(); dataDriverRow2.DataDriversRow = parentDataDriversRow; dataDriverRow2.DisplayName = "Microsoft SQL Server Database"; dataDriverRow2.Type = SqlDriver; dataDriverRow2.DataProvider = true; dataDriverRow2.MetadataProvider = true; configDataSet.DataDriver.Rows.Add(dataDriverRow2); Config.DataDriverRow dataDriverRowCsv = configDataSet.DataDriver.NewDataDriverRow(); dataDriverRowCsv.DataDriversRow = parentDataDriversRow; dataDriverRowCsv.DisplayName = "Flat ASCII File"; dataDriverRowCsv.Type = CsvDriver; dataDriverRowCsv.DataProvider = true; dataDriverRowCsv.MetadataProvider = false; configDataSet.DataDriver.Rows.Add(dataDriverRowCsv); Config.DataDriverRow dataDriverRowMySql = configDataSet.DataDriver.NewDataDriverRow(); dataDriverRowMySql.DataDriversRow = parentDataDriversRow; dataDriverRowMySql.DisplayName = "MySQL Database"; dataDriverRowMySql.Type = MySQLDriver; dataDriverRowMySql.DataProvider = true; dataDriverRowMySql.MetadataProvider = false; configDataSet.DataDriver.Rows.Add(dataDriverRowMySql); Config.DataDriverRow dataDriverRowPostgreSql = configDataSet.DataDriver.NewDataDriverRow(); dataDriverRowPostgreSql.DataDriversRow = parentDataDriversRow; dataDriverRowPostgreSql.DisplayName = "PostgreSQL Database"; dataDriverRowPostgreSql.Type = PostgreSQLDriver; dataDriverRowPostgreSql.DataProvider = true; dataDriverRowPostgreSql.MetadataProvider = false; configDataSet.DataDriver.Rows.Add(dataDriverRowPostgreSql); //// MySQLDriver Driver //Config.DataDriverRow dataDriverRow3 = configDataSet.DataDriver.NewDataDriverRow(); //dataDriverRow3.DataDriversRow = parentDataDriversRow; //dataDriverRow3.DisplayName = "MySQL Database"; //dataDriverRow3.Type = MySQLDriver; //configDataSet.DataDriver.Rows.Add(dataDriverRow3); /* * KKM4: Disabled Excel drivers for the time being. dataDriverRow = configDataSet.DataDriver.NewDataDriverRow(); dataDriverRow.DataDriversRow = parentDataDriversRow; dataDriverRow.DisplayName = "Microsoft Excel Spreadsheet"; dataDriverRow.Type = "Epi.Data.Office.ExcelWorkbook, Epi.Data.Office"; configDataSet.DataDriver.Rows.Add(dataDriverRow); */ // Connections Config.ConnectionsRow connectionsRow = configDataSet.Connections.NewConnectionsRow(); configDataSet.Connections.Rows.Add(connectionsRow); Config.FileRow fileRow; fileRow = configDataSet.File.NewFileRow(); fileRow.ConnectionsRow = connectionsRow; fileRow.DataDriver = AccessDriver; // "Epi.Data.Office.AccessDatabase, Epi.Data.Office"; fileRow.Extension = ".mdb"; configDataSet.File.Rows.Add(fileRow); fileRow = configDataSet.File.NewFileRow(); fileRow.ConnectionsRow = connectionsRow; fileRow.DataDriver = AccessDriver; // "Epi.Data.Office.AccessDatabase, Epi.Data.Office"; fileRow.Extension = ".accdb"; configDataSet.File.Rows.Add(fileRow); fileRow = configDataSet.File.NewFileRow(); fileRow.ConnectionsRow = connectionsRow; fileRow.DataDriver = ExcelDriver; // "Epi.Data.Office.ExcelWorkbook, Epi.Data.Office"; fileRow.Extension = ".xls"; configDataSet.File.Rows.Add(fileRow); fileRow = configDataSet.File.NewFileRow(); fileRow.ConnectionsRow = connectionsRow; fileRow.DataDriver = ExcelDriver; // "Epi.Data.Office.ExcelWorkbook, Epi.Data.Office"; fileRow.Extension = ".xlsx"; configDataSet.File.Rows.Add(fileRow); Config.DatabaseRow dbRow; // AppData MDB is not required any more. //dbRow = configDataSet.Database.NewDatabaseRow(); //dbRow.ConnectionsRow = connectionsRow; //dbRow.Name = Epi.Data.DbDriverFactoryCreator.KnownDatabaseNames.AppData; //dbRow.DataDriver = AccessDriver; // "Epi.Data.Office.AccessDatabase, Epi.Data.Office"; //dbRow.ConnectionString = Path.Combine(Path.Combine(installFolder, "Resources\\AppData\\"), "AppData.mdb"); //configDataSet.Database.Rows.Add(dbRow); //PHIN VS database dbRow = configDataSet.Database.NewDatabaseRow(); dbRow.ConnectionsRow = connectionsRow; dbRow.Name = Epi.Data.DbDriverFactoryCreator.KnownDatabaseNames.Phin; dbRow.DataDriver = AccessDriver; // "Epi.Data.Office.AccessDatabase, Epi.Data.Office"; dbRow.ConnectionString = Path.Combine(Path.Combine(writableFilesFolder, "Resources\\PHIN\\"), "PHINVS.mdb"); configDataSet.Database.Rows.Add(dbRow); if (!Directory.Exists(Path.Combine(writableFilesFolder, "Resources\\PHIN\\"))) { Directory.CreateDirectory(Path.Combine(writableFilesFolder, "Resources\\PHIN\\")); DirectoryInfo sourceInfo = new DirectoryInfo(Path.Combine(installFolder, "Resources\\PHIN\\")); DirectoryInfo targetInfo = new DirectoryInfo(Path.Combine(writableFilesFolder, "Resources\\PHIN\\")); Util.CopyDirectory(sourceInfo, targetInfo); } // Translation database dbRow = configDataSet.Database.NewDatabaseRow(); dbRow.ConnectionsRow = connectionsRow; dbRow.Name = Epi.Data.DbDriverFactoryCreator.KnownDatabaseNames.Translation; dbRow.DataDriver = AccessDriver; // "Epi.Data.Office.AccessDatabase, Epi.Data.Office"; dbRow.ConnectionString = Path.Combine(configFolder, "Translations.mdb"); configDataSet.Database.Rows.Add(dbRow); Config.ModulesRow parentModulesRow = configDataSet.Modules.NewModulesRow(); configDataSet.Modules.Rows.Add(parentModulesRow); Config.ModuleRow moduleRow; moduleRow = configDataSet.Module.NewModuleRow(); moduleRow.ModulesRow = parentModulesRow; moduleRow.Name = "MENU"; moduleRow.Type = "Epi.Windows.Menu.MenuWindowsModule, Menu"; configDataSet.Module.Rows.Add(moduleRow); moduleRow = configDataSet.Module.NewModuleRow(); moduleRow.ModulesRow = parentModulesRow; moduleRow.Name = "MAKEVIEW"; moduleRow.Type = "Epi.Windows.MakeView.MakeViewWindowsModule, MakeView"; configDataSet.Module.Rows.Add(moduleRow); moduleRow = configDataSet.Module.NewModuleRow(); moduleRow.ModulesRow = parentModulesRow; moduleRow.Name = "ENTER"; moduleRow.Type = "Epi.Windows.Enter.EnterWindowsModule, Enter"; configDataSet.Module.Rows.Add(moduleRow); moduleRow = configDataSet.Module.NewModuleRow(); moduleRow.ModulesRow = parentModulesRow; moduleRow.Name = "ANALYSIS"; moduleRow.Type = "Epi.Windows.Analysis.AnalysisWindowsModule, Analysis"; configDataSet.Module.Rows.Add(moduleRow); moduleRow = configDataSet.Module.NewModuleRow(); moduleRow.ModulesRow = parentModulesRow; moduleRow.Name = "EPIMAP"; moduleRow.Type = "Epi.Windows.EpiMap.EpiMapWindowsModule, EpiMap"; configDataSet.Module.Rows.Add(moduleRow); moduleRow = configDataSet.Module.NewModuleRow(); moduleRow.ModulesRow = parentModulesRow; moduleRow.Name = "EPIREPORT"; moduleRow.Type = "Epi.Windows.EpiReport.EpiReportWindowsModule, EpiReport"; configDataSet.Module.Rows.Add(moduleRow); moduleRow = configDataSet.Module.NewModuleRow(); moduleRow.ModulesRow = parentModulesRow; moduleRow.Name = "Localization"; moduleRow.Type = "Epi.Windows.Localization.LocalizationWindowsModule, TSetup"; configDataSet.Module.Rows.Add(moduleRow); return new Configuration(DefaultConfigurationPath, configDataSet); }
private static Config.RecentViewRow GetOldestRecentView(Config.RecentViewDataTable mruViews) { Config.RecentViewRow oldestView = null; if (mruViews.Count > 0) { oldestView = mruViews[0]; for (int index = 1; index < mruViews.Count; index++) { Config.RecentViewRow thisView = mruViews[index]; if (thisView.LastAccessed < oldestView.LastAccessed) { oldestView = thisView; } } } return oldestView; }
private static Config.RecentProjectRow GetOldestRecentProject(Config.RecentProjectDataTable mruProjects) { Config.RecentProjectRow oldestProject = null; if (mruProjects.Count > 0) { oldestProject = mruProjects[0]; for (int index = 1; index < mruProjects.Count; index++) { Config.RecentProjectRow thisProject = mruProjects[index]; if (thisProject.LastAccessed < oldestProject.LastAccessed) { oldestProject = thisProject; } } } return oldestProject; }
private static Config.RecentDataSourceRow GetOldestRecentDataSource(Config.RecentDataSourceDataTable mruSources) { Config.RecentDataSourceRow oldestSource = null; if (mruSources.Count > 0) { oldestSource = mruSources[0]; for (int index = 1; index < mruSources.Count; index++) { Config.RecentDataSourceRow thisSource = mruSources[index]; if (thisSource.LastAccessed < oldestSource.LastAccessed) { oldestSource = thisSource; } } } return oldestSource; }
/// <summary> /// What to do when a gadget plug-in has been selected for import /// </summary> public static void OnGadgetImport(string displayName, string type, string fileName, int menuSection) { AssertConfigurationLoaded(); #region Input Validation // All public methods should assert that configuration has been loaded AssertConfigurationLoaded(); if (string.IsNullOrEmpty(displayName)) { throw new System.ArgumentNullException("displayName"); } if (string.IsNullOrEmpty(type)) { throw new System.ArgumentNullException("type"); } if (string.IsNullOrEmpty(fileName)) { throw new System.ArgumentNullException("fileName"); } #endregion Input Validation Config configDataSet = new Config(); Config.GadgetsDataTable mruGadgets = current.Gadgets; Config.GadgetDataTable mruGadget = current.Gadget; // Check if this gadget is already in the config bool sourceFound = false; foreach (Config.GadgetRow mruGadgetRow in mruGadget.Rows) { if (mruGadgetRow.Type.ToLower().Equals(type.ToLower())) { //Found the gadget sourceFound = true; } } if (sourceFound == false) { // Data Drivers if (configDataSet.Gadgets.Count < 1) { Config.GadgetsRow newrow = mruGadgets.NewGadgetsRow(); //configDataSet.Gadgets.Rows.Add(newrow); mruGadgets.AddGadgetsRow(newrow); } Config.GadgetsRow parentGadgetsRow = mruGadgets[0]; // this is a new gadget Config.GadgetRow gadgetRow = mruGadget.NewGadgetRow(); gadgetRow.GadgetsRow = parentGadgetsRow; gadgetRow.DisplayName = displayName; gadgetRow.Type = type; gadgetRow.FileName = fileName; gadgetRow.MenuSection = menuSection; mruGadget.AddGadgetRow(gadgetRow); } Save(); }
/// <summary> /// Loads Config information from the XML file. /// </summary> public static void Load(string filePath) { if (string.IsNullOrEmpty(filePath)) { throw new ArgumentNullException("filePath"); } Config configDataSet = new Config(); string configFilePath = filePath; try { // prevent this method from being called concurrently System.Threading.Monitor.Enter(syncLock); StopWatchingForChanges(); if (!File.Exists(configFilePath)) { //throw new FileNotFoundException("Configuration file not found.", configFilePath); } else { XmlDocument doc = new XmlDocument(); doc.Load(configFilePath); XmlNode versionNode = doc.DocumentElement.SelectSingleNode("/Config/Version"); int configFileVersion = int.Parse(versionNode.Attributes.GetNamedItem("ConfigVersion").Value); // Validate configuration ... if (configFileVersion == Configuration.CurrentSchemaVersion) { configDataSet = new Config(); configDataSet.ReadXml(configFilePath); current = new Configuration(configFilePath, configDataSet); } else if (configFileVersion > Configuration.CurrentSchemaVersion) { throw new ConfigurationException(ConfigurationException.ConfigurationIssue.HigherVersion); } else { throw new ConfigurationException(ConfigurationException.ConfigurationIssue.LowerVersion); } } } catch (ConfigurationException) { throw; } catch (Exception ex) { current = null; throw new ConfigurationException(ConfigurationException.ConfigurationIssue.ContentsInvalid, ex); } finally { BeginWatchingForChanges(); System.Threading.Monitor.Exit(syncLock); } }