Author: gbayon
Date: Sat Apr  1 10:53:15 2006
New Revision: 390726

URL: http://svn.apache.org/viewcvs?rev=390726&view=rev
Log:
- Finished implementing IDataExchange (SetData support)

Modified:
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Serializers/ResultMapDeSerializer.cs
    ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/BaseDataExchange.cs
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ComplexDataExchange.cs
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DictionaryDataExchange.cs
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DotNetObjectDataExchange.cs
    ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/IDataExchange.cs
    ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ListDataExchange.cs
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/PrimitiveDataExchange.cs
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs
 (original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs
 Sat Apr  1 10:53:15 2006
@@ -2,7 +2,7 @@
 #region Apache Notice
 /*****************************************************************************
  * $Header: $
- * $Revision: 390227 $
+ * $Revision$
  * $Date$
  * 
  * iBATIS.NET Data Mapper
@@ -294,6 +294,16 @@
                        typeHandler.SetParameter(dataParameter, value, 
mapping.DbType);
                }
 
+               /// <summary>
+               /// Set output parameter value.
+               /// </summary>
+               /// <param name="mapping"></param>
+               /// <param name="dataBaseValue"></param>
+               /// <param name="target"></param>
+               public void SetOutputParameter(ref object target, 
ParameterProperty mapping, object dataBaseValue )
+               {
+                       _dataExchange.SetData(ref target, mapping, 
dataBaseValue);
+               }
 
                #region Configuration
 

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs
 (original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs
 Sat Apr  1 10:53:15 2006
@@ -35,6 +35,7 @@
 using IBatisNet.Common.Utilities.Objects;
 using IBatisNet.Common.Utilities.TypesResolver;
 using IBatisNet.DataMapper.Configuration.Serializers;
+using IBatisNet.DataMapper.DataExchange;
 using IBatisNet.DataMapper.Scope;
 
 #endregion
@@ -63,7 +64,6 @@
                /// </summary>
                private const string XML_SUBMAP = "subMap";
 
-               private IFactory _objectFactory = null;
 
                #region Fields
                [NonSerialized]
@@ -81,6 +81,12 @@
                private Discriminator _discriminator = null;
                [NonSerialized]
                private string _sqlMapNameSpace = string.Empty;
+               [NonSerialized]
+               private IFactory _objectFactory = null;
+               [NonSerialized]
+               private DataExchangeFactory _dataExchangeFactory = null;
+               [NonSerialized]
+               private IDataExchange _dataExchange = null;
                #endregion
 
                #region Properties
@@ -91,14 +97,8 @@
                [XmlIgnore]
                public string SqlMapNameSpace
                {
-                       get
-                       {
-                               return _sqlMapNameSpace;
-                       }       
-                       set
-                       {
-                               _sqlMapNameSpace = value;
-                       }       
+                       get { return _sqlMapNameSpace; }        
+                       set { _sqlMapNameSpace = value; }       
                }
 
                /// <summary>
@@ -107,14 +107,8 @@
                [XmlIgnore]
                public Discriminator Discriminator
                {
-                       get
-                       {
-                               return _discriminator;
-                       }       
-                       set
-                       {
-                               _discriminator = value;
-                       }       
+                       get { return _discriminator; }  
+                       set { _discriminator = value; } 
                }
 
                /// <summary>
@@ -179,14 +173,24 @@
                                _className = value; 
                        }
                }
+
+               /// <summary>
+               /// Sets the IDataExchange
+               /// </summary>
+               [XmlIgnore]
+               public IDataExchange DataExchange
+               {
+                       set { _dataExchange = value; }
+               }
                #endregion
 
                #region Constructor (s) / Destructor
                /// <summary>
                /// Do not use direclty, only for serialization.
                /// </summary>
-               public ResultMap()
+               public ResultMap(DataExchangeFactory dataExchangeFactory)
                {
+                       _dataExchangeFactory = dataExchangeFactory;
                }
                #endregion
 
@@ -202,6 +206,8 @@
                        try
                        {
                                _class = 
configScope.SqlMapper.TypeHandlerFactory.GetType(_className);
+                               _dataExchange = 
_dataExchangeFactory.GetDataExchangeForClass(_class);
+
                                if (Type.GetTypeCode(_class) == TypeCode.Object)
                                {
                                        _objectFactory = 
configScope.SqlMapper.ObjectFactory.CreateFactory(_class);
@@ -309,33 +315,7 @@
                /// <param name="dataBaseValue">The database value to 
set.</param>
                public void SetValueOfProperty( ref object target, 
ResultProperty property, object dataBaseValue )
                {
-                       if (target is Hashtable)
-                       {
-                               ((Hashtable) target).Add(property.PropertyName, 
dataBaseValue);
-                       }
-                       else
-                       {
-                               if ( target.GetType() != _class )
-                               {
-                                       throw new ArgumentException( "Could not 
set value of type '"+ target.GetType() +"' in property 
'"+property.PropertyName+"' of type '"+_class+"'" );
-                               }
-
-                               if ( property.MemberAccessor != null )
-                               {
-                                       if (property.IsComplexMemberName)
-                                       {
-                                               
ObjectProbe.SetPropertyValue(target, property.PropertyName, dataBaseValue);
-                                       }
-                                       else
-                                       {
-                                               
property.MemberAccessor.Set(target, dataBaseValue);
-                                       }
-                               }
-                               else // Primitive type ('value')
-                               {
-                                       target = dataBaseValue;
-                               }
-                       }
+                       _dataExchange.SetData(ref target, property, 
dataBaseValue);
                }
 
                /// <summary>

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Serializers/ResultMapDeSerializer.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Serializers/ResultMapDeSerializer.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Serializers/ResultMapDeSerializer.cs
 (original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Serializers/ResultMapDeSerializer.cs
 Sat Apr  1 10:53:15 2006
@@ -1,7 +1,7 @@
 #region Apache Notice
 /*****************************************************************************
  * $Header: $
- * $Revision: $
+ * $Revision$
  * $Date$
  * 
  * iBATIS.NET Data Mapper
@@ -47,7 +47,7 @@
                /// <returns></returns>
                public static ResultMap Deserialize(XmlNode node, 
ConfigurationScope configScope)
                {
-                       ResultMap resultMap = new ResultMap();
+                       ResultMap resultMap = new ResultMap( 
configScope.DataExchangeFactory );
 
                        NameValueCollection prop = 
NodeUtils.ParseAttributes(node, configScope.Properties);
                        resultMap.ClassName = prop["class"];

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/BaseDataExchange.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/BaseDataExchange.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/BaseDataExchange.cs 
(original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/BaseDataExchange.cs 
Sat Apr  1 10:53:15 2006
@@ -65,9 +65,18 @@
                /// Sets the value to the result property.
                /// </summary>
                /// <param name="mapping"></param>
-               /// <param name="parameterObject"></param>
+               /// <param name="target"></param>
                /// <param name="dataBaseValue"></param>
-               public abstract void SetData(ResultProperty mapping, object 
parameterObject, object dataBaseValue);
+               public abstract void SetData(ref object target, ResultProperty 
mapping, object dataBaseValue);
+
+               /// <summary>
+               /// Sets the value to the parameter property.
+               /// </summary>
+               /// <remarks>Use to set value on output parameter</remarks>
+               /// <param name="mapping"></param>
+               /// <param name="target"></param>
+               /// <param name="dataBaseValue"></param>
+               public abstract void SetData(ref object target, 
ParameterProperty mapping, object dataBaseValue);
 
                #endregion
        }

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ComplexDataExchange.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ComplexDataExchange.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ComplexDataExchange.cs 
(original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ComplexDataExchange.cs 
Sat Apr  1 10:53:15 2006
@@ -66,11 +66,23 @@
                /// Sets the value to the result property.
                /// </summary>
                /// <param name="mapping"></param>
-               /// <param name="parameterObject"></param>
+               /// <param name="target"></param>
                /// <param name="dataBaseValue"></param>
-               public override void SetData(ResultProperty mapping, object 
parameterObject, object dataBaseValue)
+               public override void SetData(ref object target, ResultProperty 
mapping, object dataBaseValue)
                {
-                       
+                       ObjectProbe.SetPropertyValue(target, 
mapping.PropertyName, dataBaseValue);
+               }
+
+               /// <summary>
+               /// Sets the value to the parameter property.
+               /// </summary>
+               /// <remarks>Use to set value on output parameter</remarks>
+               /// <param name="mapping"></param>
+               /// <param name="target"></param>
+               /// <param name="dataBaseValue"></param>
+               public override void SetData(ref object target, 
ParameterProperty mapping, object dataBaseValue)
+               {
+                       ObjectProbe.SetPropertyValue(target, 
mapping.PropertyName, dataBaseValue);
                }
 
                #endregion

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DictionaryDataExchange.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DictionaryDataExchange.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DictionaryDataExchange.cs
 (original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DictionaryDataExchange.cs
 Sat Apr  1 10:53:15 2006
@@ -23,6 +23,7 @@
  
********************************************************************************/
 #endregion
 
+using System.Collections;
 using IBatisNet.Common.Utilities.Objects;
 using IBatisNet.DataMapper.Configuration.ParameterMapping;
 using IBatisNet.DataMapper.Configuration.ResultMapping;
@@ -59,11 +60,23 @@
                /// Sets the value to the result property.
                /// </summary>
                /// <param name="mapping"></param>
-               /// <param name="parameterObject"></param>
+               /// <param name="target"></param>
+               /// <param name="dataBaseValue"></param>
+               public override void SetData(ref object target, ResultProperty 
mapping, object dataBaseValue)
+               {
+                       ((IDictionary) target).Add(mapping.PropertyName, 
dataBaseValue);
+               }
+
+               /// <summary>
+               /// Sets the value to the parameter property.
+               /// </summary>
+               /// <remarks>Use to set value on output parameter</remarks>
+               /// <param name="mapping"></param>
+               /// <param name="target"></param>
                /// <param name="dataBaseValue"></param>
-               public override void SetData(ResultProperty mapping, object 
parameterObject, object dataBaseValue)
+               public override void SetData(ref object target, 
ParameterProperty mapping, object dataBaseValue)
                {
-                       
+                       ObjectProbe.SetPropertyValue(target, 
mapping.PropertyName, dataBaseValue);
                }
 
                #endregion

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DotNetObjectDataExchange.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DotNetObjectDataExchange.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DotNetObjectDataExchange.cs
 (original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DotNetObjectDataExchange.cs
 Sat Apr  1 10:53:15 2006
@@ -63,15 +63,6 @@
                        }
                        else
                        {
-//                             if (mapping.MemberAccessor!=null)
-//                             {
-//                                     return 
mapping.MemberAccessor.Get(parameterObject);
-//                             }
-//                             else//Dynamic Iterate Id[0]
-//                             {
-//                                     
-//                                     return 
ObjectProbe.GetPropertyValue(parameterObject, mapping.PropertyName);
-//                             }
                                return 
mapping.MemberAccessor.Get(parameterObject);
                        }
                }
