public IOplossing KrijgItem(VerwerkingType alsType, string onderdeelNaam, string fragmentNaam, IEnumerable <string> fragmentDelen, LiturgieSettings settings) { var database = alsType == VerwerkingType.normaal ? _databases.GetDefault() : _databases.Extensions.FirstOrDefault(e => e.Name == LiturgieDatabaseSettings.DatabaseNameBijbeltekst); if (database == null) { return new Oplossing() { Status = DatabaseZoekStatus.DatabaseFout } } ; var set = database.Engine.Where(s => string.Equals(s.Name.SafeName, onderdeelNaam, StringComparison.CurrentCultureIgnoreCase) || (settings.GebruikDisplayNameVoorZoeken && string.Equals(s.Settings.DisplayName, onderdeelNaam, StringComparison.CurrentCultureIgnoreCase))).FirstOrDefault(); if (set == null) { return new Oplossing() { Status = DatabaseZoekStatus.SetFout } } ; // Kijk of we het specifieke item in de set kunnen vinden var subSet = set.Where(r => Compare(r.Name.SafeName, fragmentNaam, StringComparison.CurrentCultureIgnoreCase) == 0 || Compare(r.Name.Name, fragmentNaam, StringComparison.CurrentCultureIgnoreCase) == 0).FirstOrDefault(); if (subSet == null) { return new Oplossing() { Status = DatabaseZoekStatus.SubSetFout } } ; var returnValue = new Oplossing { Onderdeel = new OplossingOnderdeel { Naam = set.Name.Name, VeiligeNaam = set.Name.SafeName, AlternatieveNaam = set.Settings.DisplayName, }, Fragment = new OplossingOnderdeel { Naam = subSet.Name.Name, VeiligeNaam = subSet.Name.SafeName, }, ZonderContentSplitsing = !set.Settings.ItemsHaveSubContent, StandaardNietTonenInLiturgie = set.Settings.NotVisibleInIndex, }; // Je kunt geen verzen opgeven als we ze niet los hebben. // (Andere kant op kan wel: geen verzen opgeven terwijl ze er wel zijn (wat 'alle verzen' betekend)) if (fragmentDelen != null && fragmentDelen.Any() && !(set.Settings.ItemsHaveSubContent || set.Settings.ItemIsSubContent)) { return new Oplossing() { Status = DatabaseZoekStatus.VersOnderverdelingMismatch } } ; if (fragmentDelen == null || !fragmentDelen.Any()) { // We hebben geen versenlijst en de set instellingen zeggen zonder verzen te zijn dus hebben we n samengevoegd item if (!(set.Settings.ItemsHaveSubContent || set.Settings.ItemIsSubContent)) { var content = KrijgDirecteContent(subSet.Content, null); if (content == null) { return new Oplossing() { Status = DatabaseZoekStatus.VersOnleesbaar } } ; returnValue.Content = new List <ILiturgieContent> { content }; } // Een item met alle verzen else { returnValue.Content = KrijgContentDelayed(subSet, set.Settings) .Select(s => s.GetContent()) .Where(s => s != null) // omdat we alles ophalen kunnen hier dingen in zitten die niet kloppen .OrderBy(s => s.Nummer) // Op volgorde van nummer .ToList(); } } else { // Specifieke verzen var delayedContent = KrijgContentDelayed(subSet, set.Settings); var preSelect = InterpreteerNummers(fragmentDelen, delayedContent.Select(c => c.PossibleNummer)) // We houden de volgorde van het opgeven aan omdat die afwijkend kan zijn .Select(n => n.ToString()) .Select(n => new { Naam = n, SubSet = delayedContent.FirstOrDefault(c => c.PossibleNummer == n), }) .ToList(); // Specifieke verzen moeten allemaal gevonden kunnen worden if (preSelect.Any(c => c.SubSet == null)) { return new Oplossing() { Status = DatabaseZoekStatus.VersFout } } ; returnValue.Content = preSelect .Select(s => s.SubSet.GetContent()) .ToList(); // Specifieke verzen moeten allemaal interpreteerbaar zijn if (returnValue.Content.Any(c => c == null)) { return new Oplossing() { Status = DatabaseZoekStatus.VersOnleesbaar } } ; } returnValue.Status = DatabaseZoekStatus.Opgelost; return(returnValue); }
public Oplossing Solve() { Oplossing start = new Oplossing(); return(null); }