public void GetTaxonTrees_BreadthFirstAndDepthFirstIterationTest()
        {
            using (ShimsContext.Create())
            {
                //Arrange
                const int CanidaeTaxonId = 2002154;

                /* Hierarchical structure for Canidae. 2016-05-12.
                 * Canidae (2002154)
                 * Canis
                 *  Canis Lupus
                 *   Canis lupus lupus
                 *   Canis lupus familiaris
                 * Vulpes
                 *  Vulpes vulpes
                 *  Vulpes lagopus
                 * Nycterutes
                 *  Nyctereutes procyonides
                 */
                LoginApplicationUserAndSetSessionVariables();
                SetSwedishLanguage();
                IUserContext            userContext             = ApplicationUserContextSV;
                TaxonTreeSearchCriteria taxonTreeSearchCriteria = new TaxonTreeSearchCriteria();
                taxonTreeSearchCriteria.TaxonIds = new List <int>();
                taxonTreeSearchCriteria.TaxonIds.Add(CanidaeTaxonId);
                taxonTreeSearchCriteria.IsValidRequired = true;
                taxonTreeSearchCriteria.Scope           = TaxonTreeSearchScope.AllChildTaxa;

                //Act
                var taxonTreeNodeList = CoreData.TaxonManager.GetTaxonTrees(userContext, taxonTreeSearchCriteria);
                List <ITaxonTreeNode> breadthFirstList = new List <ITaxonTreeNode>();
                Debug.WriteLine("Breadth first");
                Debug.WriteLine("==============");
                foreach (ITaxonTreeNode taxonTreeNode in taxonTreeNodeList.AsBreadthFirstIterator())
                {
                    breadthFirstList.Add(taxonTreeNode);
                    Debug.WriteLine(taxonTreeNode.Taxon.ScientificName);
                }
                Debug.WriteLine("");
                Debug.WriteLine("Depth first");
                Debug.WriteLine("==============");
                List <ITaxonTreeNode> depthFirstList = new List <ITaxonTreeNode>();
                foreach (ITaxonTreeNode taxonTreeNode in taxonTreeNodeList.AsDepthFirstIterator())
                {
                    depthFirstList.Add(taxonTreeNode);
                    Debug.WriteLine(taxonTreeNode.Taxon.ScientificName);
                }

                //Assert
                // Check contains same elements.
                CollectionAssert.AreEquivalent(breadthFirstList, depthFirstList);

                // Check the order of the elements are not equal.
                CollectionAssert.AreNotEqual(breadthFirstList, depthFirstList);
            }
        }
        public void GetTaxonNamesByTaxonIds()
        {
            Int32 index;
            List <TaxonNameList>     allTaxonNames;
            TaxonList                taxa;
            TaxonTreeNodeList        taxonTrees;
            ITaxonTreeSearchCriteria searchCriteria;

            // Test with a few taxa.
            taxa = new TaxonList();
            taxa.Add(GetTaxonDataSource(true).GetTaxon(GetUserContext(), (Int32)(TaxonId.Bear)));
            taxa.Add(GetTaxonDataSource().GetTaxon(GetUserContext(), (Int32)(TaxonId.Mammals)));
            allTaxonNames = GetTaxonDataSource().GetTaxonNames(GetUserContext(), taxa);
            Assert.IsTrue(allTaxonNames.IsNotEmpty());
            Assert.AreEqual(taxa.Count, allTaxonNames.Count);
            for (index = 0; index < taxa.Count; index++)
            {
                Assert.IsTrue(allTaxonNames[index].IsNotEmpty());
                foreach (ITaxonName taxonName in allTaxonNames[index])
                {
                    Assert.AreEqual(taxa[index].Id, taxonName.Taxon.Id);
                }
            }

            // Test with lots of taxa.
            if (Configuration.IsAllTestsRun)
            {
                taxa           = new TaxonList(true);
                searchCriteria = new TaxonTreeSearchCriteria();
                searchCriteria.IsValidRequired = true;
                taxonTrees = CoreData.TaxonManager.GetTaxonTrees(GetUserContext(), searchCriteria);
                foreach (ITaxonTreeNode taxonTree in taxonTrees)
                {
                    taxa.Merge(taxonTree.GetTaxa());
                }
                allTaxonNames = GetTaxonDataSource().GetTaxonNames(GetUserContext(), taxa);
                Assert.IsTrue(allTaxonNames.IsNotEmpty());
                Assert.AreEqual(taxa.Count, allTaxonNames.Count);
                for (index = 0; index < taxa.Count; index++)
                {
                    Assert.IsTrue(allTaxonNames[index].IsNotEmpty());
                    foreach (ITaxonName taxonName in allTaxonNames[index])
                    {
                        Assert.AreEqual(taxa[index].Id, taxonName.Taxon.Id);
                    }
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Get all protected taxa
        /// </summary>
        /// <returns>A list of all protected taxa</returns>
        private TaxonList GetProtectedTaxa()
        {
            ISpeciesFactSearchCriteria searchCriteria = new SpeciesFactSearchCriteria();

            searchCriteria.Factors = new FactorList();
            searchCriteria.IndividualCategories = new IndividualCategoryList
            {
                CoreData.FactorManager.GetDefaultIndividualCategory(mContext)
            };
            searchCriteria.Factors.Add(CoreData.FactorManager.GetFactor(mContext, FactorId.ProtectionLevel));

            var speciesFactList = CoreData.SpeciesFactManager.GetSpeciesFacts(mContext, searchCriteria);

            var taxonList = new TaxonList(true);

            foreach (var speciesFact in speciesFactList)
            {
                if (speciesFact.MainField != null && speciesFact.MainField.HasValue &&
                    speciesFact.MainField.EnumValue != null && speciesFact.MainField.EnumValue.Enum != null)
                {
                    const int RedListProtectionLevel = 1;
                    if (speciesFact.MainField.EnumValue.KeyInt > RedListProtectionLevel)
                    {
                        taxonList.Add(speciesFact.Taxon);
                    }
                }
            }

            ITaxonTreeSearchCriteria taxonTreeSearchCriteria = new TaxonTreeSearchCriteria();

            taxonTreeSearchCriteria.TaxonIds        = taxonList.GetIds();
            taxonTreeSearchCriteria.Scope           = TaxonTreeSearchScope.AllChildTaxa;
            taxonTreeSearchCriteria.IsValidRequired = true;
            TaxonTreeNodeList taxonTreeNodeList = CoreData.TaxonManager.GetTaxonTrees(mContext, taxonTreeSearchCriteria);

            foreach (var taxonTreeNode in taxonTreeNodeList)
            {
                taxonList.Merge(taxonTreeNode.GetChildTaxa());
            }

            return(taxonList);
        }
        public void GetTaxonTreesBySearchCriteria()
        {
            TaxonTreeNodeList        taxonTrees;
            ITaxonTreeSearchCriteria searchCriteria;

            // Get a part of the taxon tree.
            GetTaxonDataSource(true);
            foreach (TaxonTreeSearchScope scope in Enum.GetValues(typeof(TaxonTreeSearchScope)))
            {
                searchCriteria = new TaxonTreeSearchCriteria();
                searchCriteria.IsValidRequired = true;
                searchCriteria.Scope           = scope;
                searchCriteria.TaxonIds        = new List <Int32>();
                searchCriteria.TaxonIds.Add((Int32)(TaxonId.Mammals));
                taxonTrees = GetTaxonDataSource().GetTaxonTrees(GetUserContext(), searchCriteria);
                Assert.IsTrue(taxonTrees.IsNotEmpty());
                if ((searchCriteria.Scope == TaxonTreeSearchScope.AllChildTaxa) ||
                    (searchCriteria.Scope == TaxonTreeSearchScope.NearestChildTaxa))
                {
                    Assert.AreEqual(1, taxonTrees.Count);
                    Assert.AreEqual((Int32)(TaxonId.Mammals), taxonTrees[0].Taxon.Id);
                }
            }

            // Get the entire taxon tree (valid taxa and relations).
            searchCriteria = new TaxonTreeSearchCriteria();
            searchCriteria.IsValidRequired = true;
            taxonTrees = GetTaxonDataSource().GetTaxonTrees(GetUserContext(), searchCriteria);
            Assert.IsTrue(taxonTrees.IsNotEmpty());

            // Get the entire taxon tree (include not valid taxa and relations).
            searchCriteria = new TaxonTreeSearchCriteria();
            searchCriteria.IsValidRequired = false;
            taxonTrees = GetTaxonDataSource().GetTaxonTrees(GetUserContext(), searchCriteria);
            Assert.IsTrue(taxonTrees.IsNotEmpty());
        }