@@ -80,11 +71,41 @@
                /// Sets the value to the result property.
                /// </summary>
                /// <param name="mapping"></param>
-               /// <param name="parameterObject"></param>
+               /// <param name="target"></param>
                /// <param name="dataBaseValue"></param>
-               public override void SetData(ResultProperty mapping, object 
parameterObject, object dataBaseValue)
+               public override void SetData(ref object target, ResultProperty 
mapping, object dataBaseValue)
                {
-                       mapping.MemberAccessor.Set(parameterObject, 
dataBaseValue);
+                       if ( target.GetType() != _clazz )
+                       {
+                               throw new ArgumentException( "Could not set 
value of type '"+ target.GetType() +"' in property '"+mapping.PropertyName+"' 
of type '"+_clazz+"'" );
+                       }
+                       if ( mapping.IsComplexMemberName)
+                       {
+                               ObjectProbe.SetPropertyValue(target, 
mapping.PropertyName, dataBaseValue);
+                       }
+                       else
+                       {
+                               mapping.MemberAccessor.Set(target, 
dataBaseValue);
+                       }
+               }
+
+               /// <summary>
+               /// Sets the value to the parameter property.
+               /// </summary>
+               /// <remarks>Use to set value on output parameter</remarks>
+               /// <param name="mapping"></param>
+               /// <param name="target"></param>
+               /// <param name="dataBaseValue"></param>
+               public override void SetData(ref object target, 
ParameterProperty mapping, object dataBaseValue)
+               {
+                       if (mapping.IsComplexMemberName)
+                       {       
+                               ObjectProbe.SetPropertyValue(target, 
mapping.PropertyName, dataBaseValue);
+                       }
+                       else
+                       {
+                               mapping.MemberAccessor.Set(target, 
dataBaseValue);
+                       }
                }
 
                #endregion

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/IDataExchange.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/IDataExchange.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/IDataExchange.cs 
(original)
+++ ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/IDataExchange.cs 
Sat Apr  1 10:53:15 2006
@@ -44,8 +44,17 @@
                /// Sets the value to the result property.
                /// </summary>
                /// <param name="mapping"></param>
-               /// <param name="parameterObject"></param>
+               /// <param name="target"></param>
                /// <param name="dataBaseValue"></param>
-               void SetData(ResultProperty mapping, object parameterObject, 
object dataBaseValue);
+               void SetData(ref object target, ResultProperty mapping, object 
dataBaseValue);
+
+               /// <summary>
+               /// Sets the value to the parameter property.
+               /// </summary>
+               /// <remarks>Use to set value on output parameter</remarks>
+               /// <param name="mapping"></param>
+               /// <param name="target"></param>
+               /// <param name="dataBaseValue"></param>
+               void SetData(ref object target, ParameterProperty mapping, 
object dataBaseValue);
        }
 }

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ListDataExchange.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ListDataExchange.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ListDataExchange.cs 
(original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ListDataExchange.cs 
Sat Apr  1 10:53:15 2006
@@ -59,10 +59,23 @@
                /// Sets the value to the result property.
                /// </summary>
                /// <param name="mapping"></param>
-               /// <param name="parameterObject"></param>
+               /// <param name="target"></param>
                /// <param name="dataBaseValue"></param>
-               public override void SetData(ResultProperty mapping, object 
parameterObject, object dataBaseValue)
+               public override void SetData(ref object target, ResultProperty 
mapping, object dataBaseValue)
                {
+                       ObjectProbe.SetPropertyValue(target, 
mapping.PropertyName, dataBaseValue);
+               }
+
+               /// <summary>
+               /// Sets the value to the parameter property.
+               /// </summary>
+               /// <remarks>Use to set value on output parameter</remarks>
+               /// <param name="mapping"></param>
+               /// <param name="target"></param>
+               /// <param name="dataBaseValue"></param>
+               public override void SetData(ref object target, 
ParameterProperty mapping, object dataBaseValue)
+               {
+                       ObjectProbe.SetPropertyValue(target, 
mapping.PropertyName, dataBaseValue);
                }
 
                #endregion

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/PrimitiveDataExchange.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/PrimitiveDataExchange.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/PrimitiveDataExchange.cs
 (original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/PrimitiveDataExchange.cs
 Sat Apr  1 10:53:15 2006
@@ -69,11 +69,23 @@
                /// Sets the value to the result property.
                /// </summary>
                /// <param name="mapping"></param>
-               /// <param name="parameterObject"></param>
+               /// <param name="target"></param>
                /// <param name="dataBaseValue"></param>
-               public override void SetData(ResultProperty mapping, object 
parameterObject, object dataBaseValue)
+               public override void SetData(ref object target, ResultProperty 
mapping, object dataBaseValue)
                {
-                       mapping.MemberAccessor.Set(parameterObject, 
dataBaseValue);
+                       target = dataBaseValue;
+               }
+
+               /// <summary>
+               /// Sets the value to the parameter property.
+               /// </summary>
+               /// <remarks>Use to set value on output parameter</remarks>
+               /// <param name="mapping"></param>
+               /// <param name="target"></param>
+               /// <param name="dataBaseValue"></param>
+               public override void SetData(ref object target, 
ParameterProperty mapping, object dataBaseValue)
+               {
+                       target = dataBaseValue;
                }
 
                #endregion

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs 
(original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs 
Sat Apr  1 10:53:15 2006
@@ -45,6 +45,7 @@
 using IBatisNet.DataMapper.Scope;
 using IBatisNet.DataMapper.TypeHandlers;
 using IBatisNet.Common.Utilities.Objects.Members;
+using IBatisNet.DataMapper.DataExchange;
 
 #endregion
 
@@ -276,7 +277,7 @@
                                        if 
(_sqlMap.TypeHandlerFactory.IsSimpleType(_statement.ResultClass))
                                        {
                                                // Create a ResultMap
-                                               ResultMap resultMap = new 
ResultMap();
+                                               ResultMap resultMap = new 
ResultMap(request.DataExchangeFactory);
 
                                                // Create a ResultProperty
                                                ResultProperty property = new 
ResultProperty();
@@ -285,8 +286,9 @@
                                                property.TypeHandler = 
_sqlMap.TypeHandlerFactory.GetTypeHandler(outObject.GetType());
                                                
                                                
resultMap.AddResultPropery(property);
+                                               resultMap.DataExchange = 
request.DataExchangeFactory.GetDataExchangeForClass( typeof(int) );// set the 
PrimitiveDataExchange
 
-                                               SetObjectProperty(request, 
request.ResultMap, property, ref outObject, reader);
+                                               SetObjectProperty(request, 
resultMap, property, ref outObject, reader);
                                        }
                                        else if (outObject is IDictionary) 
                                        {
@@ -402,14 +404,7 @@
                                                object dataBaseValue = 
mapping.TypeHandler.GetDataBaseValue( 
((IDataParameter)command.Parameters[parameterName]).Value, result.GetType() );
                                                request.IsRowDataFound = 
request.IsRowDataFound || (dataBaseValue != null);
 
-                                               if (mapping.IsComplexMemberName 
|| typeof(IDictionary).IsAssignableFrom(request.ParameterMap.Class))
-                                               {       
-                                                       
ObjectProbe.SetPropertyValue(result, mapping.PropertyName, dataBaseValue);
-                                               }
-                                               else
-                                               {
-                                                       
mapping.MemberAccessor.Set(result, dataBaseValue);
-                                               }
+                                               
request.ParameterMap.SetOutputParameter(ref result, mapping, dataBaseValue);
                                        }
                                }
                        }
@@ -1231,14 +1226,14 @@
                                object dataBaseValue = 
mapping.GetDataBaseValue( reader );
                                request.IsRowDataFound = request.IsRowDataFound 
|| (dataBaseValue != null);
 
-                               if (resultMap != null) 
-                               {
+//                             if (resultMap != null) 
+//                             {
                                        resultMap.SetValueOfProperty( ref 
target, mapping, dataBaseValue );
-                               }
-                               else
-                               {
-                                       MappedStatement.SetValueOfProperty( ref 
target, mapping, dataBaseValue );
-                               }
+//                             }
+//                             else
+//                             {
+//                                     MappedStatement.SetValueOfProperty( ref 
target, mapping, dataBaseValue );
+//                             }
                                #endregion
                        }
                        else if (mapping.NestedResultMap != null) // 
