Ejemplo n.º 1
0
 private static Expression <Func <ITaxonNamePart, bool> > MatchResolved(SpeciesPartType rank) => p => (p.Rank == rank) && (p.IsResolved || !p.IsAbbreviated);
        public void TaxonNamePart_WithValidNodeParameterInConstructor_ShouldReturnValidObject(string nodeString, SpeciesPartType taxonRank, string fullName, string taxonName, string id, bool abbreviated)
        {
            // Arrange
            var document = new XmlDocument();

            document.LoadXml(nodeString);

            // Act
            var taxonNamePart = new TaxonNamePart(document.DocumentElement);

            // Assert
            Assert.IsNotNull(taxonNamePart, "Object should not be null.");

            Assert.AreEqual(abbreviated, taxonNamePart.IsAbbreviated, "Taxon name part should " + (abbreviated ? "not " : string.Empty) + "be abbreviated.");
            Assert.AreEqual(taxonRank, taxonNamePart.Rank, $"Rank should be '{taxonRank}'.");
            Assert.AreEqual(taxonName, taxonNamePart.Name, $"Name should be '{taxonName}'.");
            Assert.AreEqual(fullName, taxonNamePart.FullName, $"Full Name should be '{fullName}'.");
            Assert.AreEqual(id, taxonNamePart.Id, $"Id should be '{id}'.");
        }
Ejemplo n.º 3
0
        private void ResolveSubgenericByGenusAndLowerMatches(IQueryable <ITaxonName> taxonNames, SpeciesPartType rank)
        {
            if (rank <= SpeciesPartType.Genus)
            {
                return;
            }

            var matchResolved    = MatchResolved(rank);
            var matchNotResolved = MatchNotResolved(rank);

            var taxaWithResolvedPart = taxonNames.Where(t => t.Parts.Any(this.matchResolvedGenera) && t.Parts.Any(matchResolved))
                                       .ToList();

            var taxaWithNotResolvedPart = taxonNames.Where(t => t.Parts.Any(this.matchResolvedGenera) && t.Parts.Any(matchNotResolved) && t.Parts.Any(p => p.Rank > rank));

            var messageBag = new StringBuilder();

            foreach (var taxon in taxaWithNotResolvedPart)
            {
                messageBag.Append(taxon);
                messageBag.AppendLine();

                try
                {
                    string genus = taxon.Parts.First(p => p.Rank == SpeciesPartType.Genus).FullName;

                    var query = taxaWithResolvedPart.Where(t => t.Parts.Single(p => p.Rank == SpeciesPartType.Genus).FullName == genus);
                    foreach (var part in taxon.Parts.Where(p => p.Rank > rank))
                    {
                        if (!part.IsAbbreviated || part.IsResolved)
                        {
                            query = query.Where(t => t.Parts.FirstOrDefault(p => p.Rank == part.Rank)?.FullName == part.FullName);
                        }
                    }

                    var matches = query.Distinct(new TaxonNameContentEqualityComparer()).ToArray();

                    if (matches.Length == 1)
                    {
                        var match = matches[0];

                        var taxonNamePartValue = match.Parts.First(p => p.Rank == rank).FullName;
                        foreach (var taxonNamePart in taxon.Parts)
                        {
                            if (taxonNamePart.Rank == rank)
                            {
                                taxonNamePart.FullName   = taxonNamePartValue;
                                taxonNamePart.IsModified = true;

                                messageBag.AppendFormat("\tSubstitution ({0}):", taxonNamePart.Rank);
                                messageBag.AppendFormat("\t\t{0}", taxonNamePartValue);
                                messageBag.AppendLine();
                                break;
                            }
                        }
                    }
                }
                catch
                {
                }

                messageBag.AppendLine();
            }

            this.logger?.Log(messageBag?.ToString());
        }
Ejemplo n.º 4
0
 public static string ToRankString(this SpeciesPartType type)
 {
     return(type.ToString().ToLower());
 }