|
From: <fab...@us...> - 2009-11-29 00:01:11
|
Revision: 4869
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4869&view=rev
Author: fabiomaulo
Date: 2009-11-29 00:00:57 +0000 (Sun, 29 Nov 2009)
Log Message:
-----------
Binders refactoring
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs
trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.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/Table.cs
trunk/nhibernate/src/NHibernate/NHibernate.csproj
trunk/nhibernate/src/NHibernate/Util/StringHelper.cs
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmExtensions.cs
trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs
trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs
trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs
trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityDiscriminableMapping.cs
trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMapping.cs
trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntitySqlsMapping.cs
Removed Paths:
-------------
trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMetadata.cs
Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs 2009-11-28 21:09:24 UTC (rev 4868)
+++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmClass.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -1,8 +1,6 @@
-using System;
-
namespace NHibernate.Cfg.MappingSchema
{
- partial class HbmClass: AbstractDecoratable
+ partial class HbmClass : AbstractDecoratable, IEntityMapping, IEntityDiscriminableMapping
{
public HbmId Id
{
@@ -24,9 +22,111 @@
get { return Item1 as HbmTimestamp; }
}
+ #region Implementation of IEntityMapping
+
protected override HbmMeta[] Metadatas
{
get { return meta ?? new HbmMeta[0]; }
}
+
+ public string EntityName
+ {
+ get { return entityname; }
+ }
+
+ public string Name
+ {
+ get { return name; }
+ }
+
+ public string Node
+ {
+ get { return node; }
+ }
+
+ public string Proxy
+ {
+ get { return proxy; }
+ }
+
+ public bool? UseLazy
+ {
+ get { return lazySpecified ? lazy : (bool?)null; }
+ }
+
+ public HbmTuplizer[] Tuplizers
+ {
+ get { return tuplizer ?? new HbmTuplizer[0]; }
+ }
+
+ public bool DynamicUpdate
+ {
+ get { return dynamicupdate; }
+ }
+
+ public bool DynamicInsert
+ {
+ get { return dynamicinsert; }
+ }
+
+ public int? BatchSize
+ {
+ get { return batchsizeSpecified ? batchsize : (int?) null; }
+ }
+
+ public bool SelectBeforeUpdate
+ {
+ get { return selectbeforeupdate; }
+ }
+
+ public string Persister
+ {
+ get { return persister; }
+ }
+
+ public bool? IsAbstract
+ {
+ get { return abstractSpecified ? @abstract : (bool?) null; }
+ }
+
+ public HbmSynchronize[] Synchronize
+ {
+ get { return synchronize ?? new HbmSynchronize[0]; }
+ }
+
+ #endregion
+
+ #region Implementation of IEntityDiscriminableMapping
+
+ public string DiscriminatorValue
+ {
+ get { return discriminatorvalue; }
+ }
+
+ #endregion
+
+ #region Implementation of IEntitySqlsMapping
+
+ public HbmLoader SqlLoader
+ {
+ get { return loader; }
+ }
+
+ public HbmCustomSQL SqlInsert
+ {
+ get { return sqlinsert; }
+ }
+
+ public HbmCustomSQL SqlUpdate
+ {
+ get { return sqlupdate; }
+ }
+
+ public HbmCustomSQL SqlDelete
+ {
+ get { return sqldelete; }
+ }
+
+ #endregion
}
}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmExtensions.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmExtensions.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmExtensions.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -0,0 +1,25 @@
+using System;
+using NHibernate.Engine;
+
+namespace NHibernate.Cfg.MappingSchema
+{
+ public static class HbmExtensions
+ {
+ public static Versioning.OptimisticLock ToOptimisticLock(this HbmOptimisticLockMode hbmOptimisticLockMode)
+ {
+ switch (hbmOptimisticLockMode)
+ {
+ case HbmOptimisticLockMode.None:
+ return Versioning.OptimisticLock.None;
+ case HbmOptimisticLockMode.Version:
+ return Versioning.OptimisticLock.Version;
+ case HbmOptimisticLockMode.Dirty:
+ return Versioning.OptimisticLock.Dirty;
+ case HbmOptimisticLockMode.All:
+ return Versioning.OptimisticLock.All;
+ default:
+ return Versioning.OptimisticLock.Version;
+ }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmJoinedSubclass.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -0,0 +1,106 @@
+namespace NHibernate.Cfg.MappingSchema
+{
+ public partial class HbmJoinedSubclass : AbstractDecoratable, IEntityMapping
+ {
+ #region Overrides of AbstractDecoratable
+
+ protected override HbmMeta[] Metadatas
+ {
+ get { return meta ?? new HbmMeta[0]; }
+ }
+
+ #endregion
+
+ #region Implementation of IEntityMapping
+
+ public string EntityName
+ {
+ get { return entityname; }
+ }
+
+ public string Name
+ {
+ get { return name; }
+ }
+
+ public string Node
+ {
+ get { return node; }
+ }
+
+ public string Proxy
+ {
+ get { return proxy; }
+ }
+
+ public bool? UseLazy
+ {
+ get { return lazySpecified ? lazy : (bool?)null; }
+ }
+
+ public HbmTuplizer[] Tuplizers
+ {
+ get { return tuplizer ?? new HbmTuplizer[0]; }
+ }
+ public bool DynamicUpdate
+ {
+ get { return dynamicupdate; }
+ }
+
+ public bool DynamicInsert
+ {
+ get { return dynamicinsert; }
+ }
+
+ public int? BatchSize
+ {
+ get { return !string.IsNullOrEmpty(batchsize) ? int.Parse(batchsize) : (int?)null; }
+ }
+
+ public bool SelectBeforeUpdate
+ {
+ get { return selectbeforeupdate; }
+ }
+
+ public string Persister
+ {
+ get { return persister; }
+ }
+
+ public bool? IsAbstract
+ {
+ get { return abstractSpecified ? @abstract : (bool?)null; }
+ }
+
+ public HbmSynchronize[] Synchronize
+ {
+ get { return synchronize ?? new HbmSynchronize[0]; }
+ }
+
+ #endregion
+
+ #region Implementation of IEntitySqlsMapping
+
+ public HbmLoader SqlLoader
+ {
+ get { return loader; }
+ }
+
+ public HbmCustomSQL SqlInsert
+ {
+ get { return sqlinsert; }
+ }
+
+ public HbmCustomSQL SqlUpdate
+ {
+ get { return sqlupdate; }
+ }
+
+ public HbmCustomSQL SqlDelete
+ {
+ get { return sqldelete; }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmSubclass.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -0,0 +1,117 @@
+namespace NHibernate.Cfg.MappingSchema
+{
+ public partial class HbmSubclass : AbstractDecoratable, IEntityMapping, IEntityDiscriminableMapping
+ {
+ #region Overrides of AbstractDecoratable
+
+ protected override HbmMeta[] Metadatas
+ {
+ get { return meta ?? new HbmMeta[0]; }
+ }
+
+ #endregion
+
+ #region Implementation of IEntityMapping
+
+ public string EntityName
+ {
+ get { return entityname; }
+ }
+
+ public string Name
+ {
+ get { return name; }
+ }
+
+ public string Node
+ {
+ get { return node; }
+ }
+
+ public string Proxy
+ {
+ get { return proxy; }
+ }
+
+ public bool? UseLazy
+ {
+ get { return lazySpecified ? lazy : (bool?)null; }
+ }
+
+ public HbmTuplizer[] Tuplizers
+ {
+ get { return tuplizer ?? new HbmTuplizer[0]; }
+ }
+
+ public bool DynamicUpdate
+ {
+ get { return dynamicupdate; }
+ }
+
+ public bool DynamicInsert
+ {
+ get { return dynamicinsert; }
+ }
+
+ public int? BatchSize
+ {
+ get { return !string.IsNullOrEmpty(batchsize) ? int.Parse(batchsize) : (int?)null; }
+ }
+
+ public bool SelectBeforeUpdate
+ {
+ get { return selectbeforeupdate; }
+ }
+
+ public string Persister
+ {
+ get { return persister; }
+ }
+
+ public bool? IsAbstract
+ {
+ get { return abstractSpecified ? @abstract : (bool?)null; }
+ }
+
+ public HbmSynchronize[] Synchronize
+ {
+ get { return synchronize ?? new HbmSynchronize[0]; }
+ }
+
+ #endregion
+
+ #region Implementation of IEntityDiscriminableMapping
+
+ public string DiscriminatorValue
+ {
+ get { return discriminatorvalue; }
+ }
+
+ #endregion
+
+ #region Implementation of IEntitySqlsMapping
+
+ public HbmLoader SqlLoader
+ {
+ get { return loader; }
+ }
+
+ public HbmCustomSQL SqlInsert
+ {
+ get { return sqlinsert; }
+ }
+
+ public HbmCustomSQL SqlUpdate
+ {
+ get { return sqlupdate; }
+ }
+
+ public HbmCustomSQL SqlDelete
+ {
+ get { return sqldelete; }
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/HbmUnionSubclass.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -0,0 +1,108 @@
+namespace NHibernate.Cfg.MappingSchema
+{
+ public partial class HbmUnionSubclass : AbstractDecoratable, IEntityMapping
+ {
+ #region Overrides of AbstractDecoratable
+
+ protected override HbmMeta[] Metadatas
+ {
+ get { return meta ?? new HbmMeta[0]; }
+ }
+
+ #endregion
+
+ #region Implementation of IEntityMapping
+
+ public string EntityName
+ {
+ get { return entityname; }
+ }
+
+ public string Name
+ {
+ get { return name; }
+ }
+
+ public string Node
+ {
+ get { return node; }
+ }
+
+ public string Proxy
+ {
+ get { return proxy; }
+ }
+
+ public bool? UseLazy
+ {
+ get { return lazySpecified ? lazy : (bool?)null; }
+ }
+
+ public HbmTuplizer[] Tuplizers
+ {
+ get { return tuplizer ?? new HbmTuplizer[0]; }
+ }
+
+ public bool DynamicUpdate
+ {
+ get { return dynamicupdate; }
+ }
+
+ public bool DynamicInsert
+ {
+ get { return dynamicinsert; }
+ }
+
+ public int? BatchSize
+ {
+ get { return !string.IsNullOrEmpty(batchsize) ? int.Parse(batchsize) : (int?)null; }
+ }
+
+ public bool SelectBeforeUpdate
+ {
+ get { return selectbeforeupdate; }
+ }
+
+ public string Persister
+ {
+ get { return persister; }
+ }
+
+ public bool? IsAbstract
+ {
+ get { return abstractSpecified ? @abstract : (bool?)null; }
+ }
+
+ public HbmSynchronize[] Synchronize
+ {
+ get { return synchronize ?? new HbmSynchronize[0]; }
+ }
+
+ #endregion
+
+ #region Implementation of IEntitySqlsMapping
+
+ public HbmLoader SqlLoader
+ {
+ get { return loader; }
+ }
+
+ public HbmCustomSQL SqlInsert
+ {
+ get { return sqlinsert; }
+ }
+
+ public HbmCustomSQL SqlUpdate
+ {
+ get { return sqlupdate; }
+ }
+
+ public HbmCustomSQL SqlDelete
+ {
+ get { return sqldelete; }
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityDiscriminableMapping.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityDiscriminableMapping.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityDiscriminableMapping.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -0,0 +1,7 @@
+namespace NHibernate.Cfg.MappingSchema
+{
+ public interface IEntityDiscriminableMapping
+ {
+ string DiscriminatorValue { get; }
+ }
+}
\ No newline at end of file
Copied: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMapping.cs (from rev 4867, trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMetadata.cs)
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMapping.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMapping.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -0,0 +1,19 @@
+namespace NHibernate.Cfg.MappingSchema
+{
+ public interface IEntityMapping : IDecoratable, IEntitySqlsMapping
+ {
+ string EntityName { get; }
+ string Name { get; }
+ string Node { get; }
+ string Proxy { get; }
+ bool? UseLazy { get; }
+ HbmTuplizer[] Tuplizers { get; }
+ bool DynamicUpdate { get; }
+ bool DynamicInsert { get; }
+ int? BatchSize { get; }
+ bool SelectBeforeUpdate { get; }
+ string Persister { get; }
+ bool? IsAbstract { get; }
+ HbmSynchronize[] Synchronize { get; }
+ }
+}
\ No newline at end of file
Deleted: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMetadata.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMetadata.cs 2009-11-28 21:09:24 UTC (rev 4868)
+++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntityMetadata.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -1,7 +0,0 @@
-namespace NHibernate.Cfg.MappingSchema
-{
- public interface IEntityMetadata
- {
-
- }
-}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntitySqlsMapping.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntitySqlsMapping.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Cfg/MappingSchema/IEntitySqlsMapping.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -0,0 +1,10 @@
+namespace NHibernate.Cfg.MappingSchema
+{
+ public interface IEntitySqlsMapping
+ {
+ HbmLoader SqlLoader { get; }
+ HbmCustomSQL SqlInsert { get; }
+ HbmCustomSQL SqlUpdate { get; }
+ HbmCustomSQL SqlDelete { get; }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-28 21:09:24 UTC (rev 4868)
+++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassBinder.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Linq;
using System.Text;
using System.Xml;
using NHibernate.Cfg.MappingSchema;
@@ -96,13 +97,13 @@
model.AddJoin(join);
}
else if ("subclass".Equals(name))
- new SubclassBinder(this).HandleSubclass(model, subnode, inheritedMetas);
+ new SubclassBinder(this).HandleSubclass(model, subnode, Deserialize<HbmSubclass>(subnode) , inheritedMetas);
else if ("joined-subclass".Equals(name))
- new JoinedSubclassBinder(this).HandleJoinedSubclass(model, subnode, inheritedMetas);
+ new JoinedSubclassBinder(this).HandleJoinedSubclass(model, subnode, Deserialize<HbmJoinedSubclass>(subnode), inheritedMetas);
else if ("union-subclass".Equals(name))
- new UnionSubclassBinder(this).HandleUnionSubclass(model, subnode, inheritedMetas);
+ new UnionSubclassBinder(this).HandleUnionSubclass(model, subnode, Deserialize<HbmUnionSubclass>(subnode), inheritedMetas);
else if ("filter".Equals(name))
ParseFilter(subnode, model);
@@ -137,18 +138,15 @@
}
}
- protected void BindClass(XmlNode node, IDecoratable classMapping, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas)
+ protected void BindClass(IEntityMapping classMapping, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas)
{
- // transfer an explicitly defined entity name
// handle the lazy attribute
- XmlAttribute lazyNode = node.Attributes["lazy"];
- bool lazy = lazyNode == null ? mappings.DefaultLazy : "true".Equals(lazyNode.Value);
// go ahead and set the lazy here, since pojo.proxy can override it.
- model.IsLazy = lazy;
+ model.IsLazy = classMapping.UseLazy.HasValue ? classMapping.UseLazy.Value : mappings.DefaultLazy;
- string entityName = (node.Attributes["entity-name"] != null ? node.Attributes["entity-name"].Value : null)
- ??
- ClassForNameChecked(node.Attributes["name"].Value, mappings, "persistent class {0} not found").
+ // transfer an explicitly defined entity name
+ string entityName = classMapping.EntityName ??
+ ClassForNameChecked(classMapping.Name, mappings, "persistent class {0} not found").
FullName;
if (entityName == null)
{
@@ -156,26 +154,24 @@
}
model.EntityName = entityName;
- BindPocoRepresentation(node, model);
- BindXmlRepresentation(node, model);
- BindMapRepresentation(node, model);
+ BindPocoRepresentation(classMapping, model);
+ BindXmlRepresentation(classMapping, model);
+ BindMapRepresentation(classMapping, model);
- BindPersistentClassCommonValues(node, classMapping, model, inheritedMetas);
+ BindPersistentClassCommonValues(classMapping, model, inheritedMetas);
}
- private void BindPersistentClassCommonValues(XmlNode node, IDecoratable classMapping, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas)
+ private void BindPersistentClassCommonValues(IEntityMapping classMapping, PersistentClass model, IDictionary<string, MetaAttribute> inheritedMetas)
{
// DISCRIMINATOR
- XmlAttribute discriminatorNode = node.Attributes["discriminator-value"];
- model.DiscriminatorValue = (discriminatorNode == null) ? model.EntityName : discriminatorNode.Value;
+ var discriminable = classMapping as IEntityDiscriminableMapping;
+ model.DiscriminatorValue = (discriminable == null || string.IsNullOrEmpty(discriminable.DiscriminatorValue)) ? model.EntityName : discriminable.DiscriminatorValue;
// DYNAMIC UPDATE
- XmlAttribute dynamicNode = node.Attributes["dynamic-update"];
- model.DynamicUpdate = (dynamicNode == null) ? false : "true".Equals(dynamicNode.Value);
+ model.DynamicUpdate = classMapping.DynamicUpdate;
// DYNAMIC INSERT
- XmlAttribute insertNode = node.Attributes["dynamic-insert"];
- model.DynamicInsert = (insertNode == null) ? false : "true".Equals(insertNode.Value);
+ model.DynamicInsert = classMapping.DynamicInsert;
// IMPORT
// For entities, the EntityName is the key to find a persister
@@ -187,102 +183,81 @@
mappings.AddImport(qualifiedName, StringHelper.Unqualify(model.EntityName));
// BATCH SIZE
- XmlAttribute batchNode = node.Attributes["batch-size"];
- if (batchNode != null)
- model.BatchSize = int.Parse(batchNode.Value);
+ if (classMapping.BatchSize.HasValue)
+ model.BatchSize = classMapping.BatchSize.Value;
// SELECT BEFORE UPDATE
- XmlAttribute sbuNode = node.Attributes["select-before-update"];
- if (sbuNode != null)
- model.SelectBeforeUpdate = "true".Equals(sbuNode.Value);
+ model.SelectBeforeUpdate = classMapping.SelectBeforeUpdate;;
- // OPTIMISTIC LOCK MODE
- XmlAttribute olNode = node.Attributes["optimistic-lock"];
- model.OptimisticLockMode = GetOptimisticLockMode(olNode);
+ // OPTIMISTIC LOCK MODE (hack)
+ var hbmClass = classMapping as HbmClass;
+ if(hbmClass != null)
+ {
+ model.OptimisticLockMode = hbmClass.optimisticlock.ToOptimisticLock();
+ }
// META ATTRIBUTES
- model.MetaAttributes = classMapping != null
- ? GetMetas(classMapping, inheritedMetas)
- : GetMetas(node.SelectNodes(HbmConstants.nsMeta, namespaceManager), inheritedMetas);
+ model.MetaAttributes = GetMetas(classMapping, inheritedMetas);
// PERSISTER
- XmlAttribute persisterNode = node.Attributes["persister"];
- if (persisterNode == null)
- {
- //persister = typeof( EntityPersister );
- }
- else
- model.EntityPersisterClass = ClassForNameChecked(persisterNode.Value, mappings,
+ if(!string.IsNullOrEmpty(classMapping.Persister))
+ model.EntityPersisterClass = ClassForNameChecked(classMapping.Persister, mappings,
"could not instantiate persister class: {0}");
// CUSTOM SQL
- HandleCustomSQL(node, model);
+ HandleCustomSQL(classMapping, model);
- foreach (XmlNode syncNode in node.SelectNodes(HbmConstants.nsSynchronize, namespaceManager))
- model.AddSynchronizedTable(XmlHelper.GetAttributeValue(syncNode, "table"));
-
- bool? isAbstract = null;
- XmlAttribute abstractNode = node.Attributes["abstract"];
- if (abstractNode != null)
+ foreach (var synchronize in classMapping.Synchronize)
{
- if ("true".Equals(abstractNode.Value) || "1".Equals(abstractNode.Value))
- isAbstract = true;
- else if ("false".Equals(abstractNode.Value) || "0".Equals(abstractNode.Value))
- isAbstract = false;
+ model.AddSynchronizedTable(synchronize.table);
}
- model.IsAbstract = isAbstract;
+
+ model.IsAbstract = classMapping.IsAbstract;
}
- private void BindMapRepresentation(XmlNode node, PersistentClass entity)
+ private void BindMapRepresentation(IEntityMapping classMapping, PersistentClass entity)
{
- XmlNode tuplizer = LocateTuplizerDefinition(node, EntityMode.Map);
+ HbmTuplizer tuplizer = classMapping.Tuplizers.FirstOrDefault(tp => tp.entitymode == HbmTuplizerEntitymode.DynamicMap);
if (tuplizer != null)
{
- string tupClassName = FullQualifiedClassName(tuplizer.Attributes["class"].Value, mappings);
+ string tupClassName = FullQualifiedClassName(tuplizer.@class, mappings);
entity.AddTuplizer(EntityMode.Map, tupClassName);
}
}
- private void BindXmlRepresentation(XmlNode node, PersistentClass entity)
+ private void BindXmlRepresentation(IEntityMapping classMapping, PersistentClass entity)
{
- string nodeName = null;
- XmlAttribute nodeAtt = node.Attributes["node"];
- if(nodeAtt != null)
- nodeName = nodeAtt.Value;
- if (nodeName == null)
- nodeName = StringHelper.Unqualify(entity.EntityName);
- entity.NodeName = nodeName;
+ entity.NodeName = string.IsNullOrEmpty(classMapping.Node) ? StringHelper.Unqualify(entity.EntityName): classMapping.Node;
- XmlNode tuplizer = LocateTuplizerDefinition(node, EntityMode.Xml);
+ HbmTuplizer tuplizer = classMapping.Tuplizers.FirstOrDefault(tp => tp.entitymode == HbmTuplizerEntitymode.Xml);
if (tuplizer != null)
{
- string tupClassName = FullQualifiedClassName(tuplizer.Attributes["class"].Value, mappings);
+ string tupClassName = FullQualifiedClassName(tuplizer.@class, mappings);
entity.AddTuplizer(EntityMode.Xml, tupClassName);
}
}
- private void BindPocoRepresentation(XmlNode node, PersistentClass entity)
+ private void BindPocoRepresentation(IEntityMapping classMapping, PersistentClass entity)
{
- string className = node.Attributes["name"] == null
+ string className = classMapping.Name == null
? null
- : ClassForNameChecked(node.Attributes["name"].Value, mappings, "persistent class {0} not found").
+ : ClassForNameChecked(classMapping.Name, mappings, "persistent class {0} not found").
AssemblyQualifiedName;
entity.ClassName = className;
- XmlAttribute proxyNode = node.Attributes["proxy"];
- if (proxyNode != null)
+ if (!string.IsNullOrEmpty(classMapping.Proxy))
{
- entity.ProxyInterfaceName = ClassForNameChecked(proxyNode.Value, mappings, "proxy class not found: {0}").AssemblyQualifiedName;
+ entity.ProxyInterfaceName = ClassForNameChecked(classMapping.Proxy, mappings, "proxy class not found: {0}").AssemblyQualifiedName;
entity.IsLazy = true;
}
else if (entity.IsLazy)
entity.ProxyInterfaceName = className;
- XmlNode tuplizer = LocateTuplizerDefinition(node, EntityMode.Poco);
+ HbmTuplizer tuplizer = classMapping.Tuplizers.FirstOrDefault(tp=> tp.entitymode == HbmTuplizerEntitymode.Poco);
if (tuplizer != null)
{
- string tupClassName = FullQualifiedClassName(tuplizer.Attributes["class"].Value, mappings);
+ string tupClassName = FullQualifiedClassName(tuplizer.@class, mappings);
entity.AddTuplizer(EntityMode.Poco, tupClassName);
}
}
@@ -313,7 +288,8 @@
XmlAttribute actionNode = node.Attributes["schema-action"];
string action = actionNode == null ? "all" : actionNode.Value;
- Table table = mappings.AddTable(schema, catalog, GetClassTableName(persistentClass, node), null, false, action);
+ string tableName = node.Attributes["table"] != null ? node.Attributes["table"].Value : null;
+ Table table = mappings.AddTable(schema, catalog, GetClassTableName(persistentClass, tableName), null, false, action);
join.Table = table;
XmlAttribute fetchNode = node.Attributes["fetch"];
@@ -401,33 +377,31 @@
HandleCustomSQL(node, join);
}
- private void HandleCustomSQL(XmlNode node, PersistentClass model)
+ private void HandleCustomSQL(IEntitySqlsMapping sqlsMapping, PersistentClass model)
{
- XmlNode element = node.SelectSingleNode(HbmConstants.nsSqlInsert, namespaceManager);
-
- if (element != null)
+ var sqlInsert = sqlsMapping.SqlInsert;
+ if (sqlInsert != null)
{
- bool callable = IsCallable(element);
- model.SetCustomSQLInsert(element.InnerText.Trim(), callable, GetResultCheckStyle(element, callable));
+ bool callable = sqlInsert.callableSpecified && sqlInsert.callable;
+ model.SetCustomSQLInsert(sqlInsert.Text.LinesToString(), callable, GetResultCheckStyle(sqlInsert));
}
- element = node.SelectSingleNode(HbmConstants.nsSqlDelete, namespaceManager);
- if (element != null)
+ var sqlDelete = sqlsMapping.SqlDelete;
+ if (sqlDelete != null)
{
- bool callable = IsCallable(element);
- model.SetCustomSQLDelete(element.InnerText.Trim(), callable, GetResultCheckStyle(element, callable));
+ bool callable = sqlDelete.callableSpecified && sqlDelete.callable;
+ model.SetCustomSQLDelete(sqlDelete.Text.LinesToString(), callable, GetResultCheckStyle(sqlDelete));
}
- element = node.SelectSingleNode(HbmConstants.nsSqlUpdate, namespaceManager);
- if (element != null)
+ var sqlUpdate = sqlsMapping.SqlUpdate;
+ if (sqlUpdate != null)
{
- bool callable = IsCallable(element);
- model.SetCustomSQLUpdate(element.InnerText.Trim(), callable, GetResultCheckStyle(element, callable));
+ bool callable = sqlUpdate.callableSpecified && sqlUpdate.callable;
+ model.SetCustomSQLUpdate(sqlUpdate.Text.LinesToString(), callable, GetResultCheckStyle(sqlUpdate));
}
- element = node.SelectSingleNode(HbmConstants.nsLoader, namespaceManager);
- if (element != null)
- model.LoaderName = XmlHelper.GetAttributeValue(element, "query-ref");
+ if (sqlsMapping.SqlLoader != null)
+ model.LoaderName = sqlsMapping.SqlLoader.queryref;
}
private void HandleCustomSQL(XmlNode node, Join model)
@@ -494,13 +468,11 @@
return superModel;
}
- protected string GetClassTableName(PersistentClass model, XmlNode node)
+ protected string GetClassTableName(PersistentClass model, string mappedTableName)
{
- XmlAttribute tableNameNode = node.Attributes["table"];
- if (tableNameNode == null)
- return mappings.NamingStrategy.ClassToTableName(model.EntityName);
- else
- return mappings.NamingStrategy.TableName(tableNameNode.Value);
+ return string.IsNullOrEmpty(mappedTableName)
+ ? mappings.NamingStrategy.ClassToTableName(model.EntityName)
+ : mappings.NamingStrategy.TableName(mappedTableName);
}
protected void MakeIdentifier(XmlNode node, SimpleValue model)
@@ -1004,6 +976,31 @@
return ExecuteUpdateResultCheckStyle.Parse(attr.Value);
}
+ protected static ExecuteUpdateResultCheckStyle GetResultCheckStyle(HbmCustomSQL customSQL)
+ {
+ if (customSQL != null)
+ {
+ if (!customSQL.checkSpecified)
+ {
+ return ExecuteUpdateResultCheckStyle.Count;
+ }
+ else
+ {
+ switch (customSQL.check)
+ {
+ case HbmCustomSQLCheck.None:
+ return ExecuteUpdateResultCheckStyle.None;
+ break;
+ case HbmCustomSQLCheck.Rowcount:
+ return ExecuteUpdateResultCheckStyle.Count;
+ case HbmCustomSQLCheck.Param:
+ return null; // not supported
+ }
+ }
+ }
+ return null;
+ }
+
protected void ParseFilter(XmlNode filterElement, IFilterable filterable)
{
string name = GetPropertyName(filterElement);
Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs 2009-11-28 21:09:24 UTC (rev 4868)
+++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -1,5 +1,5 @@
using System.Xml;
-
+using NHibernate.Cfg.MappingSchema;
using NHibernate.Mapping;
using NHibernate.Persister.Entity;
using System.Collections.Generic;
@@ -18,32 +18,32 @@
{
}
- public void Bind(XmlNode node, IDictionary<string, MetaAttribute> inheritedMetas)
+ public void Bind(XmlNode node, HbmJoinedSubclass joinedSubclassMapping, IDictionary<string, MetaAttribute> inheritedMetas)
{
PersistentClass superModel = GetSuperclass(node);
- HandleJoinedSubclass(superModel, node, inheritedMetas);
+ HandleJoinedSubclass(superModel, node, joinedSubclassMapping, inheritedMetas);
}
- public void HandleJoinedSubclass(PersistentClass model, XmlNode subnode, IDictionary<string, MetaAttribute> inheritedMetas)
+ public void HandleJoinedSubclass(PersistentClass model, XmlNode subnode, HbmJoinedSubclass joinedSubclassMapping, IDictionary<string, MetaAttribute> inheritedMetas)
{
JoinedSubclass subclass = new JoinedSubclass(model);
- BindClass(subnode, null, subclass, inheritedMetas);
- inheritedMetas = GetMetas(subnode.SelectNodes(HbmConstants.nsMeta, namespaceManager), inheritedMetas, true); // get meta's from <joined-subclass>
+ BindClass(joinedSubclassMapping, subclass, inheritedMetas);
+ inheritedMetas = GetMetas(joinedSubclassMapping, inheritedMetas, true); // get meta's from <joined-subclass>
+
// joined subclass
if (subclass.EntityPersisterClass == null)
subclass.RootClazz.EntityPersisterClass = typeof(JoinedSubclassEntityPersister);
//table + schema names
- XmlAttribute schemaNode = subnode.Attributes["schema"];
- string schema = schemaNode == null ? mappings.SchemaName : schemaNode.Value;
- XmlAttribute catalogNode = subnode.Attributes["catalog"];
- string catalog = catalogNode == null ? mappings.CatalogName : catalogNode.Value;
+ string schema = joinedSubclassMapping.schema ?? mappings.SchemaName;
+ string catalog = joinedSubclassMapping.catalog ?? mappings.CatalogName;
+ // TODO: very strange, the schema does not support it
XmlAttribute actionNode = subnode.Attributes["schema-action"];
string action = actionNode == null ? "all" : actionNode.Value;
-
- Table mytable = mappings.AddTable(schema, catalog, GetClassTableName(subclass, subnode), null, false, action);
+
+ Table mytable = mappings.AddTable(schema, catalog, GetClassTableName(subclass, joinedSubclassMapping.table), null, false, action);
((ITableOwner)subclass).Table = mytable;
log.InfoFormat("Mapping joined-subclass: {0} -> {1}", subclass.EntityName, subclass.Table.Name);
@@ -64,11 +64,8 @@
subclass.Table.Name + ", the same table as its base class.");
subclass.CreateForeignKey();
-
// CHECK
- XmlAttribute chNode = subnode.Attributes["check"];
- if (chNode != null)
- mytable.AddCheckConstraint(chNode.Value);
+ mytable.AddCheckConstraint(joinedSubclassMapping.check);
// properties
PropertiesFromXML(subnode, subclass, inheritedMetas);
Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs 2009-11-28 21:09:24 UTC (rev 4868)
+++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/MappingRootBinder.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -100,7 +100,7 @@
{
var binder = new UnionSubclassBinder(this, GetNamespaceManager(parentNode), dialect);
- binder.Bind(parentNode, inheritedMetas);
+ binder.Bind(parentNode, unionSubclass, inheritedMetas);
}
private void AddJoinedSubclasses(XmlNode parentNode, HbmJoinedSubclass joinedSubclass,
@@ -108,14 +108,14 @@
{
var binder = new JoinedSubclassBinder(this, GetNamespaceManager(parentNode), dialect);
- binder.Bind(parentNode, inheritedMetas);
+ binder.Bind(parentNode, joinedSubclass, inheritedMetas);
}
private void AddSubclasses(XmlNode parentNode, HbmSubclass subClass, IDictionary<string, MetaAttribute> inheritedMetas)
{
var binder = new SubclassBinder(this, GetNamespaceManager(parentNode), dialect);
- binder.Bind(parentNode, inheritedMetas);
+ binder.Bind(parentNode, subClass, inheritedMetas);
}
private void AddQueries(HbmMapping mappingSchema)
Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-11-28 21:09:24 UTC (rev 4868)
+++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -16,7 +16,7 @@
public void Bind(XmlNode node, HbmClass classSchema, IDictionary<string, MetaAttribute> inheritedMetas)
{
RootClass rootClass = new RootClass();
- BindClass(node, classSchema, rootClass, inheritedMetas);
+ BindClass(classSchema, rootClass, inheritedMetas);
inheritedMetas = GetMetas(classSchema, inheritedMetas, true); // get meta's from <class>
//TABLENAME
Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs 2009-11-28 21:09:24 UTC (rev 4868)
+++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -1,6 +1,6 @@
using System.Collections.Generic;
using System.Xml;
-
+using NHibernate.Cfg.MappingSchema;
using NHibernate.Mapping;
using NHibernate.Persister.Entity;
@@ -18,20 +18,19 @@
{
}
- public void Bind(XmlNode node, IDictionary<string, MetaAttribute> inheritedMetas)
+ public void Bind(XmlNode node, HbmSubclass subClassMapping, IDictionary<string, MetaAttribute> inheritedMetas)
{
PersistentClass superModel = GetSuperclass(node);
- HandleSubclass(superModel, node, inheritedMetas);
+ HandleSubclass(superModel, node, subClassMapping, inheritedMetas);
}
- public void HandleSubclass(PersistentClass model, XmlNode subnode, IDictionary<string, MetaAttribute> inheritedMetas)
+ public void HandleSubclass(PersistentClass model, XmlNode subnode, HbmSubclass subClassMapping, IDictionary<string, MetaAttribute> inheritedMetas)
{
Subclass subclass = new SingleTableSubclass(model);
- BindClass(subnode, null, subclass, inheritedMetas);
+ BindClass(subClassMapping, subclass, inheritedMetas);
+ inheritedMetas = GetMetas(subClassMapping, inheritedMetas, true); // get meta's from <subclass>
- inheritedMetas = GetMetas(subnode.SelectNodes(HbmConstants.nsMeta, namespaceManager), inheritedMetas, true); // get meta's from <subclass>
-
if (subclass.EntityPersisterClass == null)
subclass.RootClazz.EntityPersisterClass = typeof(SingleTableEntityPersister);
Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs 2009-11-28 21:09:24 UTC (rev 4868)
+++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/UnionSubclassBinder.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Xml;
+using NHibernate.Cfg.MappingSchema;
using NHibernate.Mapping;
using NHibernate.Persister.Entity;
@@ -17,32 +18,30 @@
{
}
- public void Bind(XmlNode node, IDictionary<string, MetaAttribute> inheritedMetas)
+ public void Bind(XmlNode node, HbmUnionSubclass unionSubclassMapping, IDictionary<string, MetaAttribute> inheritedMetas)
{
PersistentClass superModel = GetSuperclass(node);
- HandleUnionSubclass(superModel, node, inheritedMetas);
+ HandleUnionSubclass(superModel, node, unionSubclassMapping, inheritedMetas);
}
- public void HandleUnionSubclass(PersistentClass model, XmlNode subnode, IDictionary<string, MetaAttribute> inheritedMetas)
+ public void HandleUnionSubclass(PersistentClass model, XmlNode subnode, HbmUnionSubclass unionSubclassMapping, IDictionary<string, MetaAttribute> inheritedMetas)
{
var unionSubclass = new UnionSubclass(model);
- BindClass(subnode, null, unionSubclass, inheritedMetas);
- inheritedMetas = GetMetas(subnode.SelectNodes(HbmConstants.nsMeta, namespaceManager), inheritedMetas, true); // get meta's from <union-subclass>
+ BindClass(unionSubclassMapping, unionSubclass, inheritedMetas);
+ inheritedMetas = GetMetas(unionSubclassMapping, inheritedMetas, true); // get meta's from <union-subclass>
// union subclass
if (unionSubclass.EntityPersisterClass == null)
unionSubclass.RootClazz.EntityPersisterClass = typeof(UnionSubclassEntityPersister);
//table + schema names
- XmlAttribute schemaNode = subnode.Attributes["schema"];
- string schema = schemaNode == null ? mappings.SchemaName : schemaNode.Value;
- XmlAttribute catalogNode = subnode.Attributes["catalog"];
- string catalog = catalogNode == null ? mappings.CatalogName : catalogNode.Value;
+ string schema = unionSubclassMapping.schema ?? mappings.SchemaName;
+ string catalog = unionSubclassMapping.catalog ?? mappings.CatalogName;
Table denormalizedSuperTable = unionSubclass.Superclass.Table;
Table mytable =
- mappings.AddDenormalizedTable(schema, catalog, GetClassTableName(unionSubclass, subnode),
+ mappings.AddDenormalizedTable(schema, catalog, GetClassTableName(unionSubclass, unionSubclassMapping.table),
unionSubclass.IsAbstract.GetValueOrDefault(), null, denormalizedSuperTable);
((ITableOwner)unionSubclass).Table = mytable;
Modified: trunk/nhibernate/src/NHibernate/Mapping/Table.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/Table.cs 2009-11-28 21:09:24 UTC (rev 4868)
+++ trunk/nhibernate/src/NHibernate/Mapping/Table.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -832,7 +832,10 @@
/// <param name="constraint"></param>
public void AddCheckConstraint(string constraint)
{
- checkConstraints.Add(constraint);
+ if (!string.IsNullOrEmpty(constraint))
+ {
+ checkConstraints.Add(constraint);
+ }
}
internal void SetHasDenormalizedTables()
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-11-28 21:09:24 UTC (rev 4868)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-11-29 00:00:57 UTC (rev 4869)
@@ -495,7 +495,13 @@
<Compile Include="Cfg\Loquacious\MappingsConfiguration.cs" />
<Compile Include="Cfg\Loquacious\ProxyConfiguration.cs" />
<Compile Include="Cfg\MappingSchema\HbmDefinition.cs" />
- <Compile Include="Cfg\MappingSchema\IEntityMetadata.cs" />
+ <Compile Include="Cfg\MappingSchema\HbmExtensions.cs" />
+ <Compile Include="Cfg\MappingSchema\HbmJoinedSubclass.cs" />
+ <Compile Include="Cfg\MappingSchema\HbmSubclass.cs" />
+ <Compile Include="Cfg\MappingSchema\HbmUnionSubclass.cs" />
+ <Compile Include="Cfg\MappingSchema\IEntityDiscriminableMapping.cs" />
+ <Compile Include="Cfg\MappingSchema\IEntityMapping.cs" />
+ <Compile Include="Cfg\MappingSchema\IEntitySqlsMapping.cs" />
<Compile Include="Cfg\SchemaAutoAction.cs" />
<Compile Include="Cfg\SessionFactoryConfigurationBase.cs" />
<Compile Include="Cfg\ISessionFactoryConfiguration.cs" />
Modified: trunk/nhibernate/src/NHibernate/Util/StringHelper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Util/StringHelper.cs 2009-11-28 21:09:24 UTC (rev 4868)
+++ trunk/nhibernate/src/NHibernate/Util/StringHelper.cs 2009-11-29 00:00:57 UTC (rev 4869)
@@ -6,13 +6,8 @@
namespace NHibernate.Util
{
/// <summary></summary>
- public sealed class StringHelper
+ public static class StringHelper
{
- private StringHelper()
- {
- // not creatable
- }
-
public const string WhiteSpace = " \n\r\f\t";
/// <summary></summary>
@@ -394,6 +389,21 @@
return buf.Append(NullSafeToString(array[len - 1])).ToString();
}
+ public static string LinesToString(this string[] text)
+ {
+ if(text == null)
+ {
+ return null;
+ }
+ if(text.Length == 1)
+ {
+ return text[0];
+ }
+ var sb = new StringBuilder(200);
+ Array.ForEach(text, t => sb.AppendLine(t));
+ return sb.ToString();
+ }
+
/// <summary>
///
/// </summary>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|