Exemplo n.º 1
0
        private void SetDetails(
            string comments,
            bool isCustomIdentification,
            string category,
            string kingdom,
            string phylum,
            string className,
            string order,
            string family,
            string genus,
            string species,
            string subspecies,
            IEnumerable <string> commonGroupNames,
            IEnumerable <string> commonNames,
            IEnumerable <string> synonyms)
        {
            Comments = comments;
            IsCustomIdentification = isCustomIdentification;
            Category = category;

            ((List <TaxonomicRank>)TaxonomicRanks).Clear();

            SetTaxonomicRank(kingdom, "kingdom");
            SetTaxonomicRank(phylum, "phylum");
            SetTaxonomicRank(className, "class");
            SetTaxonomicRank(order, "order");
            SetTaxonomicRank(family, "family");
            SetTaxonomicRank(genus, "genus");
            SetTaxonomicRank(species, "species");
            SetTaxonomicRank(subspecies, "subspecies");

            RankName = TaxonomicRanks.Last().Name;
            RankType = TaxonomicRanks.Last().Type;

            if (TaxonomicRanks.Last().Type == "species" || TaxonomicRanks.Last().Type == "subspecies")
            {
                Name = (TryGetRankName("genus") + " " + TryGetRankName("species")).Trim();
            }
            else
            {
                Name = TaxonomicRanks.Last().Name;
            }

            Taxonomy = string.Join(": ", TaxonomicRanks.Select(x => x.Name));

            CommonGroupNames = commonGroupNames;
            CommonNames      = commonNames;
            Synonyms         = synonyms;
        }
Exemplo n.º 2
0
        public string TryGetRankName(string rankType)
        {
            if (TaxonomicRanks.Any(x => x.Type == rankType))
            {
                return(TaxonomicRanks.Single(x => x.Type == rankType).Name);
            }

            // Special case for infra-rank subgenus. We store subgenus together with genus, so check for genus, then return the second part.
            if (rankType == "subgenus" && TaxonomicRanks.Any(x => x.Type == "genus"))
            {
                var genus     = TryGetRankName("genus");
                var genusBits = genus.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                if (genusBits.Count() > 1)
                {
                    return(genusBits[1]);
                }
            }

            return(string.Empty);
        }