Beispiel #1
0
        /// <summary>
        /// Method that sets a property value into model object
        /// </summary>
        /// <param name="propertyName">Property name</param>
        /// <param name="propertyValue">Property value</param>
        internal void SetPropertyValue(
            string propertyName,
            object propertyValue
            )
        {
            var property = Model.GetType().GetProperties().SingleOrDefault(p => p.Name.ToLower().Equals(propertyName.ToLower()));

            if (property != null)
            {
                Type propertyType = property.PropertyType;
                if (Nullable.GetUnderlyingType(propertyType) != null)
                {
                    propertyType = Nullable.GetUnderlyingType(propertyType);
                }

                SetConfigProperty(Constants.CONST_SUPPLIED, property.Name);
                if (propertyValue is JToken)
                {
                    var newPropertyValue = JsonConvert.DeserializeObject(propertyValue.ToString(), property.PropertyType);
                    property.SetValue(this.Model, newPropertyValue);
                }
                else if (propertyValue != null)
                {
                    bool changed          = false;
                    var  newPropertyValue = TypesHelper.TryChangeType(propertyValue.ToString(), property.PropertyType, out changed);
                    if (changed)
                    {
                        property.SetValue(this.Model, newPropertyValue);
                    }
                }
                else
                {
                    property.SetValue(this.Model, propertyValue);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Method that extends IWrapRequest<T> allowing to get filter properties from request
        /// </summary>
        /// <typeparam name="TModel">Generic type of the entity</typeparam>
        /// <param name="source">Self IWrapRequest<T> instance</param>
        /// <returns>Returns a dictionary with properties and values found</returns>
        internal static List <FilterProperty> FilterProperties <TModel>(
            this IWrapRequest <TModel> source
            ) where TModel : class
        {
            var filterProperties = new List <FilterProperty>();

            foreach (var property in typeof(TModel).GetProperties().Where(x =>
                                                                          !source.IsPropertySuppressed(x.Name)
                                                                          ).ToList())
            {
                foreach (var criteria in CriteriasHelper.GetPropertyTypeCriteria(property.PropertyType))
                {
                    var criteriaName = $"{property.Name.ToCamelCase()}{criteria}";
                    var listObjects  = new List <object>();
                    foreach (var value in source.AllProperties.Where(x =>
                                                                     x.Name.ToLower().Equals(criteriaName.ToLower())
                                                                     ).Select(x => x.Value).ToList())
                    {
                        bool   changed    = false;
                        object typedValue = TypesHelper.TryChangeType(value.ToString(), property.PropertyType, out changed);
                        if (changed)
                        {
                            listObjects.Add(typedValue);
                        }
                    }
                    if (listObjects.Count > 0)
                    {
                        filterProperties.Add(new FilterProperty {
                            Name = criteriaName, Value = listObjects.Count > 1 ? listObjects : listObjects.FirstOrDefault()
                        });
                    }
                }
            }

            return(filterProperties);
        }
        /// <summary>
        /// Method that extends IWrapRequest<T> allowing to get query properties from request
        /// </summary>
        /// <typeparam name="TModel">Generic type of the entity</typeparam>
        /// <param name="source">Self IWrapRequest<T> instance</param>
        /// <returns>Returns a dictionary with properties and values found</returns>
        internal static Search Search <TModel>(
            this IWrapRequest <TModel> source
            ) where TModel : class
        {
            var search = new Search();

            #region GET QUERY PROPERTY
            var queryProperty = source.AllProperties.Where(x =>
                                                           x.Name.ToLower().Equals(Constants.CONST_QUERY.ToLower()) &&
                                                           x.Source == WrapPropertySource.FromQuery
                                                           ).FirstOrDefault();
            if (queryProperty != null)
            {
                bool   changed    = false;
                string typedValue = TypesHelper.TryChangeType <string>(queryProperty.Value.ToString(), out changed);
                if (changed)
                {
                    search.Query = typedValue;
                }
                else
                {
                    search.Query = string.Empty;
                }
            }
            else
            {
                search.Query = string.Empty;
            }
            #endregion

            #region GET QUERY STRICT PROPERTY
            var queryStrictProperty = source.AllProperties.Where(x =>
                                                                 x.Name.ToLower().Equals(Constants.CONST_QUERY_STRICT.ToLower()) &&
                                                                 x.Source == WrapPropertySource.FromQuery
                                                                 ).FirstOrDefault();
            if (queryStrictProperty != null)
            {
                bool changed    = false;
                bool typedValue = TypesHelper.TryChangeType <bool>(queryStrictProperty.Value.ToString(), out changed);
                if (changed)
                {
                    search.Strict = typedValue;
                }
                else
                {
                    search.Strict = false;
                }
            }
            else
            {
                search.Strict = false;
            }
            #endregion

            #region GET QUERY PHRASE PROPERTY
            var queryPhraseProperty = source.AllProperties.Where(x =>
                                                                 x.Name.ToLower().Equals(Constants.CONST_QUERY_PHRASE.ToLower()) &&
                                                                 x.Source == WrapPropertySource.FromQuery
                                                                 ).FirstOrDefault();
            if (queryPhraseProperty != null)
            {
                bool changed    = false;
                bool typedValue = TypesHelper.TryChangeType <bool>(queryPhraseProperty.Value.ToString(), out changed);
                if (changed)
                {
                    search.Phrase = typedValue;
                }
                else
                {
                    search.Phrase = false;
                }
            }
            else
            {
                search.Phrase = false;
            }
            #endregion

            source.RequestObject.SetValue(Constants.CONST_SEARCH_PROPERTIES, search);

            return(search);
        }