예제 #1
0
        /// <summary>
        /// Get all factors.
        /// </summary>
        /// <param name="context">Web service request context.</param>
        /// <returns>All factors.</returns>
        public static List <WebFactor> GetFactors(WebServiceContext context)
        {
            List <WebFactor> factors;
            WebFactor        factor;
            Boolean          getOnlyPublicFactors = !IsUserAuthorizedToReadNonPublicFactors(context);

            // Get cached information.
            factors = null;
            if (!context.IsInTransaction())
            {
                factors = GetFactorInformation(context, getOnlyPublicFactors).Factors;
            }

            if (factors.IsNull())
            {
                // Get information from database.
                factors = new List <WebFactor>();
                using (DataReader dataReader = context.GetTaxonAttributeDatabase().GetFactors(getOnlyPublicFactors))
                {
                    while (dataReader.Read())
                    {
                        factor = new WebFactor();
                        factor.LoadData(dataReader);
                        factors.Add(factor);
                    }
                }
            }

            return(factors);
        }
예제 #2
0
        /// <summary>
        /// Get information about factors that matches the search criteria.
        /// </summary>
        /// <param name="context">Web service request context.</param>
        /// <param name="searchCriteria">The factor search criteria.</param>
        /// <returns>Factors that matches the search criteria.</returns>
        public static List <WebFactor> GetFactorsBySearchCriteria(WebServiceContext context,
                                                                  WebFactorSearchCriteria searchCriteria)
        {
            List <WebFactor> factors;
            Int32            factorId;
            String           nameSearchMethodString, nameSearchString;
            WebFactor        factor;

            // Check arguments.
            searchCriteria.CheckNotNull("searchCriteria");
            searchCriteria.CheckData();

            // Test if name search string is a factor id.
            if (searchCriteria.NameSearchString.IsNotNull() &&
                searchCriteria.NameSearchString.SearchString.IsNotEmpty() &&
                searchCriteria.IsIdInNameSearchString &&
                Int32.TryParse(searchCriteria.NameSearchString.SearchString, out factorId))
            {
                if (searchCriteria.RestrictSearchToFactorIds.IsNull())
                {
                    searchCriteria.RestrictSearchToFactorIds = new List <Int32>();
                }

                searchCriteria.RestrictSearchToFactorIds.Add(factorId);
                searchCriteria.NameSearchString = null;
            }

            // Get information about factors from database.
            factors = new List <WebFactor>();
            if (searchCriteria.NameSearchString.IsNotNull())
            {
                // ReSharper disable once PossibleNullReferenceException
                foreach (StringCompareOperator compareOperator in searchCriteria.NameSearchString.CompareOperators)
                {
                    switch (compareOperator)
                    {
                    case StringCompareOperator.BeginsWith:
                        nameSearchMethodString = "Like";
                        nameSearchString       = searchCriteria.NameSearchString.SearchString + "%";
                        break;

                    case StringCompareOperator.Contains:
                        nameSearchMethodString = "Like";
                        nameSearchString       = "%" + searchCriteria.NameSearchString.SearchString + "%";
                        break;

                    case StringCompareOperator.EndsWith:
                        nameSearchMethodString = "Like";
                        nameSearchString       = "%" + searchCriteria.NameSearchString.SearchString;
                        break;

                    case StringCompareOperator.Equal:
                        nameSearchMethodString = "Exact";
                        nameSearchString       = searchCriteria.NameSearchString.SearchString;
                        break;

                    case StringCompareOperator.Like:
                        nameSearchMethodString = "Like";
                        nameSearchString       = searchCriteria.NameSearchString.SearchString;
                        break;

                    default:
                        throw new ArgumentException("GetFactorsBySearchCriteria Not supported string compare operator = " + compareOperator);
                    }

                    using (DataReader dataReader = context.GetTaxonAttributeDatabase().GetFactorsBySearchCriteria(searchCriteria.RestrictSearchToFactorIds,
                                                                                                                  nameSearchString,
                                                                                                                  nameSearchMethodString,
                                                                                                                  searchCriteria.RestrictSearchToScope.ToString(),
                                                                                                                  searchCriteria.RestrictReturnToScope.ToString()))
                    {
                        while (dataReader.Read())
                        {
                            factor = new WebFactor();
                            factor.LoadData(dataReader);
                            factors.Add(factor);
                        }
                    }

                    if (factors.IsNotEmpty())
                    {
                        break;
                    }
                }
            }
            else
            {
                using (DataReader dataReader = context.GetTaxonAttributeDatabase().GetFactorsBySearchCriteria(searchCriteria.RestrictSearchToFactorIds,
                                                                                                              null,
                                                                                                              "Exact",
                                                                                                              searchCriteria.RestrictSearchToScope.ToString(),
                                                                                                              searchCriteria.RestrictReturnToScope.ToString()))
                {
                    while (dataReader.Read())
                    {
                        factor = new WebFactor();
                        factor.LoadData(dataReader);
                        factors.Add(factor);
                    }
                }
            }

            return(factors);
        }