/// <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); } } }
/// <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); }