From: <fab...@us...> - 2009-12-02 04:15:52
|
Revision: 4888 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4888&view=rev Author: fabiomaulo Date: 2009-12-02 04:15:42 +0000 (Wed, 02 Dec 2009) Log Message: ----------- binders refactoring - ValuePropertyBinder on the road Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ValuePropertyBinder.cs Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs 2009-12-01 22:52:47 UTC (rev 4887) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs 2009-12-02 04:15:42 UTC (rev 4888) @@ -61,7 +61,7 @@ if ((propertyMapping = entityPropertyMapping as HbmProperty) != null) { var value = new SimpleValue(table); - BindSimpleValue(Serialize(propertyMapping), value, true, propertyName); + new ValuePropertyBinder(value, Mappings).BindSimpleValue(propertyMapping, propertyName, true); property = CreateProperty(entityPropertyMapping, model.ClassName, value, inheritedMetas); BindValueProperty(propertyMapping, property); } Added: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ValuePropertyBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ValuePropertyBinder.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ValuePropertyBinder.cs 2009-12-02 04:15:42 UTC (rev 4888) @@ -0,0 +1,55 @@ +using System; +using System.Linq; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping; +using NHibernate.Util; + +namespace NHibernate.Cfg.XmlHbmBinding +{ + public class ValuePropertyBinder : Binder + { + private readonly SimpleValue value; + + public ValuePropertyBinder(SimpleValue value, Mappings mappings) + : base(mappings) + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + this.value = value; + } + + //automatically makes a column with the default name if none is specified by XML + public void BindSimpleValue(HbmProperty propertyMapping, string propertyPath, bool isNullable) + { + new TypeBinder(value, Mappings).Bind(propertyMapping.Type); + var formulas = propertyMapping.Formulas.ToArray(); + if (formulas.Length > 0) + { + foreach (var hbmFormula in formulas) + { + value.AddFormula(new Formula {FormulaString = hbmFormula.Text.LinesToString()}); + } + } + else + { + new ColumnsBinder(value, Mappings).Bind(propertyMapping.Columns, isNullable, + () => + new HbmColumn + { + name = mappings.NamingStrategy.PropertyToColumnName(propertyPath), + length = propertyMapping.length, + scale = propertyMapping.scale, + precision = propertyMapping.precision, + notnull = propertyMapping.notnull, + notnullSpecified = propertyMapping.notnullSpecified, + unique = propertyMapping.unique, + uniqueSpecified = true, + uniquekey = propertyMapping.uniquekey, + index = propertyMapping.index + }); + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-12-01 22:52:47 UTC (rev 4887) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-12-02 04:15:42 UTC (rev 4888) @@ -552,6 +552,9 @@ <SubType>Code</SubType> </Compile> <Compile Include="Cfg\XmlHbmBinding\TypeBinder.cs" /> + <Compile Include="Cfg\XmlHbmBinding\ValuePropertyBinder.cs"> + <SubType>Code</SubType> + </Compile> <Compile Include="Context\WcfOperationSessionContext.cs" /> <Compile Include="Criterion\GroupedProjection.cs" /> <Compile Include="Criterion\IPropertyProjection.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |