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; }
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); }