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); }
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); } } }
public abstract void Build(ICsvReader reader, IDataTableContainer container);
protected abstract void BuildIndex(IReadOnlyList <T> elements, IDataTableContainer tableContainer);
protected abstract T ConstructElement(ICsvReader reader, IDataTableContainer tableContainer);