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();