'resultMap' ResultProperty
@@ -1251,7 +1246,7 @@
                                        obj = null;
                                }
 
-                               MappedStatement.SetValueOfProperty( ref target, 
mapping, obj );
+                               resultMap.SetValueOfProperty( ref target, 
mapping, obj );
                        }
                        else //'select' ResultProperty 
                        {
@@ -1364,47 +1359,6 @@
                        }
                }
        
-
-               private static void SetValueOfProperty( ref object target, 
ResultProperty property, object dataBaseValue )
-               {
-                       if (target is Hashtable)
-                       {
-                               ((Hashtable) target).Add(property.PropertyName, 
dataBaseValue);
-                       }
-                       else
-                       {
-                               if (property.PropertyName == "value")
-                               {
-                                       target = dataBaseValue;
-                               }
-                               else
-                               {
-                                       if (dataBaseValue == null)
-                                       {
-                                               if 
(property.IsComplexMemberName)
-                       {
-                                                       
ObjectProbe.SetPropertyValue( target, property.PropertyName, null);             
                        
-                               }
-                                               else
-                       {
-                                                       
property.MemberAccessor.Set(target, null);
-                       }
-                                       }
-                                       else
-                                       {
-                                               if 
(property.IsComplexMemberName)
-                                               {
-                                                       
ObjectProbe.SetPropertyValue(target, property.PropertyName, dataBaseValue);     
-                                               }
-                                               else
-                       {
-                                                       
property.MemberAccessor.Set(target, dataBaseValue);
-                       }
-                                       }
-                               }
-                       }
-               }
-
                        
                /// <summary>
                /// Raise an event ExecuteEventArgs
