/// <summary> /// Gets the member's value on the specified object. /// </summary> /// <param name="obj">The obj.</param> /// <param name="memberName">Name of the member.</param> /// <param name="accessorFactory">The accessor factory.</param> /// <returns>The member's value</returns> public static object GetMember(object obj, string memberName, AccessorFactory accessorFactory) { try { object value = null; if (memberName.IndexOf("[") > -1) { value = GetArrayMember(obj, memberName, accessorFactory); } else { if (obj is IDictionary) { value = ((IDictionary)obj)[memberName]; } else { IGetter getter = accessorFactory.CreateGetter(obj.GetType(), memberName); if (getter == null) { throw new ProbeException("No Get method for member " + memberName + " on instance of " + obj.GetType().Name); } try { value = getter.GetValue(obj, null); } catch (Exception ae) { throw new ProbeException(ae); } } } return value; } catch (ProbeException pe) { throw pe; } catch (Exception e) { throw new ProbeException("Could not Set property '" + memberName + "' for " + obj.GetType().Name + ". Cause: " + e.Message, e); } }
/// <summary> /// Initializes a new instance of the <see cref="IsEmptyTagHandler"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsEmptyTagHandler(AccessorFactory accessorFactory) : base(accessorFactory) { }
/// <summary> /// Initializes a new instance of the <see cref="Iterate"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public Iterate(AccessorFactory accessorFactory) { this.Handler = new IterateTagHandler(accessorFactory); }
/// <summary> /// Initializes a new instance of the <see cref="BaseTagHandler"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public BaseTagHandler(AccessorFactory accessorFactory) { _accessorFactory = accessorFactory; }
/// <summary> /// Sets the array member. /// </summary> /// <param name="obj">The obj.</param> /// <param name="indexedName">Name of the indexed.</param> /// <param name="value">The value.</param> /// <param name="accessorFactory">The accessor factory.</param> private static void SetArrayMember(object obj, string indexedName, object value, AccessorFactory accessorFactory) { try { int startIndex = indexedName.IndexOf("["); int length = indexedName.IndexOf("]"); string name = indexedName.Substring(0, startIndex); string index = indexedName.Substring(startIndex + 1, length - (startIndex + 1)); int i = System.Convert.ToInt32(index); object list = null; if (name.Length > 0) { list = GetMember(obj, name, accessorFactory); } else { list = obj; } if (list is IList) { ((IList)list)[i] = value; } else { throw new ProbeException("The '" + name + "' member of the " + obj.GetType().Name + " class is not a List or Array."); } } catch (ProbeException pe) { throw pe; } catch (Exception e) { throw new ProbeException("Error getting ordinal value from .net object. Cause" + e.Message, e); } }
/// <summary> /// Sets the member. /// </summary> /// <param name="obj">The obj.</param> /// <param name="memberName">Name of the member.</param> /// <param name="memberValue">The member value.</param> /// <param name="accessorFactory">The accessor factory.</param> public static void SetMember(object obj, string memberName, object memberValue, AccessorFactory accessorFactory) { try { if (memberName.IndexOf("[") > -1) { SetArrayMember(obj, memberName, memberValue, accessorFactory); } else { if (obj is IDictionary) { ((IDictionary)obj)[memberName] = memberValue; } else { ISetter setter = accessorFactory.CreateSetter(obj.GetType(), memberName); if (setter == null) { throw new ProbeException("No Set method for member " + memberName + " on instance of " + obj.GetType().Name); } try { setter.SetValue(obj, null, memberValue); } catch (Exception ex) { throw new ProbeException(ex); } } } } catch (ProbeException pe) { throw pe; } catch (Exception e) { throw new ProbeException("Could not Get property '" + memberName + "' for " + obj.GetType().Name + ". Cause: " + e.Message, e); } }
/// <summary> /// Initializes a new instance of the <see cref="IsGreaterThanTagHandler"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsGreaterThanTagHandler(AccessorFactory accessorFactory) : base(accessorFactory) { }
/// <summary> /// Initializes a new instance of the <see cref="IsNotParameterPresent"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsNotParameterPresent(AccessorFactory accessorFactory) { this.Handler = new IsNotParameterPresentTagHandler(accessorFactory); }
/// <summary> /// Initializes a new instance of the <see cref="IsParameterPresentTagHandler"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsParameterPresentTagHandler(AccessorFactory accessorFactory) : base(accessorFactory) { }
/// <summary> /// Initializes a new instance of the <see cref="IterateTagHandler"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IterateTagHandler(AccessorFactory accessorFactory) : base(accessorFactory) { }
/// <summary> /// Initializes a new instance of the <see cref="DynamicTagHandler"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public DynamicTagHandler(AccessorFactory accessorFactory) : base(accessorFactory) { }
/// <summary> /// Initializes a new instance of the <see cref="ConditionalTagHandler"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public ConditionalTagHandler(AccessorFactory accessorFactory) : base(accessorFactory) { }
/// <summary> /// Initializes a new instance of the <see cref="IsNotEmpty"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsNotEmpty(AccessorFactory accessorFactory) { this.Handler = new IsNotEmptyTagHandler(accessorFactory); }
/// <summary> /// Initializes a new instance of the <see cref="IsPropertyAvailableDeSerializer"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsPropertyAvailableDeSerializer(AccessorFactory accessorFactory) : base(accessorFactory) { }
/// <summary> /// Initializes a new instance of the <see cref="IsLessThanTagHandler"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsLessThanTagHandler(AccessorFactory accessorFactory) : base(accessorFactory) { }
/// <summary> /// Initializes a new instance of the IsLessThan class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsLessThan(AccessorFactory accessorFactory) { this.Handler = new IsLessThanTagHandler(accessorFactory); }
/// <summary> /// Initializes a new instance of the <see cref="IsLessEqualTagHandler"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsLessEqualTagHandler(AccessorFactory accessorFactory) : base(accessorFactory) { }
/// <summary> /// Initializes a new instance of the <see cref="IsNullTagHandler"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsNullTagHandler(AccessorFactory accessorFactory) : base(accessorFactory) { }
/// <summary> /// Initializes a new instance of the <see cref="IsNotPropertyAvailable"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsNotPropertyAvailable(AccessorFactory accessorFactory) { this.Handler = new IsNotPropertyAvailableTagHandler(accessorFactory); }
/// <summary> /// Return the specified member on an object. /// </summary> /// <param name="obj">The Object on which to invoke the specified property.</param> /// <param name="memberName">Name of the member.</param> /// <param name="accessorFactory">The accessor factory.</param> /// <returns>An Object representing the return value of the invoked property.</returns> public static object GetMemberValue(object obj, string memberName, AccessorFactory accessorFactory) { if (memberName.IndexOf('.') > -1) { StringTokenizer parser = new StringTokenizer(memberName, "."); IEnumerator enumerator = parser.GetEnumerator(); object value = obj; string token = null; while (enumerator.MoveNext()) { token = (string)enumerator.Current; value = GetMember(value, token, accessorFactory); if (value == null) { break; } } return value; } else { return GetMember(obj, memberName, accessorFactory); } }
/// <summary> /// Initializes a new instance of the <see cref="T:Dynamic"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public Dynamic(AccessorFactory accessorFactory) { this.Handler = new DynamicTagHandler(accessorFactory); }
/// <summary> /// Sets the member value. /// </summary> /// <param name="obj">he Object on which to invoke the specified mmber.</param> /// <param name="memberName">Name of the member.</param> /// <param name="memberValue">The member value.</param> /// <param name="objectFactory">The object factory.</param> /// <param name="accessorFactory">The accessor factory.</param> public static void SetMemberValue(object obj, string memberName, object memberValue, IObjectFactory objectFactory, AccessorFactory accessorFactory) { if (memberName.IndexOf('.') > -1) { StringTokenizer parser = new StringTokenizer(memberName, "."); IEnumerator enumerator = parser.GetEnumerator(); enumerator.MoveNext(); string currentPropertyName = (string)enumerator.Current; object child = obj; while (enumerator.MoveNext()) { Type type = GetMemberTypeForSetter(child, currentPropertyName); object parent = child; child = GetMember(parent, currentPropertyName, accessorFactory); if (child == null) { try { IFactory factory = objectFactory.CreateFactory(type, Type.EmptyTypes); child = factory.CreateInstance(Type.EmptyTypes); SetMemberValue(parent, currentPropertyName, child, objectFactory, accessorFactory); } catch (Exception e) { throw new ProbeException("Cannot set value of property '" + memberName + "' because '" + currentPropertyName + "' is null and cannot be instantiated on instance of " + type.Name + ". Cause:" + e.Message, e); } } currentPropertyName = (string)enumerator.Current; } SetMember(child, currentPropertyName, memberValue, accessorFactory); } else { SetMember(obj, memberName, memberValue, accessorFactory); } }
/// <summary> /// Initializes a new instance of the <see cref="IsEqual"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsEqual(AccessorFactory accessorFactory) { this.Handler = new IsEqualTagHandler(accessorFactory); }
/// <summary> /// Initializes a new instance of the <see cref="IsNotNull"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsNotNull(AccessorFactory accessorFactory) { this.Handler = new IsNotNullTagHandler(accessorFactory); }
/// <summary> /// Initializes a new instance of the <see cref="IsPropertyAvailableTagHandler"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsPropertyAvailableTagHandler(AccessorFactory accessorFactory) : base(accessorFactory) { }
/// <summary> /// Initializes a new instance of the <see cref="IsGreaterEqualTagHandler"/> class. /// </summary> /// <param name="accessorFactory">The accessor factory.</param> public IsGreaterEqualTagHandler(AccessorFactory accessorFactory) : base(accessorFactory) { }