Добавление метода, который позволяет обрабатывать только определённые процессоры

This commit is contained in:
2025-05-07 14:18:24 +04:00
parent 7c2f2349c0
commit 3168c9c406
4 changed files with 45 additions and 7 deletions
+12 -6
View File
@@ -3,29 +3,35 @@
namespace Pf2eDataScrapper.Importers; namespace Pf2eDataScrapper.Importers;
/// <summary> /// <summary>
/// Абстрактный класс импортёра /// Абстрактный класс импортёра.
/// </summary> /// </summary>
internal abstract class AbstractImporter internal abstract class AbstractImporter
{ {
/// <summary> /// <summary>
/// Отображаемое имя импортёра /// Отображаемое имя импортёра.
/// </summary> /// </summary>
public abstract string Name { get; } public abstract string Name { get; }
/// <summary> /// <summary>
/// Короткое имя импортёра /// Короткое имя импортёра.
/// </summary> /// </summary>
public abstract string Slug { get; } public abstract string Slug { get; }
public abstract AbstractImporterRepository Repository { get; } public abstract AbstractImporterRepository Repository { get; }
/// <summary> /// <summary>
/// Путь к директории с данными для импортёра /// Путь к директории с данными для импортёра.
/// </summary> /// </summary>
public string Dir => Path.Combine(EnvSettings.DataDirPath, Slug); public string Dir => Path.Combine(EnvSettings.DataDirPath, Slug);
/// <summary> /// <summary>
/// Метод подготовки данных для импорта /// Перечисление процессоров, которые будут использоваться для обработки данных.
/// При пустом массиве будут обработаны все доступные процессоры.
/// </summary>
public string[] ProcessorNames { get; set; } = [];
/// <summary>
/// Метод подготовки данных для импорта.
/// </summary> /// </summary>
public abstract void Prepare(); public abstract void Prepare();
@@ -35,7 +41,7 @@ internal abstract class AbstractImporter
public abstract void Import(); public abstract void Import();
/// <summary> /// <summary>
/// Построение схем данных /// Построение схем данных.
/// </summary> /// </summary>
public abstract void BuildSchemas(); public abstract void BuildSchemas();
} }
@@ -37,6 +37,7 @@ internal class AonprdImporter : AbstractImporter
public override void Import() public override void Import()
{ {
AonprdDataBuilder builder = new(Loader); AonprdDataBuilder builder = new(Loader);
builder.Processors.UseOnlyNames(ProcessorNames);
builder.TruncateTables(); builder.TruncateTables();
builder.Build(); builder.Build();
@@ -14,7 +14,9 @@ internal class AonprdProcessorCollection
public int Priority = -1; public int Priority = -1;
} }
public readonly List<ProcessorItem> Items = []; private readonly List<ProcessorItem> _allItems;
public List<ProcessorItem> Items { get; private set; } = [];
public AonprdProcessorCollection() public AonprdProcessorCollection()
{ {
@@ -50,6 +52,8 @@ internal class AonprdProcessorCollection
Items.Add(new(attribute, constructor)); Items.Add(new(attribute, constructor));
} }
_allItems = Items.ToList();
} }
private void CheckDependencies() private void CheckDependencies()
@@ -109,4 +113,28 @@ internal class AonprdProcessorCollection
yield return item; yield return item;
} }
} }
public void UseOnlyNames(string[] processorNames)
{
Dictionary<string, bool> nameFlags = processorNames.ToDictionary(name => name, _ => false);
while (nameFlags.Values.Any(v => !v))
{
foreach (
KeyValuePair<string, bool> 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();
}
} }
+3
View File
@@ -10,6 +10,9 @@ Pf2EFoundryImporter importer = new();
*/ */
AonprdImporter importer = new(); AonprdImporter importer = new();
importer.ProcessorNames = ["rules"];
importer.Prepare(); importer.Prepare();
importer.Import(); importer.Import();
// importer.BuildSchemas(); // importer.BuildSchemas();