// namespace HaDocument.Models; // using System; // using HaDocument.Interfaces; // using System.Collections.Immutable; // using System.Collections.Generic; // using HaDocument.Models; // using HaDocument.Comparers; // using System.Linq; // public class Library : ILibrary { // public IHaDocumentOptions Options { get; } // public ImmutableDictionary Traditions { get; } // public ImmutableDictionary Persons { get; } // public ImmutableDictionary Metas { get; } // public ImmutableDictionary Marginals { get; } // public ImmutableDictionary Locations { get; } // public ImmutableDictionary Letters { get; } // public ImmutableDictionary HandPersons { get; } // public ImmutableDictionary Editreasons { get; } // public ImmutableDictionary Comments { get; } // public ImmutableDictionary> Backlinks { get; } // public ImmutableDictionary> Hands { get; } // // Structure for lookups from ZH: // public ImmutableDictionary>> Structure { get; } // // Lookups: // // Auswählen von Kommentaren nach (1) Kategorie, (2) Anfangsbuchstaben vom Lemma. // // So: _ = CommentsByCategoryLetter['neuzeit']['A'] // public ImmutableDictionary> CommentsByCategoryLetter { get; } // public Lookup CommentsByCategory { get; } // // Auswählen von Subkommentaren nach ID // public ImmutableDictionary SubCommentsByID { get; } // // Auswählen von Marginalien nach Briefen // public Lookup MarginalsByLetter { get; } // // Ausw?hlen von Edits nach Briefen // public Lookup EditreasonsByLetter { get; } // // Auswählen von Briefen nach autoptischer Numemr und in zeitlich sortierter Reihenfolge. // public ImmutableSortedSet MetasByDate { get; } // // Auswählen von Briefen nach dem Jahr, sortiert nach Datum // public ILookup MetasByYear { get; } // public Library( // Dictionary traditions, // Dictionary persons, // Dictionary meta, // Dictionary marginals, // Dictionary locations, // Dictionary letters, // Dictionary handPersons, // Dictionary editReasons, // Dictionary comments, // Dictionary> backlinks, // Dictionary> hands, // Dictionary>> Structure, // IHaDocumentOptions options // ) { // // Dictionaries // Traditions = ImmutableDictionary.ToImmutableDictionary(traditions); // Persons = ImmutableDictionary.ToImmutableDictionary(persons); // Metas = ImmutableDictionary.ToImmutableDictionary(meta); // Marginals = ImmutableDictionary.ToImmutableDictionary(marginals); // Locations = ImmutableDictionary.ToImmutableDictionary(locations); // Letters = ImmutableDictionary.ToImmutableDictionary(letters); // HandPersons = ImmutableDictionary.ToImmutableDictionary(handPersons); // Editreasons = ImmutableDictionary.ToImmutableDictionary(editReasons); // Comments = ImmutableDictionary.ToImmutableDictionary(comments); // var backbuilder = ImmutableDictionary.CreateBuilder>(); // foreach (var entry in backlinks) // backbuilder.Add(entry.Key, ImmutableList.ToImmutableList(entry.Value)); // Backlinks = backbuilder.ToImmutableDictionary(); // var handbuilder = ImmutableDictionary.CreateBuilder>(); // foreach (var entry in hands) // handbuilder.Add(entry.Key, ImmutableList.ToImmutableList(entry.Value)); // Hands = handbuilder.ToImmutableDictionary(); // // Lookups // CommentsByCategory = (Lookup)Comments.Values.ToLookup(x => x.Type); // var CommentsByLetter_builder = ImmutableDictionary.CreateBuilder>(); // foreach (var ts in CommentsByCategory) { // CommentsByLetter_builder.Add(ts.Key, (Lookup)ts.ToLookup(x => x.Index.Substring(0, 1).ToUpper())); // } // CommentsByCategoryLetter = CommentsByLetter_builder.ToImmutableDictionary(); // MarginalsByLetter = (Lookup)Marginals.Values.ToLookup(x => x.Letter); // EditreasonsByLetter = (Lookup)Editreasons.Values.ToLookup(x => x.Letter); // MetasByDate = Metas.Values.ToImmutableSortedSet(new DefaultComparer()); // MetasByYear = Metas.Values.ToLookup(x => x.Sort.Year.ToString()); // var tempbuilder = ImmutableDictionary.CreateBuilder(); // foreach (var comm in Comments) // if (comm.Value.SubComments != null) // foreach (var subcomm in comm.Value.SubComments) // if (!tempbuilder.ContainsKey(subcomm.Key)) // tempbuilder.Add(subcomm.Key, subcomm.Value); // SubCommentsByID = tempbuilder.ToImmutableDictionary(); // var tempstructurebuilder = ImmutableDictionary.CreateBuilder>>(); // foreach (var volume in Structure) { // if (volume.Value != null) { // var tempvolbuilder = ImmutableDictionary.CreateBuilder>(); // foreach (var page in volume.Value) { // if (page.Value != null) { // tempvolbuilder.Add(page.Key, page.Value.ToImmutableDictionary()); // } // } // if (tempvolbuilder.Any()) { // tempstructurebuilder.Add(volume.Key, tempvolbuilder.ToImmutableDictionary()); // } // } // } // this.Structure = tempstructurebuilder.ToImmutableDictionary(); // Options = options; // } // // public List MetasByDate() { // // var ret = Metas.OrderBy(x => x.Value, new DefaultComparer()).ToLookup(x => x.Value.Autopsic, x => x.Value); // // ret.Sort(new DefaultComparer()); // // return ret; // // } // public ImmutableList MetasByZH() { // return Metas.Values.ToImmutableList().Sort(new Comparers.ZHComparer()); // } // public List PersonByAlphabet() { // var ret = Persons.Values.ToList(); // ret.Sort(new Comparers.PersonComparer()); // return ret; // } // } // }