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(WebDataLogicCondition dataLogicCondition)
        {
            WebDataCondition dataCondition;
            WebDataQuery     dataQuery;


            dataCondition = new WebDataCondition();
            dataCondition.DataLogicCondition = dataLogicCondition;
            dataQuery = new WebDataQuery();
            dataQuery.DataCondition = dataCondition;
            return(dataQuery);
        }
        /// <summary>
        /// Convert an DataOrCondition to a WebDataLogicCondition.
        /// </summary>
        /// <param name="dataOrCondition">The data or condition.</param>
        /// <returns>A WebDataLogicCondition.</returns>
        private static WebDataLogicCondition GetDataOrCondition(DataOrCondition dataOrCondition)
        {
            WebDataLogicCondition webDataLogicCondition;

            webDataLogicCondition          = new WebDataLogicCondition();
            webDataLogicCondition.Operator = DataLogicConditionOperatorId.Or;
#if DATA_SPECIFIED_EXISTS
            webDataLogicCondition.OperatorSpecified = true;
#endif
            webDataLogicCondition.DataQueries = new List <WebDataQuery>();
            foreach (IDataQuery dataQuery in dataOrCondition.DataQueries)
            {
                webDataLogicCondition.DataQueries.Add(GetDataQuery(dataQuery));
            }

            return(webDataLogicCondition);
        }