Example #1
0
        private async Task <CConfiguration> ReLoadAndSaveQueries(CDataset dataSet)
        {
            var ds = Configuration.Datasource.FirstOrDefault(dsrc => dsrc.name.Equals(dataSet.dataSourceName));

            var schema = await _dataSourceProvider.GetStoreProcsSchema(ds);

            if (!string.IsNullOrEmpty(schema))
            {
                var builder = XmlBuilder.BuildQueryElements(ds, schema);
                if (null != builder)
                {
                    var config = XmlHelper <CConfiguration> .LoadFromString(builder.ToString());

                    var currentConfig = XmlHelper <CConfiguration> .Load(DefaultStoreProcsConfigFile);

                    _schedulerProvider.MainThread.Schedule(() =>
                    {
                        var currentDataset = currentConfig.Dataset.FirstOrDefault(d => d.name.Equals(dataSet.name));
                        var scripts        = currentDataset.Query.Where(q => q.isScript).ToList();
                        currentDataset.Query.Clear();
                        currentDataset.Query.AddRange(config.Dataset.FirstOrDefault().Query);
                        currentDataset.Query.AddRange(scripts);

                        XmlHelper <CConfiguration> .Save(DefaultStoreProcsConfigFile, currentConfig);
                    });

                    return(currentConfig);
                }
            }

            return(new CConfiguration());
        }
Example #2
0
        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);
                }
            });
        }
Example #3
0
        private async Task <CConfiguration> LoadAndSaveQueries(CDatasource ds, string datasetName)
        {
            var schema = await _dataSourceProvider.GetStoreProcsSchema(ds);

            if (!string.IsNullOrEmpty(schema))
            {
                var builder = XmlBuilder.BuildQueryElements(ds, schema);
                if (null != builder)
                {
                    var config = XmlHelper <CConfiguration> .LoadFromString(builder.ToString());

                    if (!File.Exists(DefaultStoreProcsConfigFile))
                    {
                        XmlHelper <CConfiguration> .Save(DefaultStoreProcsConfigFile, config);
                    }
                    else
                    {
                        config.Dataset.FirstOrDefault().dataSourceName = datasetName;
                        config.Dataset.FirstOrDefault().name           = datasetName;
                        config.Datasource.FirstOrDefault().name        = datasetName;

                        var currentConfig = XmlHelper <CConfiguration> .Load(DefaultStoreProcsConfigFile);

                        currentConfig.Datasource.Add(config.Datasource.FirstOrDefault());
                        currentConfig.Dataset.Add(config.Dataset.FirstOrDefault());

                        XmlHelper <CConfiguration> .Save(DefaultStoreProcsConfigFile, currentConfig);

                        return(currentConfig);
                    }

                    return(config);
                }
            }

            return(new CConfiguration());
        }
Example #4
0
        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);
                }
            });
        }
Example #5
0
        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);
                }
            });
        }