diff --git a/Pf2eDataScrapper/Importers/AbstractImporter.cs b/Pf2eDataScrapper/Importers/AbstractImporter.cs index f1f93ac..e80020e 100644 --- a/Pf2eDataScrapper/Importers/AbstractImporter.cs +++ b/Pf2eDataScrapper/Importers/AbstractImporter.cs @@ -3,29 +3,35 @@ namespace Pf2eDataScrapper.Importers; /// -/// Абстрактный класс импортёра +/// Абстрактный класс импортёра. /// internal abstract class AbstractImporter { /// - /// Отображаемое имя импортёра + /// Отображаемое имя импортёра. /// public abstract string Name { get; } /// - /// Короткое имя импортёра + /// Короткое имя импортёра. /// public abstract string Slug { get; } public abstract AbstractImporterRepository Repository { get; } /// - /// Путь к директории с данными для импортёра + /// Путь к директории с данными для импортёра. /// public string Dir => Path.Combine(EnvSettings.DataDirPath, Slug); /// - /// Метод подготовки данных для импорта + /// Перечисление процессоров, которые будут использоваться для обработки данных. + /// При пустом массиве будут обработаны все доступные процессоры. + /// + public string[] ProcessorNames { get; set; } = []; + + /// + /// Метод подготовки данных для импорта. /// public abstract void Prepare(); @@ -35,7 +41,7 @@ internal abstract class AbstractImporter public abstract void Import(); /// - /// Построение схем данных + /// Построение схем данных. /// public abstract void BuildSchemas(); } diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/AonprdImporter.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/AonprdImporter.cs index 03e744b..7559823 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/AonprdImporter.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/AonprdImporter.cs @@ -37,6 +37,7 @@ internal class AonprdImporter : AbstractImporter public override void Import() { AonprdDataBuilder builder = new(Loader); + builder.Processors.UseOnlyNames(ProcessorNames); builder.TruncateTables(); builder.Build(); diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/DataBuilder/AonprdProcessorCollection.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/DataBuilder/AonprdProcessorCollection.cs index 5cd4052..b1104a1 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/DataBuilder/AonprdProcessorCollection.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/DataBuilder/AonprdProcessorCollection.cs @@ -14,7 +14,9 @@ internal class AonprdProcessorCollection public int Priority = -1; } - public readonly List Items = []; + private readonly List _allItems; + + public List Items { get; private set; } = []; public AonprdProcessorCollection() { @@ -50,6 +52,8 @@ internal class AonprdProcessorCollection Items.Add(new(attribute, constructor)); } + + _allItems = Items.ToList(); } private void CheckDependencies() @@ -109,4 +113,28 @@ internal class AonprdProcessorCollection yield return item; } } + + public void UseOnlyNames(string[] processorNames) + { + Dictionary nameFlags = processorNames.ToDictionary(name => name, _ => false); + + while (nameFlags.Values.Any(v => !v)) + { + foreach ( + KeyValuePair pair in nameFlags.Where(pair => !pair.Value).ToList() + ) + { + ProcessorItem item = _allItems.First(item => item.Attribute.Name == pair.Key); + + foreach (string dependency in item.Attribute.Dependencies) + { + nameFlags.TryAdd(dependency, false); + } + + nameFlags[pair.Key] = true; + } + } + + Items = _allItems.Where(item => nameFlags.ContainsKey(item.Attribute.Name)).ToList(); + } } diff --git a/Pf2eDataScrapper/Program.cs b/Pf2eDataScrapper/Program.cs index dac032a..cfdf326 100644 --- a/Pf2eDataScrapper/Program.cs +++ b/Pf2eDataScrapper/Program.cs @@ -10,6 +10,9 @@ Pf2EFoundryImporter importer = new(); */ AonprdImporter importer = new(); + +importer.ProcessorNames = ["rules"]; + importer.Prepare(); importer.Import(); // importer.BuildSchemas();