public void GetTaxaByQuery()
        {
            Int32                   factorIndex;
            List <WebFactor>        factors;
            List <WebTaxon>         taxa;
            WebDataLogicCondition   dataLogicCondition;
            WebSpeciesFactCondition speciesFactCondition;

            // Test one condition and one factor.
            speciesFactCondition            = new WebSpeciesFactCondition();
            speciesFactCondition.Factors    = new WebFactor[1];
            speciesFactCondition.Factors[0] = FactorManagerTest.GetOneFactor(GetContext());
            taxa = TaxonManager.GetTaxaByQuery(GetContext(), GetDataQuery(speciesFactCondition), TaxonInformationType.Basic);
            Assert.IsTrue(taxa.IsNotEmpty());

            // Test one condition and several factors.
            speciesFactCondition = new WebSpeciesFactCondition();
            factors = FactorManagerTest.GetSomeFactors(GetContext());
            speciesFactCondition.Factors = new WebFactor[factors.Count];
            for (factorIndex = 0; factorIndex < speciesFactCondition.Factors.Length; factorIndex++)
            {
                speciesFactCondition.Factors[factorIndex] = factors[factorIndex];
            }
            taxa = TaxonManager.GetTaxaByQuery(GetContext(), GetDataQuery(speciesFactCondition), TaxonInformationType.Basic);
            Assert.IsTrue(taxa.IsNotEmpty());

            // Test several conditions and one factor.
            dataLogicCondition             = new WebDataLogicCondition();
            dataLogicCondition.DataQueries = new List <WebDataQuery>();
            dataLogicCondition.Operator    = DataLogicConditionOperatorId.And;
            factors = FactorManagerTest.GetSomeFactors(GetContext());
            for (factorIndex = 0; factorIndex < factors.Count; factorIndex++)
            {
                speciesFactCondition            = new WebSpeciesFactCondition();
                speciesFactCondition.Factors    = new WebFactor[1];
                speciesFactCondition.Factors[0] = factors[factorIndex];
                dataLogicCondition.DataQueries.Add(GetDataQuery(speciesFactCondition));
            }
            taxa = TaxonManager.GetTaxaByQuery(GetContext(), GetDataQuery(dataLogicCondition), TaxonInformationType.Basic);
            Assert.IsTrue(taxa.IsNotEmpty());

            // Test several conditions and several factors.
            dataLogicCondition             = new WebDataLogicCondition();
            dataLogicCondition.DataQueries = new List <WebDataQuery>();
            dataLogicCondition.Operator    = DataLogicConditionOperatorId.And;
            factors = FactorManagerTest.GetSomeFactors(GetContext());
            for (factorIndex = 0; factorIndex < factors.Count; factorIndex++)
            {
                speciesFactCondition            = new WebSpeciesFactCondition();
                speciesFactCondition.Factors    = new WebFactor[2];
                speciesFactCondition.Factors[0] = factors[factorIndex++];
                speciesFactCondition.Factors[1] = factors[factorIndex];
                dataLogicCondition.DataQueries.Add(GetDataQuery(speciesFactCondition));
            }
            taxa = TaxonManager.GetTaxaByQuery(GetContext(), GetDataQuery(dataLogicCondition), TaxonInformationType.Basic);
            Assert.IsTrue(taxa.IsNotEmpty());
        }
        private WebDataQuery GetDataQuery(WebSpeciesFactCondition speciesFactCondition)
        {
            WebDataCondition dataCondition;
            WebDataQuery     dataQuery;

            dataCondition = new WebDataCondition();
            dataCondition.SpeciesFactCondition = speciesFactCondition;
            dataQuery = new WebDataQuery();
            dataQuery.DataCondition = dataCondition;
            return(dataQuery);
        }
        /// <summary>
        /// Convert an SpeciesFactCondition to a WebSpeciesFactCondition.
        /// </summary>
        /// <param name="speciesFactCondition">The species fact condition.</param>
        /// <returns>A WebSpeciesFactCondition.</returns>
        private static WebSpeciesFactCondition GetSpeciesFactCondition(SpeciesFactCondition speciesFactCondition)
        {
            WebSpeciesFactCondition webSpeciesFactCondition;

            webSpeciesFactCondition = new WebSpeciesFactCondition();

            // Add all factors.
            if (speciesFactCondition.Factors.IsNotEmpty())
            {
                webSpeciesFactCondition.Factors = new List <WebFactor>();
                foreach (Factor factor in speciesFactCondition.Factors)
                {
                    webSpeciesFactCondition.Factors.Add(FactorManager.GetFactor(factor));
                }
            }

            // Add all periods.
            if (speciesFactCondition.Periods.IsNotEmpty())
            {
                webSpeciesFactCondition.Periods = new List <WebPeriod>();
                foreach (Period period in speciesFactCondition.Periods)
                {
                    webSpeciesFactCondition.Periods.Add(PeriodManager.GetPeriod(period));
                }
            }

            // Add all individual categories.
            if (speciesFactCondition.IndividualCategories.IsNotEmpty())
            {
                webSpeciesFactCondition.IndividualCategories = new List <WebIndividualCategory>();
                foreach (IndividualCategory individualCategory in speciesFactCondition.IndividualCategories)
                {
                    webSpeciesFactCondition.IndividualCategories.Add(IndividualCategoryManager.GetIndividualCategory(individualCategory));
                }
            }

            // Add all species fact field conditions.
            if (speciesFactCondition.SpeciesFactFieldConditions.IsNotEmpty())
            {
                webSpeciesFactCondition.SpeciesFactFieldConditions = new List <WebSpeciesFactFieldCondition>();
                foreach (SpeciesFactFieldCondition speciesFactFieldCondition in speciesFactCondition.SpeciesFactFieldConditions)
                {
                    webSpeciesFactCondition.SpeciesFactFieldConditions.Add(GetSpeciesFactFieldCondition(speciesFactFieldCondition));
                }
            }

            return(webSpeciesFactCondition);
        }