private void ReLoadAndSaveTableConfiguration(CDataset dataSet, CTable table) { IsBusy = true; _schedulerProvider.Background.Schedule(async() => { try { var ds = Configuration.Datasource.FirstOrDefault(dsrc => dsrc.name.Equals(dataSet.dataSourceName)); var schema = await _dataSourceProvider.GetSchema(ds, table.name.UnQuoteName()); if (!string.IsNullOrEmpty(schema)) { var builder = XmlBuilder.BuildElements(ds, schema); if (null != builder) { var config = XmlHelper <CConfiguration> .LoadFromString(builder.ToString()); _schedulerProvider.MainThread.Schedule(() => { var currentTable = dataSet.Table.FirstOrDefault(t => t.name.Equals(table.name)); dataSet.Table.Remove(currentTable); var newTable = config.Dataset.FirstOrDefault().Table.FirstOrDefault(); dataSet.Table.Add(newTable); foreach (var dset in Configuration.Dataset) { dset.Query.Clear(); } XmlHelper <CConfiguration> .Save(DefaultConfigFile, Configuration); AppendChildren(newTable, dataSet); newTable.Relationship = new ObservableCollection <CRelationship> { dataSet.Relationship.Where(r => newTable.name.Equals(r.fromTable)) }; var currentConfig = XmlHelper <CConfiguration> .Load(DefaultStoreProcsConfigFile); foreach (var dset in currentConfig.Dataset) { Configuration.Dataset.FirstOrDefault(d => d.name.Equals(dset.name)) .Query.AddRange(dset.Query); } SelectedTable = newTable; }); } } } catch (Exception e) { Logger.Log.Error(e, "Exception while reloading and saving configuration for table {0} at data set {1}", table.name, dataSet.name); MessageQueue.Enqueue(e.Message); } finally { _schedulerProvider.MainThread.Schedule(() => IsBusy = false); } }); }
private void ReLoadAndSaveConfiguration(CDataset dataSet) { IsBusy = true; _schedulerProvider.Background.Schedule(async() => { try { var ds = Configuration.Datasource.FirstOrDefault(dsrc => dsrc.name.Equals(dataSet.dataSourceName)); var schema = await _dataSourceProvider.GetSchema(ds); if (!string.IsNullOrEmpty(schema)) { var builder = XmlBuilder.BuildElements(ds, schema); if (null != builder) { var config = InitConfiguration(XmlHelper <CConfiguration> .LoadFromString(builder.ToString())); _schedulerProvider.MainThread.Schedule(() => { dataSet.Table.Clear(); dataSet.Table.AddRange(config.Dataset.FirstOrDefault().Table); //fix relationship names foreach (var dset in config.Dataset) { foreach (var rel in dset.Relationship) { rel.name = rel.GetName(); } } var tables = dataSet.Table.Select(tbl => tbl.name); var invalidRels = from r in dataSet.Relationship where !tables.Contains(r.fromTable) || !tables.Contains(r.toTable) select r; foreach (var invRel in invalidRels) { var relToRem = dataSet.Relationship.FirstOrDefault(r => r.name.Equals(invRel.name)); dataSet.Relationship.Remove(relToRem); } foreach (var dset in Configuration.Dataset) { dset.Query.Clear(); } XmlHelper <CConfiguration> .Save(DefaultConfigFile, Configuration); SelectedTable = dataSet.Table.FirstOrDefault(t => t.name.Equals(dataSet.defaultTable)); }); var queryConfig = await ReLoadAndSaveQueries(dataSet); _schedulerProvider.MainThread.Schedule(() => { foreach (var dset in queryConfig.Dataset) { Configuration.Dataset.FirstOrDefault(d => d.name.Equals(dset.name)) .Query.AddRange(dset.Query); } SelectedQuery = dataSet.Query.FirstOrDefault(q => q.isStoreProcedure); SelectedScriptQuery = dataSet.Query.LastOrDefault(q => q.isScript); }); } } } catch (Exception e) { Logger.Log.Error(e, "Exception while reloading and saving configuration for {0}", dataSet.name); MessageQueue.Enqueue(e.Message); } finally { _schedulerProvider.MainThread.Schedule(() => IsBusy = false); } }); }
private void LoadAndSaveConfiguration(CDatasource ds) { IsBusy = true; _schedulerProvider.Background.Schedule(async() => { try { _dataSourceProvider = _dataSourceProviders.FirstOrDefault(p => p.Name.Equals(ds.providerName)); _dataSourceProvider.SetLog(Logger.Log); var schema = await _dataSourceProvider.GetSchema(ds); if (!string.IsNullOrEmpty(schema)) { var builder = XmlBuilder.BuildElements(ds, schema); if (null != builder) { var config = XmlHelper <CConfiguration> .LoadFromString(builder.ToString()); if (!File.Exists(DefaultConfigFile)) { //fix relationship names foreach (var dset in config.Dataset) { foreach (var rel in dset.Relationship) { rel.name = rel.GetName(); } } XmlHelper <CConfiguration> .Save(DefaultConfigFile, config); Configuration = Configuration ?? InitConfiguration(config); SetDataset.Execute(Configuration.Dataset.FirstOrDefault()); IsEmpty = false; var queryConfig = await LoadAndSaveQueries(ds, SelectedDataset.name); _schedulerProvider.MainThread.Schedule(() => { SelectedDataset.Query.AddRange(queryConfig.Dataset.FirstOrDefault().Query); SelectedQuery = SelectedDataset.Query.FirstOrDefault(q => q.isStoreProcedure); SelectedScriptQuery = SelectedDataset.Query.LastOrDefault(q => q.isScript); }); } else { if (Configuration.Dataset.Any(cds => cds.name.Equals(config.defaultDataset))) { for (var i = 1; i < 10000; i++) { if (!Configuration.Dataset.Any(cds => cds.name.Equals(config.defaultDataset + i))) { var newName = config.Dataset.FirstOrDefault().name + i; config.Dataset.FirstOrDefault().name = newName; config.Dataset.FirstOrDefault().dataSourceName = newName; config.Datasource.FirstOrDefault().name = newName; break; } } } _schedulerProvider.MainThread.Schedule(() => { Configuration.Datasource.Add(config.Datasource.FirstOrDefault()); Configuration.Dataset.Add(config.Dataset.FirstOrDefault()); foreach (var dset in Configuration.Dataset) { dset.Query.Clear(); } XmlHelper <CConfiguration> .Save(DefaultConfigFile, Configuration); _dataSetConsumers.ToList().ForEach(c => c.OnConnected(Configuration, Logger.Log)); }); var queryConfig = await LoadAndSaveQueries(ds, config.Dataset.FirstOrDefault().name); _schedulerProvider.MainThread.Schedule(() => { foreach (var dset in queryConfig.Dataset) { Configuration.Dataset.FirstOrDefault(d => d.name.Equals(dset.name)) .Query.AddRange(dset.Query); } }); } } } } catch (Exception e) { Logger.Log.Error(e, "Exception while loading and saving configuration for {0}", ds.ConnectionString.SecureString()); MessageQueue.Enqueue(e.Message); } finally { _schedulerProvider.MainThread.Schedule(() => IsBusy = false); } }); }