|
From: <fab...@us...> - 2011-04-06 12:43:48
|
Revision: 5619
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5619&view=rev
Author: fabiomaulo
Date: 2011-04-06 12:43:42 +0000 (Wed, 06 Apr 2011)
Log Message:
-----------
CustomizerHolder Merge
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersHolder.cs
trunk/nhibernate/src/NHibernate/NHibernate.csproj
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/MappingByCode/CustomizerHolderMergeTest.cs
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersHolder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersHolder.cs 2011-04-05 23:07:24 UTC (rev 5618)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersHolder.cs 2011-04-06 12:43:42 UTC (rev 5619)
@@ -293,8 +293,48 @@
InvokeCustomizers(mapKeyElementCustomizers, member, mapper);
}
+ public void Merge(CustomizersHolder source)
+ {
+ MergeDictionary(rootClassCustomizers, source.rootClassCustomizers);
+ MergeDictionary(subclassCustomizers, source.subclassCustomizers);
+ MergeDictionary(joinedClassCustomizers, source.joinedClassCustomizers);
+ MergeDictionary(unionClassCustomizers, source.unionClassCustomizers);
+ MergeDictionary(componentClassCustomizers, source.componentClassCustomizers);
+ MergeDictionary(joinCustomizers, source.joinCustomizers);
+ MergeDictionary(propertyCustomizers, source.propertyCustomizers);
+ MergeDictionary(manyToOneCustomizers, source.manyToOneCustomizers);
+ MergeDictionary(oneToOneCustomizers, source.oneToOneCustomizers);
+ MergeDictionary(anyCustomizers, source.anyCustomizers);
+ MergeDictionary(setCustomizers, source.setCustomizers);
+ MergeDictionary(bagCustomizers, source.bagCustomizers);
+ MergeDictionary(listCustomizers, source.listCustomizers);
+ MergeDictionary(mapCustomizers, source.mapCustomizers);
+ MergeDictionary(idBagCustomizers, source.idBagCustomizers);
+ MergeDictionary(collectionCustomizers, source.collectionCustomizers);
+ MergeDictionary(componentPropertyCustomizers, source.componentPropertyCustomizers);
+ MergeDictionary(collectionRelationManyToManyCustomizers, source.collectionRelationManyToManyCustomizers);
+ MergeDictionary(collectionRelationElementCustomizers, source.collectionRelationElementCustomizers);
+ MergeDictionary(collectionRelationOneToManyCustomizers, source.collectionRelationOneToManyCustomizers);
+ MergeDictionary(mapKeyManyToManyCustomizers, source.mapKeyManyToManyCustomizers);
+ MergeDictionary(mapKeyElementCustomizers, source.mapKeyElementCustomizers);
+ }
+
#endregion
+ private void MergeDictionary<TSubject, TCustomizable>(Dictionary<TSubject, List<Action<TCustomizable>>> destination,Dictionary<TSubject, List<Action<TCustomizable>>> source)
+ {
+ foreach (var element in source)
+ {
+ List<Action<TCustomizable>> actions;
+ if (!destination.TryGetValue(element.Key, out actions))
+ {
+ actions = new List<Action<TCustomizable>>();
+ destination[element.Key] = actions;
+ }
+ actions.AddRange(element.Value);
+ }
+ }
+
private void AddCustomizer<TSubject, TCustomizable>(IDictionary<TSubject, List<Action<TCustomizable>>> customizers,
TSubject member, Action<TCustomizable> customizer)
{
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-04-05 23:07:24 UTC (rev 5618)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-04-06 12:43:42 UTC (rev 5619)
@@ -1774,6 +1774,7 @@
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
+ <ItemGroup />
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/CustomizerHolderMergeTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/MappingByCode/CustomizerHolderMergeTest.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/CustomizerHolderMergeTest.cs 2011-04-06 12:43:42 UTC (rev 5619)
@@ -0,0 +1,325 @@
+using NHibernate.Mapping.ByCode;
+using NHibernate.Mapping.ByCode.Impl;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.MappingByCode
+{
+ public class CustomizerHolderMergeTest
+ {
+ private class MyClass
+ {
+ public string Bar { get; set; }
+ }
+
+ private PropertyPath propertyPath = new PropertyPath(null, typeof(MyClass).GetProperty("Bar"));
+
+ [Test]
+ public void MergeShouldMergeAnyMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (IAnyMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IAnyMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeBagPropertiesMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (IBagPropertiesMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IBagPropertiesMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeIdBagPropertiesMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (IIdBagPropertiesMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IIdBagPropertiesMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeCollectionPropertiesMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (ICollectionPropertiesMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IBagPropertiesMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeElementMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (IElementMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IElementMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeManyToManyMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (IManyToManyMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IManyToManyMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeOneToManyMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (IOneToManyMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IOneToManyMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeComponentAttributesMapperOnProperty()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (IComponentAttributesMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IComponentAttributesMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeListPropertiesMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (IListPropertiesMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IListPropertiesMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeManyToOneMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (IManyToOneMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IManyToOneMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeMapPropertiesMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (IMapPropertiesMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IMapPropertiesMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeMapKeyMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (IMapKeyMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IMapKeyMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeMapKeyManyToManyMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (IMapKeyManyToManyMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IMapKeyManyToManyMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeOneToOneMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (IOneToOneMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IOneToOneMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergePropertyMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (IPropertyMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (IPropertyMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeSetPropertiesMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(propertyPath, (ISetPropertiesMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(propertyPath, (ISetPropertiesMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeJoinedSubclassAttributesMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(typeof(MyClass), (IJoinedSubclassAttributesMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(typeof(MyClass), (IJoinedSubclassAttributesMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeClassMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(typeof(MyClass), (IClassMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(typeof(MyClass), (IClassMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeSubclassMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(typeof(MyClass), (ISubclassMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(typeof(MyClass), (ISubclassMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeJoinAttributesMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(typeof(MyClass), (IJoinAttributesMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(typeof(MyClass), (IJoinAttributesMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeUnionSubclassAttributesMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(typeof(MyClass), (IUnionSubclassAttributesMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(typeof(MyClass), (IUnionSubclassAttributesMapper)null);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void MergeShouldMergeComponentAttributesMapper()
+ {
+ var emptyHolder = new CustomizersHolder();
+ var holder = new CustomizersHolder();
+ var called = false;
+
+ holder.AddCustomizer(typeof(MyClass), (IComponentAttributesMapper x) => called = true);
+ emptyHolder.Merge(holder);
+ emptyHolder.InvokeCustomizers(typeof(MyClass), (IComponentAttributesMapper)null);
+
+ called.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-05 23:07:24 UTC (rev 5618)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-06 12:43:42 UTC (rev 5619)
@@ -508,6 +508,7 @@
<Compile Include="Linq\ByMethod\SumTests.cs" />
<Compile Include="Logging\Log4NetLoggerTest.cs" />
<Compile Include="Logging\LoggerProviderTest.cs" />
+ <Compile Include="MappingByCode\CustomizerHolderMergeTest.cs" />
<Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\SplitPropertiesRegistrationTests.cs" />
<Compile Include="MappingByCode\ExpliticMappingTests\BasicMappingOfSimpleClass.cs" />
<Compile Include="MappingByCode\ExpliticMappingTests\ColumnsNamingConvetions.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|