namespace Thor.Shared.Model; public class TemplateRegister : RegisterBase { public List Forge() { Dictionary> entriesByTarget = []; foreach (var i in GetEntriesOrdered()) { var target = i.Target; if (entriesByTarget.TryGetValue(target, out var list)) list.Add(i); else entriesByTarget.Add(target, [i]); } List items = []; foreach(var kv in entriesByTarget) { var item = Forge(kv.Key, kv.Value); if(item is not null) items.Add(item); } return items.OrderBy(x => x.OrderId).ToList(); } private Item? Forge(string id, IEnumerable entries) { bool? IsTitle = null; string Identifier = id; string? ParentId = null; string? OrderId = null; string? Label = null; string? Description = null; string? References = null; int restauration = 1; foreach(var entry in entries) { if(entry.Type == TemplateEntry.EntryType.Delete) { restauration--; continue; } if (entry.Type == TemplateEntry.EntryType.Restore) { restauration++; continue; } //ignore comments if (entry.Type != TemplateEntry.EntryType.Set) continue; if (entry.Field == TemplateEntry.FieldType.Type && IsTitle is null) IsTitle = entry.Content == TemplateEntry.TYPE_TITLE; else if(entry.Field == TemplateEntry.FieldType.Reference && References is null) References = entry.Content; else if(entry.Field == TemplateEntry.FieldType.Label && Label is null) Label = entry.Content; else if(entry.Field == TemplateEntry.FieldType.Parent && ParentId is null) ParentId = entry.Content; else if(entry.Field == TemplateEntry.FieldType.Description && Description is null) Description = entry.Content; else if(entry.Field == TemplateEntry.FieldType.Order && OrderId is null) OrderId = entry.Content; } if (IsTitle is null) return null; Item ret = IsTitle == true ? new ItemTitle() : new ItemVerification(); ret.Identifier = Identifier; ret.ParentId = ParentId ?? String.Empty; ret.OrderId = OrderId ?? String.Empty; ret.Label = Label ?? String.Empty; ret.Description = Description ?? String.Empty; ret.References = References ?? String.Empty; return ret; } }