Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        public Oplossing Solve()
        {
            Oplossing start = new Oplossing();

            return(null);
        }