|
From: <dav...@us...> - 2009-04-19 15:06:54
|
Revision: 4190
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4190&view=rev
Author: davybrion
Date: 2009-04-19 15:06:48 +0000 (Sun, 19 Apr 2009)
Log Message:
-----------
refactored duplicate code from FutureQueryBatch and FutureCriteriaBatch into a new FutureBatch base class
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Impl/FutureCriteriaBatch.cs
trunk/nhibernate/src/NHibernate/Impl/FutureQueryBatch.cs
trunk/nhibernate/src/NHibernate/NHibernate.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Impl/FutureBatch.cs
Added: trunk/nhibernate/src/NHibernate/Impl/FutureBatch.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/FutureBatch.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Impl/FutureBatch.cs 2009-04-19 15:06:48 UTC (rev 4190)
@@ -0,0 +1,77 @@
+using System.Collections;
+using System.Collections.Generic;
+
+namespace NHibernate.Impl
+{
+ public abstract class FutureBatch<TQueryApproach, TMultiApproach>
+ {
+ private readonly List<TQueryApproach> queries = new List<TQueryApproach>();
+ private readonly IList<System.Type> resultTypes = new List<System.Type>();
+ private int index;
+ private IList results;
+
+ protected readonly SessionImpl session;
+
+ protected FutureBatch(ISession session)
+ {
+ this.session = (SessionImpl)session;
+ }
+
+ public IList Results
+ {
+ get
+ {
+ if (results == null)
+ {
+ GetResults();
+ }
+ return results;
+ }
+ }
+
+ public void Add<TResult>(TQueryApproach query)
+ {
+ queries.Add(query);
+ resultTypes.Add(typeof(TResult));
+ index = queries.Count - 1;
+ }
+
+ public void Add(TQueryApproach query)
+ {
+ Add<object>(query);
+ }
+
+ public IFutureValue<TResult> GetFutureValue<TResult>()
+ {
+ int currentIndex = index;
+ return new FutureValue<TResult>(() => GetCurrentResult<TResult>(currentIndex));
+ }
+
+ public IEnumerable<TResult> GetEnumerator<TResult>()
+ {
+ int currentIndex = index;
+ return new DelayedEnumerator<TResult>(() => GetCurrentResult<TResult>(currentIndex));
+ }
+
+ private void GetResults()
+ {
+ var multiApproach = CreateMultiApproach();
+ for (int i = 0; i < queries.Count; i++)
+ {
+ AddTo(multiApproach, queries[i], resultTypes[i]);
+ }
+ results = GetResultsFrom(multiApproach);
+ ClearCurrentFutureBatch();
+ }
+
+ private IList<TResult> GetCurrentResult<TResult>(int currentIndex)
+ {
+ return (IList<TResult>)Results[currentIndex];
+ }
+
+ protected abstract TMultiApproach CreateMultiApproach();
+ protected abstract void AddTo(TMultiApproach multiApproach, TQueryApproach query, System.Type resultType);
+ protected abstract IList GetResultsFrom(TMultiApproach multiApproach);
+ protected abstract void ClearCurrentFutureBatch();
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Impl/FutureCriteriaBatch.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/FutureCriteriaBatch.cs 2009-04-18 14:15:48 UTC (rev 4189)
+++ trunk/nhibernate/src/NHibernate/Impl/FutureCriteriaBatch.cs 2009-04-19 15:06:48 UTC (rev 4190)
@@ -1,62 +1,29 @@
using System.Collections;
-using System.Collections.Generic;
namespace NHibernate.Impl
{
- public class FutureCriteriaBatch
+ public class FutureCriteriaBatch : FutureBatch<ICriteria, IMultiCriteria>
{
- private readonly List<ICriteria> criterias = new List<ICriteria>();
- private readonly IList<System.Type> resultCollectionGenericType = new List<System.Type>();
+ public FutureCriteriaBatch(ISession session) : base(session) {}
- private int index;
- private IList results;
- private readonly ISession session;
-
- public FutureCriteriaBatch(ISession session)
+ protected override IMultiCriteria CreateMultiApproach()
{
- this.session = session;
+ return session.CreateMultiCriteria();
}
- public IList Results
+ protected override void AddTo(IMultiCriteria multiApproach, ICriteria query, System.Type resultType)
{
- get
- {
- if (results == null)
- {
- var multiCriteria = session.CreateMultiCriteria();
- for (int i = 0; i < criterias.Count; i++)
- {
- multiCriteria.Add(resultCollectionGenericType[i], criterias[i]);
- }
- results = multiCriteria.List();
- ((SessionImpl)session).FutureCriteriaBatch = null;
- }
- return results;
- }
+ multiApproach.Add(resultType, query);
}
- public void Add<T>(ICriteria criteria)
+ protected override IList GetResultsFrom(IMultiCriteria multiApproach)
{
- criterias.Add(criteria);
- resultCollectionGenericType.Add(typeof(T));
- index = criterias.Count - 1;
+ return multiApproach.List();
}
- public void Add(ICriteria criteria)
+ protected override void ClearCurrentFutureBatch()
{
- Add<object>(criteria);
+ session.FutureCriteriaBatch = null;
}
-
- public IFutureValue<T> GetFutureValue<T>()
- {
- int currentIndex = index;
- return new FutureValue<T>(() => (IList<T>)Results[currentIndex]);
- }
-
- public IEnumerable<T> GetEnumerator<T>()
- {
- int currentIndex = index;
- return new DelayedEnumerator<T>(() => (IList<T>)Results[currentIndex]);
- }
}
}
Modified: trunk/nhibernate/src/NHibernate/Impl/FutureQueryBatch.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/FutureQueryBatch.cs 2009-04-18 14:15:48 UTC (rev 4189)
+++ trunk/nhibernate/src/NHibernate/Impl/FutureQueryBatch.cs 2009-04-19 15:06:48 UTC (rev 4190)
@@ -1,62 +1,29 @@
using System.Collections;
-using System.Collections.Generic;
namespace NHibernate.Impl
{
- public class FutureQueryBatch
+ public class FutureQueryBatch : FutureBatch<IQuery, IMultiQuery>
{
- private readonly List<IQuery> queries = new List<IQuery>();
- private readonly IList<System.Type> resultCollectionGenericType = new List<System.Type>();
+ public FutureQueryBatch(ISession session) : base(session) {}
- private int index;
- private IList results;
- private readonly ISession session;
+ protected override IMultiQuery CreateMultiApproach()
+ {
+ return session.CreateMultiQuery();
+ }
- public FutureQueryBatch(ISession session)
- {
- this.session = session;
- }
+ protected override void AddTo(IMultiQuery multiApproach, IQuery query, System.Type resultType)
+ {
+ multiApproach.Add(resultType, query);
+ }
- public IList Results
- {
- get
- {
- if (results == null)
- {
- var multiQuery = session.CreateMultiQuery();
- for (int i = 0; i < queries.Count; i++)
- {
- multiQuery.Add(resultCollectionGenericType[i], queries[i]);
- }
- results = multiQuery.List();
- ((SessionImpl)session).FutureQueryBatch = null;
- }
- return results;
- }
- }
+ protected override IList GetResultsFrom(IMultiQuery multiApproach)
+ {
+ return multiApproach.List();
+ }
- public void Add<T>(IQuery query)
- {
- queries.Add(query);
- resultCollectionGenericType.Add(typeof(T));
- index = queries.Count - 1;
+ protected override void ClearCurrentFutureBatch()
+ {
+ session.FutureQueryBatch = null;
}
-
- public void Add(IQuery query)
- {
- Add<object>(query);
- }
-
- public IFutureValue<T> GetFutureValue<T>()
- {
- int currentIndex = index;
- return new FutureValue<T>(() => (IList<T>)Results[currentIndex]);
- }
-
- public IEnumerable<T> GetEnumerator<T>()
- {
- int currentIndex = index;
- return new DelayedEnumerator<T>(() => (IList<T>)Results[currentIndex]);
- }
}
}
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-04-18 14:15:48 UTC (rev 4189)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-04-19 15:06:48 UTC (rev 4190)
@@ -480,6 +480,7 @@
<Compile Include="Id\SequenceIdentityGenerator.cs" />
<Compile Include="IFutureValue.cs" />
<Compile Include="Impl\DelayedEnumerator.cs" />
+ <Compile Include="Impl\FutureBatch.cs" />
<Compile Include="Impl\FutureQueryBatch.cs" />
<Compile Include="Impl\FutureCriteriaBatch.cs" />
<Compile Include="Impl\FutureValue.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|