|
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.
|