Ejemplo n.º 1
0
		public static IComparable GetPropertyValue(object obj, string propertyName)
		{
			//TODO respect the client's choice in how Hibernate accesses property values.
			IGetter getter = new BasicPropertyAccessor().GetGetter(obj.GetType(), propertyName);

			return (IComparable) getter.Get(obj);
		}
Ejemplo n.º 2
0
 internal static IEnumerable<KeyValuePair<object, object>> AsKeyValue(this IEnumerable source)
 {
     var itemsIterator = source.GetEnumerator();
     if (itemsIterator.MoveNext())
     {
         IGetter valueProperty = new BasicPropertyAccessor().GetGetter(itemsIterator.Current.GetType(), "Value");
         IGetter keyProperty = new BasicPropertyAccessor().GetGetter(itemsIterator.Current.GetType(), "Key");
         return source.Cast<object>().Select(
             item => new KeyValuePair<object, object>(keyProperty.Get(item), valueProperty.Get(item)));
     }
     return new KeyValuePair<object, object>[0];
 }
Ejemplo n.º 3
0
        private void MakeCollectionValidation(IEnumerable value, object entity, MemberInfo member, ISet circularityState, ICollection<InvalidValue> results)
        {
            if (TypeUtils.IsGenericDictionary(value.GetType())) //Generic Dictionary
            {
                foreach (object item in value)
                {
                    IGetter ValueProperty = new BasicPropertyAccessor().GetGetter(item.GetType(), "Value");
                    IGetter KeyProperty = new BasicPropertyAccessor().GetGetter(item.GetType(), "Key");

                    object valueValue = ValueProperty.Get(item);
                    object keyValue = KeyProperty.Get(item);
                    string indexedPropName = string.Format("{0}[{1}]", member.Name, keyValue);

                    if (ShouldNeedValidation(ValueProperty.ReturnType))
                    {
                        InvalidValue[] invalidValuesKey =
                            GetClassValidator(ValueProperty.ReturnType).GetInvalidValues(valueValue, circularityState);

                        foreach (InvalidValue invalidValue in invalidValuesKey)
                        {
                            invalidValue.AddParentEntity(entity, indexedPropName);
                            results.Add(invalidValue);
                        }
                    }

                    if (ShouldNeedValidation(KeyProperty.ReturnType))
                    {
                        InvalidValue[] invalidValuesValue =
                            GetClassValidator(KeyProperty.ReturnType).GetInvalidValues(keyValue, circularityState);
                        foreach (InvalidValue invalidValue in invalidValuesValue)
                        {
                            invalidValue.AddParentEntity(entity, indexedPropName);
                            results.Add(invalidValue);
                        }
                    }
                }
            }
            else //Generic collection
            {
                int index = 0;
                foreach (object item in value)
                {
                    if (item == null)
                    {
                        index++;
                        continue;
                    }

                    System.Type itemType = item.GetType();
                    if (ShouldNeedValidation(itemType))
                    {
                        InvalidValue[] invalidValues = GetClassValidator(itemType).GetInvalidValues(item, circularityState);

                        String indexedPropName = string.Format("{0}[{1}]", member.Name, index);

                        foreach (InvalidValue invalidValue in invalidValues)
                        {
                            invalidValue.AddParentEntity(entity, indexedPropName);
                            results.Add(invalidValue);
                        }
                    }
                    index++;
                }
            }
        }