From: <fab...@us...> - 2009-05-07 03:34:47
|
Revision: 4257 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4257&view=rev Author: fabiomaulo Date: 2009-05-07 03:34:37 +0000 (Thu, 07 May 2009) Log Message: ----------- Fix NH-1765 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Action/EntityDeleteAction.cs trunk/nhibernate/src/NHibernate/Action/EntityIdentityInsertAction.cs trunk/nhibernate/src/NHibernate/Action/EntityInsertAction.cs trunk/nhibernate/src/NHibernate/Action/EntityUpdateAction.cs trunk/nhibernate/src/NHibernate/Event/AbstractEvent.cs trunk/nhibernate/src/NHibernate/Event/PreDeleteEvent.cs trunk/nhibernate/src/NHibernate/Event/PreInsertEvent.cs trunk/nhibernate/src/NHibernate/Event/PreUpdateEvent.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Event/AbstractPreDatabaseOperationEvent.cs Modified: trunk/nhibernate/src/NHibernate/Action/EntityDeleteAction.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Action/EntityDeleteAction.cs 2009-05-06 22:59:51 UTC (rev 4256) +++ trunk/nhibernate/src/NHibernate/Action/EntityDeleteAction.cs 2009-05-07 03:34:37 UTC (rev 4257) @@ -117,7 +117,7 @@ bool veto = false; if (preListeners.Length > 0) { - PreDeleteEvent preEvent = new PreDeleteEvent(Instance, Id, state, Persister); + var preEvent = new PreDeleteEvent(Instance, Id, state, Persister, (IEventSource)Session); foreach (IPreDeleteEventListener listener in preListeners) { veto |= listener.OnPreDelete(preEvent); Modified: trunk/nhibernate/src/NHibernate/Action/EntityIdentityInsertAction.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Action/EntityIdentityInsertAction.cs 2009-05-06 22:59:51 UTC (rev 4256) +++ trunk/nhibernate/src/NHibernate/Action/EntityIdentityInsertAction.cs 2009-05-07 03:34:37 UTC (rev 4257) @@ -121,7 +121,7 @@ IPostInsertEventListener[] postListeners = Session.Listeners.PostCommitInsertEventListeners; if (postListeners.Length > 0) { - PostInsertEvent postEvent = new PostInsertEvent(Instance, generatedId, state, Persister, (IEventSource)Session); + var postEvent = new PostInsertEvent(Instance, generatedId, state, Persister, (IEventSource) Session); foreach (IPostInsertEventListener listener in postListeners) { listener.OnPostInsert(postEvent); @@ -135,7 +135,7 @@ bool veto = false; if (preListeners.Length > 0) { - PreInsertEvent preEvent = new PreInsertEvent(Instance, null, state, Persister, Session); + var preEvent = new PreInsertEvent(Instance, null, state, Persister, (IEventSource) Session); foreach (IPreInsertEventListener listener in preListeners) { veto |= listener.OnPreInsert(preEvent); @@ -144,7 +144,7 @@ return veto; } - //Make 100% certain that this is called before any subsequent ScheduledUpdate.afterTransactionCompletion()!! + //Make 100% certain that this is called before any subsequent ScheduledUpdate.afterTransactionCompletion()!! public override void AfterTransactionCompletion(bool success) { //TODO from H3.2: reenable if we also fix the above todo Modified: trunk/nhibernate/src/NHibernate/Action/EntityInsertAction.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Action/EntityInsertAction.cs 2009-05-06 22:59:51 UTC (rev 4256) +++ trunk/nhibernate/src/NHibernate/Action/EntityInsertAction.cs 2009-05-07 03:34:37 UTC (rev 4257) @@ -154,7 +154,7 @@ bool veto = false; if (preListeners.Length > 0) { - PreInsertEvent preEvent = new PreInsertEvent(Instance, Id, state, Persister, Session); + var preEvent = new PreInsertEvent(Instance, Id, state, Persister, (IEventSource) Session); foreach (IPreInsertEventListener listener in preListeners) { veto |= listener.OnPreInsert(preEvent); Modified: trunk/nhibernate/src/NHibernate/Action/EntityUpdateAction.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Action/EntityUpdateAction.cs 2009-05-06 22:59:51 UTC (rev 4256) +++ trunk/nhibernate/src/NHibernate/Action/EntityUpdateAction.cs 2009-05-07 03:34:37 UTC (rev 4257) @@ -193,7 +193,7 @@ bool veto = false; if (preListeners.Length > 0) { - PreUpdateEvent preEvent = new PreUpdateEvent(Instance, Id, state, previousState, Persister, Session); + var preEvent = new PreUpdateEvent(Instance, Id, state, previousState, Persister, (IEventSource) Session); foreach (IPreUpdateEventListener listener in preListeners) { veto |= listener.OnPreUpdate(preEvent); Modified: trunk/nhibernate/src/NHibernate/Event/AbstractEvent.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/AbstractEvent.cs 2009-05-06 22:59:51 UTC (rev 4256) +++ trunk/nhibernate/src/NHibernate/Event/AbstractEvent.cs 2009-05-07 03:34:37 UTC (rev 4257) @@ -8,24 +8,19 @@ [Serializable] public class AbstractEvent { - private readonly IEventSource session; - /// <summary> /// Constructs an event from the given event session. /// </summary> /// <param name="source">The session event source. </param> public AbstractEvent(IEventSource source) { - session = source; + Session = source; } /// <summary> /// Returns the session event source for this event. /// This is the underlying session from which this event was generated. /// </summary> - public IEventSource Session - { - get { return session; } - } + public IEventSource Session { get; private set; } } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Event/AbstractPreDatabaseOperationEvent.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/AbstractPreDatabaseOperationEvent.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Event/AbstractPreDatabaseOperationEvent.cs 2009-05-07 03:34:37 UTC (rev 4257) @@ -0,0 +1,43 @@ +using System; +using NHibernate.Engine; +using NHibernate.Persister.Entity; + +namespace NHibernate.Event +{ + /// <summary> + /// Represents an operation we are about to perform against the database. + /// </summary> + [Serializable] + public abstract class AbstractPreDatabaseOperationEvent : AbstractEvent + { + /// <summary> Constructs an event containing the pertinent information. </summary> + /// <param name="source">The session from which the event originated. </param> + /// <param name="entity">The entity to be invloved in the database operation. </param> + /// <param name="id">The entity id to be invloved in the database operation. </param> + /// <param name="persister">The entity's persister. </param> + protected AbstractPreDatabaseOperationEvent(IEventSource source, object entity, object id, IEntityPersister persister) + : base(source) + { + Entity = entity; + Id = id; + Persister = persister; + } + + /// <summary> The entity involved in the database operation. </summary> + public object Entity { get; private set; } + + /// <summary> The id to be used in the database operation. </summary> + public object Id { get; private set; } + + /// <summary> + /// The persister for the <see cref="Entity">. + /// </summary> + public IEntityPersister Persister { get; private set; } + + [Obsolete("Use Session property instead")] + public ISessionImplementor Source + { + get { return Session; } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Event/PreDeleteEvent.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/PreDeleteEvent.cs 2009-05-06 22:59:51 UTC (rev 4256) +++ trunk/nhibernate/src/NHibernate/Event/PreDeleteEvent.cs 2009-05-07 03:34:37 UTC (rev 4257) @@ -3,41 +3,29 @@ namespace NHibernate.Event { /// <summary> - /// Occurs before deleting an item from the datastore + /// Represents a <tt>pre-delete</tt> event, which occurs just prior to + /// performing the deletion of an entity from the database. /// </summary> - public class PreDeleteEvent + public class PreDeleteEvent : AbstractPreDatabaseOperationEvent { - private readonly object entity; - private readonly object id; - private readonly object[] deletedState; - private readonly IEntityPersister persister; - - public PreDeleteEvent(object entity, object id, object[] deletedState, IEntityPersister persister) + /// <summary> + /// Constructs an event containing the pertinent information. + /// </summary> + /// <param name="entity">The entity to be deleted. </param> + /// <param name="id">The id to use in the deletion. </param> + /// <param name="deletedState">The entity's state at deletion time. </param> + /// <param name="persister">The entity's persister. </param> + /// <param name="source">The session from which the event originated. </param> + public PreDeleteEvent(object entity, object id, object[] deletedState, IEntityPersister persister, IEventSource source) + : base(source, entity, id, persister) { - this.entity = entity; - this.id = id; - this.deletedState = deletedState; - this.persister = persister; + DeletedState = deletedState; } - public object Entity - { - get { return entity; } - } - - public object Id - { - get { return id; } - } - - public object[] DeletedState - { - get { return deletedState; } - } - - public IEntityPersister Persister - { - get { return persister; } - } + /// <summary> + /// This is the entity state at the + /// time of deletion (useful for optomistic locking and such). + /// </summary> + public object[] DeletedState { get; private set; } } -} +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Event/PreInsertEvent.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/PreInsertEvent.cs 2009-05-06 22:59:51 UTC (rev 4256) +++ trunk/nhibernate/src/NHibernate/Event/PreInsertEvent.cs 2009-05-07 03:34:37 UTC (rev 4257) @@ -1,51 +1,22 @@ -using NHibernate.Engine; using NHibernate.Persister.Entity; namespace NHibernate.Event { /// <summary> - /// Occurs before inserting an item in the datastore + /// Represents a <tt>pre-insert</tt> event, which occurs just prior to + /// performing the insert of an entity into the database. /// </summary> - public class PreInsertEvent + public class PreInsertEvent : AbstractPreDatabaseOperationEvent { - private readonly object entity; - private readonly object id; - private readonly object[] state; - private readonly IEntityPersister persister; - private readonly ISessionImplementor source; - - public PreInsertEvent(object entity, object id, object[] state, IEntityPersister persister, ISessionImplementor source) + public PreInsertEvent(object entity, object id, object[] state, IEntityPersister persister, IEventSource source) + : base(source, entity, id, persister) { - this.entity = entity; - this.id = id; - this.state = state; - this.persister = persister; - this.source = source; + State = state; } - public object Entity - { - get { return entity; } - } - - public object Id - { - get { return id; } - } - - public object[] State - { - get { return state; } - } - - public IEntityPersister Persister - { - get { return persister; } - } - - public ISessionImplementor Source - { - get { return source; } - } + /// <summary> + /// These are the values to be inserted. + /// </summary> + public object[] State { get; private set; } } } Modified: trunk/nhibernate/src/NHibernate/Event/PreUpdateEvent.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/PreUpdateEvent.cs 2009-05-06 22:59:51 UTC (rev 4256) +++ trunk/nhibernate/src/NHibernate/Event/PreUpdateEvent.cs 2009-05-07 03:34:37 UTC (rev 4257) @@ -1,62 +1,29 @@ -using System; -using System.Collections.Generic; -using System.Text; -using NHibernate.Engine; using NHibernate.Persister.Entity; namespace NHibernate.Event { /// <summary> - /// Occurs before updating the datastore + /// Represents a <tt>pre-update</tt> event, which occurs just prior to + /// performing the update of an entity in the database. /// </summary> - public class PreUpdateEvent + public class PreUpdateEvent : AbstractPreDatabaseOperationEvent { - private readonly object entity; - private readonly object id; - private readonly object[] state; - private readonly object[] oldState; - private readonly IEntityPersister persister; - private readonly ISessionImplementor source; - - public PreUpdateEvent(object entity, object id, object[] state, object[] oldState, - IEntityPersister persister, ISessionImplementor source) + public PreUpdateEvent(object entity, object id, object[] state, object[] oldState, IEntityPersister persister, + IEventSource source) : base(source, entity, id, persister) { - this.entity = entity; - this.id = id; - this.state = state; - this.oldState = oldState; - this.persister = persister; - this.source = source; + State = state; + OldState = oldState; } - public object Entity - { - get { return entity; } - } + /// <summary> + /// Retrieves the state to be used in the update. + /// </summary> + public object[] State { get; private set; } - public object Id - { - get { return id; } - } - - public object[] State - { - get { return state; } - } - - public object[] OldState - { - get { return oldState; } - } - - public IEntityPersister Persister - { - get { return persister; } - } - - public ISessionImplementor Source - { - get { return source; } - } + /// <summary> + /// The old state of the entity at the time it was last loaded from the + /// database; can be null in the case of detached entities. + /// </summary> + public object[] OldState { get; private set; } } -} +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-05-06 22:59:51 UTC (rev 4256) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-05-07 03:34:37 UTC (rev 4257) @@ -471,6 +471,7 @@ <Compile Include="Driver\IfxDriver.cs" /> <Compile Include="Driver\OracleLiteDataClientDriver.cs" /> <Compile Include="EntityModeEqualityComparer.cs" /> + <Compile Include="Event\AbstractPreDatabaseOperationEvent.cs" /> <Compile Include="Event\IDestructible.cs" /> <Compile Include="Exceptions\ReflectionBasedSqlStateExtracter.cs" /> <Compile Include="Exceptions\SqlStateExtracter.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |