From: <fab...@us...> - 2009-05-12 04:53:32
|
Revision: 4282 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4282&view=rev Author: fabiomaulo Date: 2009-05-12 04:53:16 +0000 (Tue, 12 May 2009) Log Message: ----------- Fixing ignored mappings nodes Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapping.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs trunk/nhibernate/src/NHibernate/Mapping/Collection.cs trunk/nhibernate/src/NHibernate/Mapping/MetaAttribute.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/AbstractDecoratable.cs trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IDecoratable.cs trunk/nhibernate/src/NHibernate.Test/MappingTest/NonReflectiveBinderFixture.cs trunk/nhibernate/src/NHibernate.Test/MappingTest/Wicked.cs trunk/nhibernate/src/NHibernate.Test/MappingTest/Wicked.hbm.xml Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/AbstractDecoratable.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/AbstractDecoratable.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/AbstractDecoratable.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using NHibernate.Mapping; +using NHibernate.Util; + +namespace NHibernate.Cfg.MappingSchema +{ + [Serializable] + public abstract class AbstractDecoratable : IDecoratable + { + private static readonly IDictionary<string, MetaAttribute> EmptyMetaData = new CollectionHelper.EmptyMapClass<string, MetaAttribute>(); + + private IDictionary<string, MetaAttribute> mappedMetaData; + private IDictionary<string, MetaAttribute> inheritableMetaData; + + public virtual IDictionary<string, MetaAttribute> MappedMetaData + { + get + { + if (mappedMetaData == null) + { + CreateMappedMetadata(GetMetadataField()); + } + return mappedMetaData; + } + } + + public IDictionary<string, MetaAttribute> InheritableMetaData + { + get + { + if (mappedMetaData == null) + { + CreateMappedMetadata(GetMetadataField()); + } + return inheritableMetaData; + } + } + + protected void CreateMappedMetadata(HbmMeta[] metadatas) + { + if (metadatas == null) + { + mappedMetaData = EmptyMetaData; + inheritableMetaData = EmptyMetaData; + return; + } + mappedMetaData = new Dictionary<string, MetaAttribute>(10); + inheritableMetaData = new Dictionary<string, MetaAttribute>(10); + + foreach (var hbmMeta in metadatas) + { + MetaAttribute attribute; + if (!mappedMetaData.TryGetValue(hbmMeta.attribute, out attribute)) + { + attribute = new MetaAttribute(hbmMeta.attribute); + mappedMetaData[hbmMeta.attribute] = attribute; + if(hbmMeta.inherit) + { + inheritableMetaData[hbmMeta.attribute] = attribute; + } + } + if (hbmMeta.Text != null) + { + attribute.AddValue(string.Concat(hbmMeta.Text)); + } + } + } + + protected abstract HbmMeta[] GetMetadataField(); + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs 2009-05-11 16:27:09 UTC (rev 4281) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -1,6 +1,8 @@ +using System; + namespace NHibernate.Cfg.MappingSchema { - partial class HbmClass + partial class HbmClass: AbstractDecoratable { public HbmId Id { @@ -21,5 +23,10 @@ { get { return Item1 as HbmTimestamp; } } + + protected override HbmMeta[] GetMetadataField() + { + return meta; + } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapping.cs 2009-05-11 16:27:09 UTC (rev 4281) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmMapping.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -1,6 +1,6 @@ namespace NHibernate.Cfg.MappingSchema { - partial class HbmMapping : HbmBase + partial class HbmMapping : AbstractDecoratable { public HbmDatabaseObject[] ListDatabaseObjects() { @@ -11,5 +11,10 @@ { return filterdef ?? new HbmFilterDef[0]; } + + protected override HbmMeta[] GetMetadataField() + { + return meta; + } } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IDecoratable.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IDecoratable.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IDecoratable.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using NHibernate.Mapping; + +namespace NHibernate.Cfg.MappingSchema +{ + public interface IDecoratable + { + IDictionary<string, MetaAttribute> MappedMetaData { get; } + IDictionary<string, MetaAttribute> InheritableMetaData { get; } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs 2009-05-11 16:27:09 UTC (rev 4281) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/Binder.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -1,18 +1,24 @@ using System; +using System.Collections.Generic; using System.IO; using System.Reflection; using System.Xml; using System.Xml.Serialization; using log4net; - +using NHibernate.Mapping; using NHibernate.Util; +using NHibernate.Cfg.MappingSchema; namespace NHibernate.Cfg.XmlHbmBinding { public abstract class Binder { protected static readonly ILog log = LogManager.GetLogger(typeof (Binder)); + + protected static readonly IDictionary<string, MetaAttribute> EmptyMeta = + new CollectionHelper.EmptyMapClass<string, MetaAttribute>(); + protected readonly Mappings mappings; protected Binder(Binder parent) @@ -147,5 +153,48 @@ XmlAttribute att = node.Attributes[attributeName]; return att != null ? att.Value : null; } + + public static IDictionary<string, MetaAttribute> GetMetas(IDecoratable decoratable, IDictionary<string, MetaAttribute> inheritedMeta) + { + return GetMetas(decoratable, inheritedMeta, false); + } + + public static IDictionary<string, MetaAttribute> GetMetas(IDecoratable decoratable, IDictionary<string, MetaAttribute> inheritedMeta, bool onlyInheritable) + { + if(decoratable == null) + { + return EmptyMeta; + } + var map = new Dictionary<string, MetaAttribute>(inheritedMeta); + + IDictionary<string, MetaAttribute> metaAttributes = onlyInheritable + ? decoratable.InheritableMetaData + : decoratable.MappedMetaData; + + foreach (var metaAttribute in metaAttributes) + { + string name = metaAttribute.Key; + + MetaAttribute meta; + MetaAttribute inheritedAttribute; + + map.TryGetValue(name, out meta); + inheritedMeta.TryGetValue(name, out inheritedAttribute); + + if (meta == null) + { + meta = new MetaAttribute(name); + map[name] = meta; + } + else if (meta == inheritedAttribute) + { + // overriding inherited meta attribute. + meta = new MetaAttribute(name); + map[name] = meta; + } + meta.AddValues(metaAttribute.Value.Values); + } + return map; + } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-05-11 16:27:09 UTC (rev 4281) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -16,26 +16,26 @@ protected readonly Dialect.Dialect dialect; protected readonly XmlNamespaceManager namespaceManager; - public ClassBinder(Binder parent, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) + protected ClassBinder(Binder parent, XmlNamespaceManager namespaceManager, Dialect.Dialect dialect) : base(parent) { this.dialect = dialect; this.namespaceManager = namespaceManager; } - public ClassBinder(ClassBinder parent) + protected ClassBinder(ClassBinder parent) : base(parent) { dialect = parent.dialect; namespaceManager = parent.namespaceManager; } - protected void PropertiesFromXML(XmlNode node, PersistentClass model) + protected void PropertiesFromXML(XmlNode node, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas) { - PropertiesFromXML(node, model, null, true, true, false); + PropertiesFromXML(node, model, inheritedMetas, null, true, true, false); } - protected void PropertiesFromXML(XmlNode node, PersistentClass model, UniqueKey uniqueKey, bool mutable, bool nullable, bool naturalId) + protected void PropertiesFromXML(XmlNode node, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas, UniqueKey uniqueKey, bool mutable, bool nullable, bool naturalId) { string entityName = model.EntityName; @@ -119,7 +119,7 @@ mutableId = "true".Equals(subnode.Attributes["mutable"]); } - PropertiesFromXML(subnode, model, uk, mutableId, false, true); + PropertiesFromXML(subnode, model, inheritedMetas, uk, mutableId, false, true); table.AddUniqueKey(uk); } @@ -137,7 +137,7 @@ } } - protected void BindClass(XmlNode node, PersistentClass model) + protected void BindClass(XmlNode node, IDecoratable classMapping, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas) { // transfer an explicitly defined entity name // handle the lazy attribute @@ -160,10 +160,10 @@ BindXmlRepresentation(node, model); BindMapRepresentation(node, model); - BindPersistentClassCommonValues(node, model); + BindPersistentClassCommonValues(node, classMapping, model, inheritedMetas); } - private void BindPersistentClassCommonValues(XmlNode node, PersistentClass model) + private void BindPersistentClassCommonValues(XmlNode node, IDecoratable classMapping, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas) { // DISCRIMINATOR XmlAttribute discriminatorNode = node.Attributes["discriminator-value"]; @@ -201,7 +201,7 @@ model.OptimisticLockMode = GetOptimisticLockMode(olNode); // META ATTRIBUTES - model.MetaAttributes = GetMetas(node); + model.MetaAttributes = GetMetas(classMapping, inheritedMetas); // PERSISTER XmlAttribute persisterNode = node.Attributes["persister"]; Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs 2009-05-11 16:27:09 UTC (rev 4281) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -215,14 +215,7 @@ if (!sortedAtt.Value.Equals("natural")) { string comparatorClassName = FullQualifiedClassName(sortedAtt.Value, mappings); - try - { - model.Comparer = Activator.CreateInstance(ReflectHelper.ClassForName(comparatorClassName)); - } - catch - { - throw new MappingException("could not instantiate comparer class: " + comparatorClassName); - } + model.ComparerClassName = comparatorClassName; } } Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs 2009-05-11 16:27:09 UTC (rev 4281) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -27,7 +27,7 @@ { JoinedSubclass subclass = new JoinedSubclass(model); - BindClass(subnode, subclass); + BindClass(subnode, null, subclass, EmptyMeta); // joined subclass if (subclass.EntityPersisterClass == null) @@ -70,7 +70,7 @@ mytable.AddCheckConstraint(chNode.Value); // properties - PropertiesFromXML(subnode, subclass); + PropertiesFromXML(subnode, subclass, EmptyMeta); model.AddSubclass(subclass); mappings.AddClass(subclass); Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs 2009-05-11 16:27:09 UTC (rev 4281) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -23,13 +23,16 @@ public void Bind(XmlNode node) { - HbmMapping mappingSchema = Deserialize<HbmMapping>(node); + IDictionary<string, MetaAttribute> inheritedMetas = EmptyMeta; + var mappingSchema = Deserialize<HbmMapping>(node); + // get meta's from <hibernate-mapping> + inheritedMetas = GetMetas(mappingSchema, inheritedMetas, true); SetMappingsProperties(mappingSchema); AddFilterDefinitions(mappingSchema); AddTypeDefs(mappingSchema); - AddRootClasses(node); + AddRootClasses(node, inheritedMetas); AddSubclasses(node); AddJoinedSubclasses(node); AddUnionSubclasses(node); @@ -62,12 +65,12 @@ } } - private void AddRootClasses(XmlNode parentNode) + private void AddRootClasses(XmlNode parentNode, IDictionary<string, MetaAttribute> inheritedMetas) { RootClassBinder binder = new RootClassBinder(this, namespaceManager, dialect); foreach (XmlNode node in parentNode.SelectNodes(HbmConstants.nsClass, namespaceManager)) - binder.Bind(node, Deserialize<HbmClass>(node)); + binder.Bind(node, Deserialize<HbmClass>(node), inheritedMetas); } private void AddUnionSubclasses(XmlNode parentNode) Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-05-11 16:27:09 UTC (rev 4281) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -13,10 +13,11 @@ { } - public void Bind(XmlNode node, HbmClass classSchema) + public void Bind(XmlNode node, HbmClass classSchema, IDictionary<string, MetaAttribute> inheritedMetas) { RootClass rootClass = new RootClass(); - BindClass(node, rootClass); + BindClass(node, classSchema, rootClass, inheritedMetas); + inheritedMetas = GetMetas(classSchema, inheritedMetas, true); // get meta's from <class> //TABLENAME string schema = classSchema.schema ?? mappings.SchemaName; @@ -51,7 +52,8 @@ BindVersion(classSchema.Version, rootClass, table); rootClass.CreatePrimaryKey(dialect); - PropertiesFromXML(node, rootClass); + + PropertiesFromXML(node, rootClass, inheritedMetas); mappings.AddClass(rootClass); } Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs 2009-05-11 16:27:09 UTC (rev 4281) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -27,7 +27,7 @@ { Subclass subclass = new SingleTableSubclass(model); - BindClass(subnode, subclass); + BindClass(subnode, null, subclass, EmptyMeta); if (subclass.EntityPersisterClass == null) subclass.RootClazz.EntityPersisterClass = typeof(SingleTableEntityPersister); @@ -35,7 +35,7 @@ log.InfoFormat("Mapping subclass: {0} -> {1}", subclass.EntityName, subclass.Table.Name); // properties - PropertiesFromXML(subnode, subclass); + PropertiesFromXML(subnode, subclass, EmptyMeta); model.AddSubclass(subclass); mappings.AddClass(subclass); Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs 2009-05-11 16:27:09 UTC (rev 4281) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -26,7 +26,7 @@ { UnionSubclass unionSubclass = new UnionSubclass(model); - BindClass(subnode, unionSubclass); + BindClass(subnode, null, unionSubclass, EmptyMeta); // union subclass if (unionSubclass.EntityPersisterClass == null) @@ -47,7 +47,7 @@ log.InfoFormat("Mapping union-subclass: {0} -> {1}", unionSubclass.EntityName, unionSubclass.Table.Name); // properties - PropertiesFromXML(subnode, unionSubclass); + PropertiesFromXML(subnode, unionSubclass, EmptyMeta); model.AddSubclass(unionSubclass); mappings.AddClass(unionSubclass); Modified: trunk/nhibernate/src/NHibernate/Mapping/Collection.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/Collection.cs 2009-05-11 16:27:09 UTC (rev 4281) +++ trunk/nhibernate/src/NHibernate/Mapping/Collection.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -150,10 +150,27 @@ // both IComparer and IComparer<T>. public object Comparer { - get { return comparer; } + get + { + if (comparer == null && !string.IsNullOrEmpty(ComparerClassName)) + { + try + { + comparer = Activator.CreateInstance(ReflectHelper.ClassForName(ComparerClassName)); + } + catch + { + throw new MappingException("Could not instantiate comparator class [" + ComparerClassName + "] for collection " + Role); + } + } + return comparer; + } + set { comparer = value; } } + public string ComparerClassName { get; set; } + public bool IsLazy { get { return lazy; } Modified: trunk/nhibernate/src/NHibernate/Mapping/MetaAttribute.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/MetaAttribute.cs 2009-05-11 16:27:09 UTC (rev 4281) +++ trunk/nhibernate/src/NHibernate/Mapping/MetaAttribute.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -49,6 +49,11 @@ values.Add(value); } + public void AddValues(IEnumerable<string> range) + { + values.AddRange(range); + } + public override string ToString() { return string.Format("[{0}={1}]", name, CollectionPrinter.ToString(values)); Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-05-11 16:27:09 UTC (rev 4281) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-05-12 04:53:16 UTC (rev 4282) @@ -454,6 +454,8 @@ <Compile Include="Bytecode\HibernateByteCodeException.cs" /> <Compile Include="Bytecode\ProxyFactoryFactoryNotConfiguredException.cs" /> <Compile Include="Bytecode\UnableToLoadProxyFactoryFactoryException.cs" /> + <Compile Include="Cfg\MappingSchema\AbstractDecoratable.cs" /> + <Compile Include="Cfg\MappingSchema\IDecoratable.cs" /> <Compile Include="Criterion\IPropertyProjection.cs" /> <Compile Include="Dialect\MsSql2008Dialect.cs" /> <Compile Include="Dialect\InformixDialect0940.cs" /> Added: trunk/nhibernate/src/NHibernate.Test/MappingTest/NonReflectiveBinderFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingTest/NonReflectiveBinderFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingTest/NonReflectiveBinderFixture.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -0,0 +1,51 @@ +using NHibernate.Cfg; +using NHibernate.Mapping; +using NUnit.Framework; + +namespace NHibernate.Test.MappingTest +{ + [TestFixture] + public class NonReflectiveBinderFixture + { + // so far we are using this test to check metadata + // TODO: fix the test to work without class implementations + // all infos coming from XML should be solved Mapping classes and not + // during parse. + + private Configuration cfg; + + [TestFixtureSetUp] + public void SetUp() + { + cfg = new Configuration() + .AddResource("NHibernate.Test.MappingTest.Wicked.hbm.xml", GetType().Assembly); + cfg.BuildMappings(); + } + + [TestFixtureTearDown] + public void TearDown() + { + cfg = null; + } + + [Test] + public void MetaInheritance() + { + PersistentClass cm = cfg.GetClassMapping("NHibernate.Test.MappingTest.Wicked"); + var m = cm.MetaAttributes; + Assert.That(m, Is.Not.Null); + Assert.That(cm.GetMetaAttribute("global"), Is.Not.Null); + Assert.That(cm.GetMetaAttribute("globalnoinherit"), Is.Null); + } + + [Test] + public void Comparator() + { + PersistentClass cm = cfg.GetClassMapping("NHibernate.Test.MappingTest.Wicked"); + + Property property = cm.GetProperty("SortedEmployee"); + var col = (Mapping.Collection)property.Value; + Assert.That(col.ComparerClassName, Text.StartsWith("NHibernate.Test.MappingTest.NonExistingComparator")); + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/MappingTest/Wicked.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingTest/Wicked.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingTest/Wicked.cs 2009-05-12 04:53:16 UTC (rev 4282) @@ -0,0 +1,25 @@ +using System.Collections; +using Iesi.Collections; + +namespace NHibernate.Test.MappingTest +{ + public class Wicked + { + public int Id { get; set; } + public int VersionProp { get; set; } + public ISet SortedEmployee { get; set; } + public IList AnotherSet { get; set; } + } + + public class MonetaryAmount + { + public string X { get; set; } + } + + public class Employee + { + public int Id { get; set; } + public string Emp { get; set; } + public Employee Empinone { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/MappingTest/Wicked.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingTest/Wicked.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingTest/Wicked.hbm.xml 2009-05-12 04:53:16 UTC (rev 4282) @@ -0,0 +1,60 @@ +<?xml version="1.0"?> +<!-- Mapping document mainly used for testing non-reflective Binder + meta inheritance --> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false" + assembly="NHibernate.Test" + namespace="NHibernate.Test.MappingTest"> + <meta attribute="global">global value</meta> + <meta attribute="globalnoinherit" inherit="false">only visible at top level</meta> + <meta attribute="globalmutated">top level</meta> + + <class name="Wicked" + table="WICKED" + schema="HR"> + <meta attribute="implements">IObserver</meta> + <meta attribute="implements">IObserver</meta> + <meta attribute="implements" inherit="false">Foo.BogusVisitor</meta> + <meta attribute="extends">AuditInfo</meta> + <meta attribute="globalmutated">wicked level</meta> + <id name="Id" + column="EMPLOYEE_ID"> + <generator class="assigned"/> + </id> + <version name="VersionProp"/> + <component name="component" class="MonetaryAmount"> + <meta attribute="componentonly" inherit="true"/> + <meta attribute="implements">AnotherInterface</meta> + <meta attribute="allcomponent"/> + <meta attribute="globalmutated">monetaryamount level</meta> + <property name="X"> + <meta attribute="globalmutated">monetaryamount x level</meta> + </property> + </component> + + <set name="SortedEmployee" sort="NonExistingComparator"> + <meta attribute="globalmutated">sortedemployee level</meta> + <key column="attrb_id"/> + <many-to-many class="Employee" column="id"/> + </set> + + <bag name="AnotherSet"> + <key column="attrb2_id"/> + <composite-element class="Employee"> + <meta attribute="globalmutated">monetaryamount anotherSet composite level</meta> + <property name="Emp" type="string"> + <meta attribute="globalmutated">monetaryamount anotherSet composite property emp level</meta> + </property> + <many-to-one name="Empinone" class="Employee"> + <meta attribute="globalmutated">monetaryamount anotherSet composite property empinone level</meta> + </many-to-one> + </composite-element> + </bag> + + </class> + + <class name="Employee"> + <id name="Id"> + <generator class="assigned"/> + </id> + </class> +</hibernate-mapping> + Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-05-11 16:27:09 UTC (rev 4281) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-05-12 04:53:16 UTC (rev 4282) @@ -325,6 +325,8 @@ <Compile Include="HQL\Ast\WithClauseFixture.cs" /> <Compile Include="HQL\Ast\Zoo.cs" /> <Compile Include="HQL\BaseFunctionFixture.cs" /> + <Compile Include="MappingTest\NonReflectiveBinderFixture.cs" /> + <Compile Include="MappingTest\Wicked.cs" /> <Compile Include="NHSpecificTest\Dates\TimeFixture.cs" /> <Compile Include="NHSpecificTest\DtcFailures\DtcFailuresFixture.cs" /> <Compile Include="NHSpecificTest\DtcFailures\Person.cs" /> @@ -1766,6 +1768,7 @@ <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <EmbeddedResource Include="BulkManipulation\SimpleClass.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="MappingTest\Wicked.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1393\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1391\Mappings.hbm.xml" /> <EmbeddedResource Include="HQL\Ast\Animal.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |