Skip to content

Commit 49cae18

Browse files
committed
basic infrastructure for separate data processor events added
1 parent 04a4575 commit 49cae18

File tree

6 files changed

+66
-6
lines changed

6 files changed

+66
-6
lines changed

src/Examples/Examples.Mvc/Controllers/CustomersController.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,11 @@ public override void OnDataProcessed(ref object data, RequestInfoModel requestIn
5252
list.ForEach(x => x.Person.FirstName = $"FN {x.Person.FirstName}");
5353
data = list.AsQueryable();
5454
}
55+
56+
public override void OnSearchnDataProcessing(ref object data, RequestInfoModel requestInfoModel)
57+
{
58+
var queryable = data as IOrderedQueryable<CustomerViewModel>;
59+
data = queryable.Where(x => x.CustomerID % 2 == 0);
60+
}
5561
}
5662
}

src/JQDT.MVC/JQDataTableAttribute.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ public virtual void OnDataProcessed(ref object data, RequestInfoModel requestInf
4545
// No data processing logic by default;
4646
}
4747

48+
public virtual void OnSearchnDataProcessing(ref object data, RequestInfoModel requestInfoModel)
49+
{
50+
// No data processing logic by default;
51+
}
52+
4853
private void PerformOnActionExecuted(ActionExecutedContext filterContext)
4954
{
5055
var dataCollectionType = filterContext.Controller.ViewData.Model.GetType();
@@ -68,7 +73,8 @@ private void PerformOnActionExecuted(ActionExecutedContext filterContext)
6873

6974
private void SubscribeToEvents(IApplicationBase application)
7075
{
71-
application.OnDataProcessed += this.OnDataProcessed;
76+
application.OnDataProcessedEvent += this.OnDataProcessed;
77+
application.OnSearchDataProcessingEvent += this.OnSearchnDataProcessing;
7278
}
7379

7480
private ActionResult FormatResult(object resultModel)

src/JQDT.WebAPI/JQDataTableAttribute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ private void PerformOnActionExecuted(HttpActionExecutedContext actionExecutedCon
5656

5757
private void SubscribeToEvents(IApplicationBase application)
5858
{
59-
application.OnDataProcessed += this.OnDataProcessed;
59+
application.OnDataProcessedEvent += this.OnDataProcessed;
6060
}
6161

6262
private object GetObjectResult(ResultModel result)

src/JQDT/Application/ApplicationBase.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,12 @@ public ApplicationBase(IDependencyResolver dependencyResolver)
3131
/// <summary>
3232
/// Occurs when [on data processed].
3333
/// </summary>
34-
public event DataProcessorEventHandler OnDataProcessed;
34+
public event DataProcessorEventHandler OnDataProcessedEvent = delegate { };
35+
36+
/// <summary>
37+
/// Occurs when [on search data processing event].
38+
/// </summary>
39+
public event DataProcessorEventHandler OnSearchDataProcessingEvent = delegate { };
3540

3641
/// <summary>
3742
/// Application entry point method. Executes all data processors.
@@ -88,7 +93,7 @@ public ResultModel Execute()
8893
private void PerformDataProcessorEventHandler(ref IQueryable<T> data, RequestInfoModel requestInfoModel)
8994
{
9095
var dataAsObj = (object)data;
91-
this.OnDataProcessed(ref dataAsObj, requestInfoModel);
96+
this.OnDataProcessedEvent(ref dataAsObj, requestInfoModel);
9297
data = (IQueryable<T>)dataAsObj;
9398
}
9499

@@ -117,13 +122,26 @@ private IDataProcess<T> GetDataProcessChain(Type dataCollectionType)
117122
{
118123
var dataProcessChain = new DataProcessChain<T>();
119124

120-
dataProcessChain.AddDataProcessor(this.dependencyResolver.GetSearchDataProcessor<T>());
125+
var searchDataProcessor = this.dependencyResolver.GetSearchDataProcessor<T>();
126+
this.AttachEventsToDataprocessor((DataProcessBase<T>)searchDataProcessor);
127+
dataProcessChain.AddDataProcessor(searchDataProcessor);
128+
121129
dataProcessChain.AddDataProcessor(this.dependencyResolver.GetCustomFiltersDataProcessor<T>());
122130
dataProcessChain.AddDataProcessor(this.dependencyResolver.GetColumnsFilterDataProcessor<T>());
123131
dataProcessChain.AddDataProcessor(this.dependencyResolver.GetSortDataProcessor<T>());
124132
dataProcessChain.AddDataProcessor(this.dependencyResolver.GetPagingDataProcessor<T>());
125133

126134
return dataProcessChain;
127135
}
136+
137+
private void AttachEventsToDataprocessor(DataProcessBase<T> dataProcessor)
138+
{
139+
dataProcessor.OnDataProcessingEvent += this.OnSearchDataProcessing;
140+
}
141+
142+
public void OnSearchDataProcessing(ref object data, RequestInfoModel requestInfoModel)
143+
{
144+
this.OnSearchDataProcessingEvent(ref data, requestInfoModel);
145+
}
128146
}
129147
}

