From: <fab...@us...> - 2011-04-04 17:05:36
|
Revision: 5601 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5601&view=rev Author: fabiomaulo Date: 2011-04-04 17:05:30 +0000 (Mon, 04 Apr 2011) Log Message: ----------- Ctor and TableName management for JoinMapper Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IClassMapper.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/IJoinMapper.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ClassMapper.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/JoinMapper.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/JoinMapperTests.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IClassMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IClassMapper.cs 2011-04-04 15:22:56 UTC (rev 5600) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IClassMapper.cs 2011-04-04 17:05:30 UTC (rev 5601) @@ -22,7 +22,10 @@ void SchemaAction(SchemaAction action); } - public interface IClassMapper : IClassAttributesMapper, IPropertyContainerMapper {} + public interface IClassMapper : IClassAttributesMapper, IPropertyContainerMapper + { + void Join(Action<IJoinMapper> splittedMapping); + } public interface IClassAttributesMapper<TEntity> : IEntityAttributesMapper, IEntitySqlsMapper where TEntity : class { Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IJoinMapper.cs =================================================================== (Binary files differ) Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ClassMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ClassMapper.cs 2011-04-04 15:22:56 UTC (rev 5600) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ClassMapper.cs 2011-04-04 17:05:30 UTC (rev 5601) @@ -168,6 +168,11 @@ classMapping.schemaaction = action.ToSchemaActionString(); } + public void Join(Action<IJoinMapper> splittedMapping) + { + throw new NotImplementedException(); + } + #endregion #region Implementation of IEntityAttributesMapper Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/JoinMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/JoinMapper.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/JoinMapper.cs 2011-04-04 17:05:30 UTC (rev 5601) @@ -0,0 +1,120 @@ +using System; +using NHibernate.Cfg.MappingSchema; + +namespace NHibernate.Mapping.ByCode.Impl +{ + public class TableNameChangedEventArgs + { + public TableNameChangedEventArgs(string oldName, string newName) + { + OldName = oldName; + NewName = newName; + } + public string OldName { get; private set; } + public string NewName { get; private set; } + } + public delegate void TableNameChangedHandler(IJoinMapper mapper, TableNameChangedEventArgs args); + + public class JoinMapper: AbstractPropertyContainerMapper,IJoinMapper + { + private readonly HbmJoin hbmJoin; + + public JoinMapper(System.Type container, string splitGroupId, HbmJoin hbmJoin, HbmMapping mapDoc) : base(container, mapDoc) + { + if (splitGroupId == null) + { + throw new ArgumentNullException("splitGroupId"); + } + if (hbmJoin == null) + { + throw new ArgumentNullException("hbmJoin"); + } + this.hbmJoin = hbmJoin; + this.hbmJoin.table = splitGroupId.Trim(); + if (string.IsNullOrEmpty(this.hbmJoin.table)) + { + throw new ArgumentOutOfRangeException("splitGroupId", "The table-name cant be empty."); + } + } + + public event TableNameChangedHandler TableNameChanged; + + public void InvokeTableNameChanged(TableNameChangedEventArgs e) + { + TableNameChangedHandler handler = TableNameChanged; + if (handler != null) + { + handler(this, e); + } + } + + protected override void AddProperty(object property) + { + } + + public void Loader(string namedQueryReference) + { + // not supported by Join + } + + public void SqlInsert(string sql) + { + } + + public void SqlUpdate(string sql) + { + } + + public void SqlDelete(string sql) + { + } + + public void Subselect(string sql) + { + } + + public void Table(string tableName) + { + if (tableName == null) + { + throw new ArgumentNullException("tableName"); + } + + var trimmedName = tableName.Trim(); + if (string.IsNullOrEmpty(trimmedName)) + { + throw new ArgumentOutOfRangeException("tableName", "The table-name cant be empty."); + } + var oldName = hbmJoin.table; + hbmJoin.table = trimmedName; + if(!trimmedName.Equals(oldName)) + { + InvokeTableNameChanged(new TableNameChangedEventArgs(oldName, trimmedName)); + } + } + + public void Catalog(string catalogName) + { + } + + public void Schema(string schemaName) + { + } + + public void Key(Action<IKeyMapper> keyMapping) + { + } + + public void Inverse(bool value) + { + } + + public void Optional(bool isOptional) + { + } + + public void Fetch(FetchMode fetchMode) + { + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-04-04 15:22:56 UTC (rev 5600) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-04-04 17:05:30 UTC (rev 5601) @@ -370,6 +370,7 @@ <Compile Include="Mapping\ByCode\Impl\ICustomizersHolder.cs" /> <Compile Include="Mapping\ByCode\Impl\IdMapper.cs" /> <Compile Include="Mapping\ByCode\Impl\JoinedSubclassMapper.cs" /> + <Compile Include="Mapping\ByCode\Impl\JoinMapper.cs" /> <Compile Include="Mapping\ByCode\Impl\KeyManyToOneMapper.cs" /> <Compile Include="Mapping\ByCode\Impl\KeyMapper.cs" /> <Compile Include="Mapping\ByCode\Impl\KeyPropertyMapper.cs" /> Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/JoinMapperTests.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/JoinMapperTests.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/JoinMapperTests.cs 2011-04-04 17:05:30 UTC (rev 5601) @@ -0,0 +1,81 @@ +using System; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode.Impl; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.MappingByCode.MappersTests +{ + public class JoinMapperTests + { + private class MyClass + { + public int Something { get; set; } + } + + [Test] + public void WhenCreateWithEmptySplitGroupThenThrows() + { + var mapdoc = new HbmMapping(); + var hbmJoin = new HbmJoin(); + Executing.This(() => new JoinMapper(typeof(MyClass), null, hbmJoin, mapdoc)).Should().Throw<ArgumentNullException>(); + Executing.This(() => new JoinMapper(typeof(MyClass), "", hbmJoin, mapdoc)).Should().Throw<ArgumentOutOfRangeException>(); + Executing.This(() => new JoinMapper(typeof(MyClass), " ", hbmJoin, mapdoc)).Should().Throw<ArgumentOutOfRangeException>(); + } + + [Test] + public void WhenCreateWithNullHbmJoinThenThrows() + { + var mapdoc = new HbmMapping(); + Executing.This(() => new JoinMapper(typeof(MyClass), "AA", null, mapdoc)).Should().Throw<ArgumentNullException>(); + } + + [Test] + public void WhenCreateThenSetDefaultTableName() + { + var mapdoc = new HbmMapping(); + var hbmJoin = new HbmJoin(); + new JoinMapper(typeof(MyClass), " AA ", hbmJoin, mapdoc); + hbmJoin.table.Should().Be("AA"); + } + + [Test] + public void CanSetTable() + { + var mapdoc = new HbmMapping(); + var hbmJoin = new HbmJoin(); + var mapper = new JoinMapper(typeof(MyClass), "AA", hbmJoin, mapdoc); + mapper.Table(" Pizza "); + hbmJoin.table.Should().Be("Pizza"); + } + + [Test] + public void WhenSetTableNameEmptyThenThrows() + { + var mapdoc = new HbmMapping(); + var hbmJoin = new HbmJoin(); + var mapper = new JoinMapper(typeof(MyClass), "AA", hbmJoin, mapdoc); + mapper.Executing(x => x.Table(null)).Throws<ArgumentNullException>(); + mapper.Executing(x => x.Table("")).Throws<ArgumentOutOfRangeException>(); + mapper.Executing(x => x.Table(" ")).Throws<ArgumentOutOfRangeException>(); + } + + [Test] + public void WhenTableNameChangesValueThenNotify() + { + bool eventCalled = false; + var mapdoc = new HbmMapping(); + var hbmJoin = new HbmJoin(); + var mapper = new JoinMapper(typeof(MyClass), "AA", hbmJoin, mapdoc); + mapper.TableNameChanged += (m, x) => + { + m.Should().Be.SameInstanceAs(mapper); + x.OldName.Should().Be("AA"); + x.NewName.Should().Be("Pizza"); + eventCalled = true; + }; + mapper.Table(" Pizza "); + eventCalled.Should().Be.True(); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-04 15:22:56 UTC (rev 5600) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-04 17:05:30 UTC (rev 5601) @@ -522,6 +522,7 @@ <Compile Include="MappingByCode\ExpliticMappingTests\RootClassPropertiesSplitsTests.cs" /> <Compile Include="MappingByCode\ExpliticMappingTests\VersionTests.cs" /> <Compile Include="MappingByCode\For.cs" /> + <Compile Include="MappingByCode\MappersTests\JoinMapperTests.cs" /> <Compile Include="MappingByCode\NatureDemo\Naturalness\Address.cs" /> <Compile Include="MappingByCode\NatureDemo\Naturalness\Animal.cs" /> <Compile Include="MappingByCode\NatureDemo\Naturalness\Classification.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |