Exemplo n.º 1
0
        public sealed override void Build(ICsvReader reader, IDataTableContainer container)
        {
            var elements = new List <T>();

            while (reader.Read())
            {
                elements.Add(this.ConstructElement(reader, container));
            }

            this.BuildIndex(elements, container);
        }
Exemplo n.º 2
0
        public void Build(IEnumerable <IDataTable> tablesToBuild, IDataTableContainer containerToLoad)
        {
            var csvConfiguration = new CsvConfiguration()
            {
                CultureInfo     = CultureInfo.InvariantCulture,
                HasHeaderRecord = true,
            };

            var tablesByName = tablesToBuild.ToDictionary(table => table.TableName, table => table);

            // Organize by dependencies
            var dependencies = tablesByName.Values.ToDictionary(metadata => metadata.TableName, metadata => metadata.Dependencies);

            foreach (var tableName in this.GetTableNamesByDependencies(dependencies))
            {
                var table = tablesByName[tableName];
                {
                    this.DataTableLoadingStarted?.Invoke(this, new DataTableLoadingStartedEventArgs(table.TableName));
                }

                try
                {
                    if (!(table is CsvDataTable csvTable))
                    {
                        throw new Exception("Invalid table type.");
                    }

                    var filePath = this.FindDataTableFile(table.TableName);
                    using (var csv = new CsvReader(File.OpenText(filePath), csvConfiguration))
                    {
                        csvTable.Build(csv, containerToLoad);
                    }

                    containerToLoad.Add(table.TableType, table);
                    {
                        this.DataTableLoaded?.Invoke(this, new DataTableLoadedEventArgs(table.TableName, filePath));
                    }
                }
                catch (Exception exception)
                {
                    throw new Exception($"Can not load data table \"{table.TableName}\".", exception);
                }
            }
        }
Exemplo n.º 3
0
 public abstract void Build(ICsvReader reader, IDataTableContainer container);
Exemplo n.º 4
0
 protected abstract void BuildIndex(IReadOnlyList <T> elements, IDataTableContainer tableContainer);
Exemplo n.º 5
0
 protected abstract T ConstructElement(ICsvReader reader, IDataTableContainer tableContainer);