src/JQDT/Application/IApplicationBase.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ public interface IApplicationBase
1111
/// <summary>
1212
/// Occurs when [on data processed].
1313
/// </summary>
14-
event DataProcessorEventHandler OnDataProcessed;
14+
event DataProcessorEventHandler OnDataProcessedEvent;
15+
16+
/// <summary>
17+
/// Occurs when [on search data processing event].
18+
/// </summary>
19+
event DataProcessorEventHandler OnSearchDataProcessingEvent;
1520

1621
/// <summary>
1722
/// Application entry point method. Executes all data processors.

src/JQDT/DataProcessing/DataProcessBase.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{
33
using System;
44
using System.Linq;
5+
using JQDT.Delegates;
56
using JQDT.Models;
67

78
/// <summary>
@@ -16,6 +17,10 @@ internal abstract class DataProcessBase<T> : IDataProcess<T>
1617

1718
private IQueryable<T> processedData;
1819

20+
public event DataProcessorEventHandler OnDataProcessingEvent = delegate { };
21+
22+
public event DataProcessorEventHandler OnDataProcessedEvent = delegate { };
23+
1924
/// <summary>
2025
/// Gets the processed data.
2126
/// </summary>
@@ -50,8 +55,14 @@ public IQueryable<T> ProcessData(IQueryable<T> data, RequestInfoModel requestInf
5055
throw new ArgumentNullException(NullRequestInfoModelExceptionMessage);
5156
}
5257

58+
// Execute events prior data processing
59+
this.ExecuteOnDataprocessingEvents(ref data, requestInfoModel);
60+
5361
this.processedData = this.OnProcessData(data, requestInfoModel);
5462

63+
// Execute events after the data has been processed
64+
this.ExecuteOnDataprocessedEvents(ref data, requestInfoModel);
65+
5566
return this.ProcessedData;
5667
}
5768

@@ -62,5 +73,19 @@ public IQueryable<T> ProcessData(IQueryable<T> data, RequestInfoModel requestInf
6273
/// <param name="requestInfoModel">The request information model.</param>
6374
/// <returns><see cref="IQueryable{T}"/></returns>
6475
protected abstract IQueryable<T> OnProcessData(IQueryable<T> data, RequestInfoModel requestInfoModel);
76+
77+
private void ExecuteOnDataprocessingEvents(ref IQueryable<T> data, RequestInfoModel requestInfoModel)
78+
{
79+
var dataAsObj = (object)data;
80+
this.OnDataProcessingEvent(ref dataAsObj, requestInfoModel);
81+
data = (IQueryable<T>)dataAsObj;
82+
}
83+
84+
private void ExecuteOnDataprocessedEvents(ref IQueryable<T> data, RequestInfoModel requestInfoModel)
85+
{
86+
var dataAsObj = (object)data;
87+
this.OnDataProcessedEvent(ref dataAsObj, requestInfoModel);
88+
data = (IQueryable<T>)dataAsObj;
89+
}
6590
}
6691
}

0 commit comments

Comments
 (0)