From: <fab...@us...> - 2011-04-06 17:38:15
|
Revision: 5625 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5625&view=rev Author: fabiomaulo Date: 2011-04-06 17:38:08 +0000 (Wed, 06 Apr 2011) Log Message: ----------- Add Conformist mapping without use strongly typed method Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ModelMapper.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ClassMappingRegistrationTest.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ModelMapperAddMappingByTypeTests.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ModelMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ModelMapper.cs 2011-04-06 17:05:20 UTC (rev 5624) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ModelMapper.cs 2011-04-06 17:38:08 UTC (rev 5625) @@ -1607,5 +1607,36 @@ thisCustomizerHolder.Merge(otherCustomizerHolder); explicitDeclarationsHolder.Merge(mapping.ExplicitDeclarationsHolder); } + + public void AddMapping(System.Type type) + { + object mappingInstance; + try + { + mappingInstance = Activator.CreateInstance(type); + } + catch (Exception e) + { + throw new MappingException("Unable to instantiate mapping class (see InnerException): " + type, e); + } + + var mapping = mappingInstance as IConformistHoldersProvider; + if(mapping == null) + { + throw new ArgumentOutOfRangeException("type", "The mapping class must be an implementation of IConformistHoldersProvider."); + } + var thisCustomizerHolder = customizerHolder as CustomizersHolder; + if (thisCustomizerHolder == null) + { + throw new NotSupportedException("To merge 'conformist' mappings, the instance of ICustomizersHolder, provided in the ModelMapper constructor, have to be a CustomizersHolder instance."); + } + var otherCustomizerHolder = mapping.CustomizersHolder as CustomizersHolder; + if (otherCustomizerHolder == null) + { + throw new NotSupportedException("The mapping class have to provide a CustomizersHolder instance."); + } + thisCustomizerHolder.Merge(otherCustomizerHolder); + explicitDeclarationsHolder.Merge(mapping.ExplicitDeclarationsHolder); + } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ClassMappingRegistrationTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ClassMappingRegistrationTest.cs 2011-04-06 17:05:20 UTC (rev 5624) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ClassMappingRegistrationTest.cs 2011-04-06 17:38:08 UTC (rev 5625) @@ -49,5 +49,27 @@ hbmProperty.name.Should().Be("Something"); hbmProperty.length.Should().Be("150"); } + + [Test] + public void WhenRegisterClassMappingThroughTypeThenMapTheClass() + { + var mapper = new ModelMapper(); + mapper.AddMapping(typeof(MyClassMap)); + var hbmMapping = mapper.CompileMappingFor(new[] { typeof(MyClass) }); + + var hbmClass = hbmMapping.RootClasses[0]; + hbmClass.Should().Not.Be.Null(); + var hbmId = hbmClass.Id; + hbmId.Should().Not.Be.Null(); + hbmId.name.Should().Be("Id"); + var hbmGenerator = hbmId.generator; + hbmGenerator.Should().Not.Be.Null(); + hbmGenerator.@class.Should().Be("hilo"); + hbmGenerator.param[0].name.Should().Be("max_low"); + hbmGenerator.param[0].GetText().Should().Be("100"); + var hbmProperty = hbmClass.Properties.OfType<HbmProperty>().Single(); + hbmProperty.name.Should().Be("Something"); + hbmProperty.length.Should().Be("150"); + } } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ModelMapperAddMappingByTypeTests.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ModelMapperAddMappingByTypeTests.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ModelMapperAddMappingByTypeTests.cs 2011-04-06 17:38:08 UTC (rev 5625) @@ -0,0 +1,31 @@ +using System; +using NUnit.Framework; +using NHibernate.Mapping.ByCode; +using SharpTestsEx; + +namespace NHibernate.Test.MappingByCode.ExpliticMappingTests.ConformistMappingRegistrationTests +{ + public class ModelMapperAddMappingByTypeTests + { + public class WithOutPublicParameterLessCtor + { + public WithOutPublicParameterLessCtor(string something) + { + } + } + + [Test] + public void WhenRegisterClassMappingThroughTypeThenCheckIConformistHoldersProvider() + { + var mapper = new ModelMapper(); + mapper.Executing(x => x.AddMapping(typeof(object))).Throws<ArgumentOutOfRangeException>().And.ValueOf.Message.Should().Contain("IConformistHoldersProvider"); + } + + [Test] + public void WhenRegisterClassMappingThroughTypeThenCheckParameterLessCtor() + { + var mapper = new ModelMapper(); + mapper.Executing(x => x.AddMapping(typeof(WithOutPublicParameterLessCtor))).Throws<MappingException>(); + } + } +} \ 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-06 17:05:20 UTC (rev 5624) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-06 17:38:08 UTC (rev 5625) @@ -521,6 +521,7 @@ <Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\SubclassSequenceRegistrationTests.cs" /> <Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\UnionSubclassMappingStrategyTests.cs" /> <Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\UnionSubclassSequenceRegistrationTests.cs" /> + <Compile Include="MappingByCode\ExpliticMappingTests\ConformistMappingRegistrationTests\ModelMapperAddMappingByTypeTests.cs" /> <Compile Include="MappingByCode\ExpliticMappingTests\IdBagMappingTest.cs" /> <Compile Include="MappingByCode\ExpliticMappingTests\MappingOfPrivateMembersOnRootEntity.cs" /> <Compile Include="MappingByCode\ExpliticMappingTests\NaturalIdTests.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |