示例#1
0
        /// <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);
            }
        }
示例#2
0
        /// <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);
 }
示例#4
0
        /// <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;
		}
示例#5
0
        /// <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);
            }
        }
示例#6
0
 /// <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)
		{
		}
示例#10
0
        /// <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)
		{
		}
示例#11
0
        /// <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)
		{
		}
示例#12
0
        /// <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="ConditionalTagHandler"/> class.
        /// </summary>
        /// <param name="accessorFactory">The accessor factory.</param>
        public ConditionalTagHandler(AccessorFactory accessorFactory)
            : base(accessorFactory)
		{
		}
示例#14
0
        /// <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)
		{
		}
示例#17
0
 /// <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)
		{
		}
示例#19
0
        /// <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);
		}
示例#21
0
        /// <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);
            }
        }
示例#22
0
        /// <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);
		}
示例#23
0
        /// <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);
            }
        }
示例#24
0
        /// <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);
		}
示例#25
0
        /// <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)
		{
		}
示例#28
0
 /// <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);
 }