@@ -1444,6 +1398,7 @@
                        {
                                ReaderAutoMapper readerAutoMapper = new 
ReaderAutoMapper(_sqlMap.TypeHandlerFactory, 
                                        _sqlMap.MemberAccessorFactory,
+                                       _sqlMap.DataExchangeFactory,
                                        reader, 
                                        ref resultObject);
                                readerAutoMapper.AutoMapReader( reader, ref 
resultObject );
@@ -1460,6 +1415,7 @@
                                                        _readerAutoMapper = new 
ReaderAutoMapper(
                                                                
_sqlMap.TypeHandlerFactory, 
                                                                
_sqlMap.MemberAccessorFactory,
+                                                               
_sqlMap.DataExchangeFactory,
                                                                reader, 
                                                                ref 
resultObject);
                                                }
@@ -1474,7 +1430,7 @@
 
                private class ReaderAutoMapper 
                {
-                       private ResultMap _resultMap = new ResultMap();
+                       private ResultMap _resultMap = null;
 
                        /// <summary>
                        /// 
@@ -1483,15 +1439,19 @@
                        /// <param name="resultObject"></param>
                        /// <param name="typeHandlerFactory"></param>
                        /// <param name="memberAccessorFactory"></param>
+                       /// <param name="dataExchangeFactory"></param>
                        public ReaderAutoMapper(TypeHandlerFactory 
typeHandlerFactory, 
                                IMemberAccessorFactory memberAccessorFactory,
+                               DataExchangeFactory dataExchangeFactory,
                                IDataReader reader,
                                ref object resultObject) 
                        {
+                               Type targetType = resultObject.GetType();
+                               _resultMap = new ResultMap(dataExchangeFactory);
+                               _resultMap.DataExchange = 
dataExchangeFactory.GetDataExchangeForClass( targetType );
                                try 
                                {
                                        // Get all PropertyInfo from the 
resultObject properties
-                                       Type targetType = 
resultObject.GetType();
                                        ReflectionInfo reflectionInfo = 
ReflectionInfo.GetInstance(targetType);
                                        string[] propertiesName = 
reflectionInfo.GetWriteablePropertyNames();
 
@@ -1538,7 +1498,6 @@
                                                else
                                                {
                                                        propertyType = 
matchedMemberAccessor.MemberType;
-                                                       
//reflectionInfo.GetSetterType(matchedPropertyInfo.Name);
                                                }
 
                                                if(propertyType != null || 
matchedMemberAccessor != null) 
@@ -1554,21 +1513,6 @@
                                                        }
                                                        
_resultMap.AddResultPropery(property);
                                                } 
-
-                                               //                              
                // Fix for IBATISNET-73 (JIRA-73) from Ron Grabowski
-                                               //                              
                if (property.PropertyName != null && 
property.PropertyName.Length > 0)
-                                               //                              
                {
-                                               //                              
                        // Set TypeHandler
-                                               //                              
                        Type propertyType = 
reflectionInfo.GetSetterType(property.PropertyName);
-                                               //                              
                        property.TypeHandler = 
typeHandlerFactory.GetTypeHandler( propertyType );
-                                               //                              
                }
-                                               //                              
                else
-                                               //                              
                {
-                                               //                              
                        if (_logger.IsDebugEnabled)
-                                               //                              
                        {
-                                               //                              
                                _logger.Debug("The column [" + columnName + "] 
could not be auto mapped to a property on [" + resultObject.ToString() + "]");
-                                               //                              
                        }
-                                               //                              
                }
                                        }
                                } 
                                catch (Exception e) 
@@ -1587,7 +1531,7 @@
                                foreach (string key in 
_resultMap.ColumnsToPropertiesMap.Keys) 
                                {
                                        ResultProperty property = 
(ResultProperty) _resultMap.ColumnsToPropertiesMap[key];
-                                       MappedStatement.SetValueOfProperty( ref 
resultObject, property, 
+                                       _resultMap.SetValueOfProperty( ref 
resultObject, property, 
                                                property.GetDataBaseValue( 
reader ));
                                }
                        }


Reply via email to