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