예제 #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 if (obj is IDictionary <string, object> )
                    {
                        value = ((IDictionary <string, object>)obj)[memberName];
                    }
                    else
                    {
                        Type targetType = obj.GetType();
                        IGetAccessorFactory getAccessorFactory = accessorFactory.GetAccessorFactory;
                        IGetAccessor        getAccessor        = getAccessorFactory.CreateGetAccessor(targetType, memberName);

                        if (getAccessor == null)
                        {
                            throw new ProbeException("No Get method for member " + memberName + " on instance of " + obj.GetType().Name);
                        }
                        try
                        {
                            value = getAccessor.Get(obj);
                        }
                        catch (Exception ae)
                        {
                            throw new ProbeException(ae);
                        }
                    }
                }
                return(value);
            }
            catch (ProbeException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new ProbeException("Could not Set property '" + memberName + "' for " + obj.GetType().Name + ".  Cause: " + e.Message, e);
            }
        }
예제 #2
0
        public void SetUp()
        {
            intSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicInt");
            intGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicInt");

            longSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicLong");
            longGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicLong");

            sbyteSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicSbyte");
            sbyteGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicSbyte");

            stringSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicString");
            stringGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicString");

            datetimeSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicDateTime");
            datetimeGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicDateTime");

            decimalSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicDecimal");
            decimalGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicDecimal");

            byteSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicByte");
            byteGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicByte");

            charSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicChar");
            charGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicChar");

            shortSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicShort");
            shortGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicShort");

            ushortSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicUshort");
            ushortGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicUshort");

            uintSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicUint");
            uintGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicUint");

            ulongSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicUlong");
            ulongGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicUlong");

            boolSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicBool");
            boolGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicBool");

            doubleSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicDouble");
            doubleGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicDouble");

            floatSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicFloat");
            floatGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicFloat");

            guidSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicGuid");
            guidGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicGuid");

            timespanSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicTimeSpan");
            timespanGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicTimeSpan");

            accountSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicAccount");
            accountGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicAccount");

            enumSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicDay");
            enumGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicDay");

#if dotnet2
            nullableSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicintNullable");
            nullableGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicintNullable");
#endif
        }
예제 #3
0
        public void SetUp()
        {
            intSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedInt");
            intGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedInt");

            longSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedLong");
            longGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedLong");

            sbyteSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedSbyte");
            sbyteGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedSbyte");

            stringSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedString");
            stringGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedString");

            datetimeSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedDateTime");
            datetimeGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedDateTime");

            decimalSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedDecimal");
            decimalGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedDecimal");

            byteSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedByte");
            byteGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedByte");

            charSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedChar");
            charGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedChar");

            shortSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedShort");
            shortGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedShort");

            ushortSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedUshort");
            ushortGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedUshort");

            uintSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedUint");
            uintGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedUint");

            ulongSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedUlong");
            ulongGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedUlong");

            boolSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedBool");
            boolGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedBool");

            doubleSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedDouble");
            doubleGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedDouble");

            floatSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedFloat");
            floatGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedFloat");

            guidSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedGuid");
            guidGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedGuid");

            timespanSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedTimeSpan");
            timespanGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedTimeSpan");

            accountSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedAccount");
            accountGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedAccount");

            enumSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedDay");
            enumGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedDay");

#if dotnet2
            nullableSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedintNullable");
            nullableGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedintNullable");
#endif
        }
예제 #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ParameterProperty"/> class.
        /// </summary>
        /// <param name="propertyName">Name of the property.</param>
        /// <param name="columnName">Name of the column.</param>
        /// <param name="callBackName">Name of the call back.</param>
        /// <param name="clrType">Type of the CLR.</param>
        /// <param name="dbType">Type of the db.</param>
        /// <param name="directionAttribute">The direction attribute.</param>
        /// <param name="nullValue">The null value.</param>
        /// <param name="precision">The precision.</param>
        /// <param name="scale">The scale.</param>
        /// <param name="size">The size.</param>
        /// <param name="parameterClass">The parameter class.</param>
        /// <param name="dataExchangeFactory">The data exchange factory.</param>
        public ParameterProperty(
            string propertyName,
            string columnName,
            string callBackName,
            string clrType,
            string dbType,
            string directionAttribute,
            string nullValue,
            Byte precision,
            Byte scale,
            int size,
            Type parameterClass,
            DataExchangeFactory dataExchangeFactory
            )
        {
            Contract.Require.That(propertyName, Is.Not.Null & Is.Not.Empty).When("retrieving argument propertyName in ParameterProperty constructor");

            this.columnName           = columnName;
            this.callBackName         = callBackName;
            this.clrType              = clrType;
            this.dbType               = dbType;
            this.nullValue            = nullValue;
            this.precision            = precision;
            this.scale                = scale;
            this.size                 = size;
            this._parameterClass      = parameterClass;
            this._dataExchangeFactory = dataExchangeFactory;

            #region Direction

            if (directionAttribute.Length > 0)
            {
                direction = (ParameterDirection)Enum.Parse(typeof(ParameterDirection), directionAttribute, true);
                this.directionAttribute = direction.ToString();
            }

            #endregion Direction

            #region Property Name

            this._currentPropertyName = propertyName;
            this._propertyPlaceholder = propertyName;

            if (propertyName.IndexOf('.') < 0)
            {
                isComplexMemberName = false;
            }
            else // complex member name FavouriteLineItem.Id
            {
                isComplexMemberName = true;
            }

            #endregion Property Name

            #region GetAccessor

            if (!typeof(IDictionary).IsAssignableFrom(parameterClass) && // Hashtable parameter map
                parameterClass != null && // value property
                !dataExchangeFactory.TypeHandlerFactory.IsSimpleType(parameterClass))    // value property
            {
                if (!isComplexMemberName)
                {
                    IGetAccessorFactory getAccessorFactory = dataExchangeFactory.AccessorFactory.GetAccessorFactory;
                    getAccessor = getAccessorFactory.CreateGetAccessor(parameterClass, propertyName);
                }
                else // complex member name FavouriteLineItem.Id
                {
                    string memberName = propertyName.Substring(propertyName.LastIndexOf('.') + 1);
                    string parentName = propertyName.Substring(0, propertyName.LastIndexOf('.'));
                    Type   parentType = ObjectProbe.GetMemberTypeForGetter(parameterClass, parentName);

                    IGetAccessorFactory getAccessorFactory = dataExchangeFactory.AccessorFactory.GetAccessorFactory;
                    getAccessor = getAccessorFactory.CreateGetAccessor(parentType, memberName);
                }
            }

            #endregion GetAccessor

            #region TypeHandler

            if (CallBackName.Length > 0)
            {
                try
                {
                    Type type = dataExchangeFactory.TypeHandlerFactory.GetType(CallBackName);
                    ITypeHandlerCallback typeHandlerCallback = (ITypeHandlerCallback)Activator.CreateInstance(type);
                    typeHandler = new CustomTypeHandler(typeHandlerCallback);
                }
                catch (Exception e)
                {
                    throw new ConfigurationException("Error occurred during custom type handler configuration.  Cause: " + e.Message, e);
                }
            }
            else
            {
                if (CLRType.Length == 0)  // Unknown
                {
                    if (getAccessor != null &&
                        dataExchangeFactory.TypeHandlerFactory.IsSimpleType(getAccessor.MemberType))
                    {
                        // Primitive
                        typeHandler = dataExchangeFactory.TypeHandlerFactory.GetTypeHandler(getAccessor.MemberType, dbType);
                    }
                    else
                    {
                        typeHandler = dataExchangeFactory.TypeHandlerFactory.GetUnkownTypeHandler();
                    }
                }
                else // If we specify a CLR type, use it
                {
                    Type type = TypeUtils.ResolveType(CLRType);

                    if (dataExchangeFactory.TypeHandlerFactory.IsSimpleType(type))
                    {
                        // Primitive
                        typeHandler = dataExchangeFactory.TypeHandlerFactory.GetTypeHandler(type, dbType);
                    }
                    else
                    {
                        // .NET object
                        type        = ObjectProbe.GetMemberTypeForGetter(parameterClass, PropertyName);
                        typeHandler = dataExchangeFactory.TypeHandlerFactory.GetTypeHandler(type, dbType);
                    }
                }
            }

            #endregion TypeHandler
        }
예제 #5
0
        /// <summary>
        /// Initializes the parameter property
        /// </summary>
        /// <param name="scope">The scope.</param>
        /// <param name="parameterClass">The parameter class.</param>
        public void Initialize(IScope scope, Type parameterClass)
        {
            if (_directionAttribute.Length > 0)
            {
                _direction = (ParameterDirection)Enum.Parse(typeof(ParameterDirection), _directionAttribute, true);
            }

            if (!typeof(IDictionary).IsAssignableFrom(parameterClass) &&          // Hashtable parameter map
                parameterClass != null &&                // value property
                !scope.DataExchangeFactory.TypeHandlerFactory.IsSimpleType(parameterClass))                     // value property
            {
                if (!_isComplexMemberName)
                {
                    IGetAccessorFactory getAccessorFactory = scope.DataExchangeFactory.AccessorFactory.GetAccessorFactory;
                    _getAccessor = getAccessorFactory.CreateGetAccessor(parameterClass, _propertyName);
                }
                else                 // complex member name FavouriteLineItem.Id
                {
                    string memberName = _propertyName.Substring(_propertyName.LastIndexOf('.') + 1);
                    string parentName = _propertyName.Substring(0, _propertyName.LastIndexOf('.'));
                    Type   parentType = ObjectProbe.GetMemberTypeForGetter(parameterClass, parentName);

                    IGetAccessorFactory getAccessorFactory = scope.DataExchangeFactory.AccessorFactory.GetAccessorFactory;
                    _getAccessor = getAccessorFactory.CreateGetAccessor(parentType, memberName);
                }
            }

            scope.ErrorContext.MoreInfo = "Check the parameter mapping typeHandler attribute '" + this.CallBackName + "' (must be a ITypeHandlerCallback implementation).";
            if (this.CallBackName.Length > 0)
            {
                try
                {
                    Type type = scope.DataExchangeFactory.TypeHandlerFactory.GetType(this.CallBackName);
                    ITypeHandlerCallback typeHandlerCallback = (ITypeHandlerCallback)Activator.CreateInstance(type);
                    _typeHandler = new CustomTypeHandler(typeHandlerCallback);
                }
                catch (Exception e)
                {
                    throw new ConfigurationException("Error occurred during custom type handler configuration.  Cause: " + e.Message, e);
                }
            }
            else
            {
                if (this.CLRType.Length == 0)                   // Unknown
                {
                    if (_getAccessor != null &&
                        scope.DataExchangeFactory.TypeHandlerFactory.IsSimpleType(_getAccessor.MemberType))
                    {
                        // Primitive
                        _typeHandler = scope.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(_getAccessor.MemberType, _dbType);
                    }
                    else
                    {
                        _typeHandler = scope.DataExchangeFactory.TypeHandlerFactory.GetUnkownTypeHandler();
                    }
                }
                else                 // If we specify a CLR type, use it
                {
                    Type type = TypeUtils.ResolveType(this.CLRType);

                    if (scope.DataExchangeFactory.TypeHandlerFactory.IsSimpleType(type))
                    {
                        // Primitive
                        _typeHandler = scope.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(type, _dbType);
                    }
                    else
                    {
                        // .NET object
                        type         = ObjectProbe.GetMemberTypeForGetter(type, this.PropertyName);
                        _typeHandler = scope.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(type, _dbType);
                    }
                }
            }
        }