Skip to content

Commit 4f13646

Browse files
Thierry Habarthabarthierry-hue
authored andcommitted
Ticket ## : Add milestone + support exit criteria + timereventlistener + casefileitem
1 parent 876a2d5 commit 4f13646

138 files changed

Lines changed: 4766 additions & 6386 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 45 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
using CaseManagement.CMMN.Extensions;
2-
using CaseManagement.CMMN.Parser;
1+
using CaseManagement.CMMN.Domains;
2+
using CaseManagement.CMMN.Extensions;
33
using CaseManagement.CMMN.Persistence;
44
using CaseManagement.CMMN.Persistence.Parameters;
55
using CaseManagement.CMMN.Persistence.Responses;
@@ -14,26 +14,24 @@ namespace CaseManagement.CMMN.Apis
1414
[Route(CMMNConstants.RouteNames.CaseDefinitions)]
1515
public class CaseDefinitionsController : Controller
1616
{
17-
private readonly ICMMNDefinitionsQueryRepository _queryRepository;
17+
private readonly ICMMNWorkflowDefinitionQueryRepository _queryRepository;
1818

19-
public CaseDefinitionsController(ICMMNDefinitionsQueryRepository queryRepository)
19+
public CaseDefinitionsController(ICMMNWorkflowDefinitionQueryRepository queryRepository)
2020
{
2121
_queryRepository = queryRepository;
2222
}
2323

24-
[HttpGet(".search")]
25-
public async Task<IActionResult> Get()
24+
[HttpGet("cmmndefinitions")]
25+
public async Task<IActionResult> GetCMMNDefinitions()
2626
{
27-
var query = HttpContext.Request.Query;
28-
// var result = await _queryRepository.Find(ExtractFindParameter(query));
29-
// return new OkObjectResult(ToDto(result));
30-
return null;
27+
var result = await _queryRepository.GetCMMDefinitions();
28+
return new OkObjectResult(result);
3129
}
32-
30+
3331
[HttpGet("{id}")]
3432
public async Task<IActionResult> Get(string id)
3533
{
36-
var result = await _queryRepository.FindDefinitionById(id);
34+
var result = await _queryRepository.FindById(id);
3735
if (result == null)
3836
{
3937
return new NotFoundResult();
@@ -42,25 +40,48 @@ public async Task<IActionResult> Get(string id)
4240
return new OkObjectResult(ToDto(result));
4341
}
4442

45-
[HttpGet("{id}/cases")]
46-
public async Task<IActionResult> GetCases(string id)
43+
[HttpGet(".search")]
44+
public async Task<IActionResult> Search()
4745
{
48-
var result = await _queryRepository.FindDefinitionById(id);
49-
if (result == null)
46+
var query = HttpContext.Request.Query;
47+
var result = await _queryRepository.Find(ExtractFindParameter(query));
48+
return new OkObjectResult(ToDto(result));
49+
}
50+
51+
private static JObject ToDto(FindResponse<CMMNWorkflowDefinition> resp)
52+
{
53+
return new JObject
5054
{
51-
return new NotFoundResult();
52-
}
55+
{ "start_index", resp.StartIndex },
56+
{ "total_length", resp.TotalLength },
57+
{ "count", resp.Count },
58+
{ "content", new JArray(resp.Content.Select(r => new JObject
59+
{
60+
{ "id", r.Id },
61+
{ "name", r.Name },
62+
{ "create_datetime", r.CreateDateTime }
63+
})) }
64+
};
65+
}
5366

54-
return new OkObjectResult(result.@case);
67+
private static JObject ToDto(CMMNWorkflowDefinition def)
68+
{
69+
return new JObject
70+
{
71+
{ "id", def.Id },
72+
{ "name", def.Name },
73+
{ "create_datetime", def.CreateDateTime }
74+
};
5575
}
5676

57-
private static BaseFindParameter ExtractFindParameter(IQueryCollection query)
77+
private static FindWorkflowDefinitionsParameter ExtractFindParameter(IQueryCollection query)
5878
{
5979
int startIndex;
6080
int count;
6181
string orderBy;
82+
string cmmnDefinition;
6283
FindOrders findOrder;
63-
var parameter = new BaseFindParameter();
84+
var parameter = new FindWorkflowDefinitionsParameter();
6485
if (query.TryGet("start_index", out startIndex))
6586
{
6687
parameter.StartIndex = startIndex;
@@ -81,50 +102,12 @@ private static BaseFindParameter ExtractFindParameter(IQueryCollection query)
81102
parameter.Order = findOrder;
82103
}
83104

84-
return parameter;
85-
}
86-
87-
private static JObject ToDto(FindResponse<tDefinitions> resp)
88-
{
89-
return new JObject
90-
{
91-
{ "start_index", resp.StartIndex },
92-
{ "total_length", resp.TotalLength },
93-
{ "count", resp.Count },
94-
{ "content", new JArray(resp.Content.Select(r => new JObject
95-
{
96-
{ "id", r.id },
97-
{ "name", r.name },
98-
{ "create_datetime", r.creationDate }
99-
})) }
100-
};
101-
}
102-
103-
private static JObject ToDto(tDefinitions def)
104-
{
105-
return new JObject
106-
{
107-
{ "id", def.id },
108-
{ "name", def.name },
109-
{ "create_datetime", def.creationDate },
110-
{ "cases", ToDto(def.@case) },
111-
{ "xml", new CMMNParser().Serialize(def) }
112-
};
113-
}
114-
115-
private static JArray ToDto(tCase[] tCases)
116-
{
117-
var result = new JArray();
118-
foreach(var tCase in tCases)
105+
if (query.TryGet("cmmn_definition", out cmmnDefinition))
119106
{
120-
result.Add(new JObject
121-
{
122-
{ "id", tCase.id },
123-
{ "name", tCase.casePlanModel.name }
124-
});
107+
parameter.CMMNDefinition = cmmnDefinition;
125108
}
126109

127-
return result;
110+
return parameter;
128111
}
129112
}
130113
}

src/CaseManagement.CMMN/Apis/CaseInstancesController.cs

Lines changed: 76 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
using CaseManagement.CMMN.CaseInstance.CommandHandlers;
22
using CaseManagement.CMMN.CaseInstance.Commands;
3-
using CaseManagement.CMMN.CaseInstance.Exceptions;
43
using CaseManagement.CMMN.Domains;
5-
using CaseManagement.CMMN.Extensions;
6-
using Microsoft.AspNetCore.Authorization;
7-
using Microsoft.AspNetCore.Http;
84
using Microsoft.AspNetCore.Mvc;
95
using Newtonsoft.Json.Linq;
106
using System;
11-
using System.Collections.Generic;
12-
using System.Linq;
137
using System.Net;
148
using System.Threading.Tasks;
159

@@ -18,21 +12,13 @@ namespace CaseManagement.CMMN.Apis
1812
[Route(CMMNConstants.RouteNames.CaseInstances)]
1913
public class CaseInstancesController : Controller
2014
{
15+
private readonly ICreateCaseInstanceCommandHandler _createCaseInstanceCommandHandler;
2116
private readonly ILaunchCaseInstanceCommandHandler _launchCaseInstanceCommandHandler;
22-
private readonly IConfirmFormCommandHandler _confirmFormCommandHandler;
23-
private readonly IStopCaseInstanceCommandHandler _stopCaseInstanceCommandHandler;
24-
// private readonly IProcessFlowInstanceQueryRepository _processFlowInstanceQueryRepository;
25-
private readonly IActivateCommandHandler _activateCommandHandler;
26-
private readonly ITerminateCommandHandler _terminateCommandHandler;
2717

28-
public CaseInstancesController(ILaunchCaseInstanceCommandHandler launchCaseInstanceCommandHandler, IConfirmFormCommandHandler confirmFormCommandHandler, IStopCaseInstanceCommandHandler stopCaseInstanceCommandHandler, /* IProcessFlowInstanceQueryRepository processFlowInstanceQueryRepository, */IActivateCommandHandler activateCommandHandler, ITerminateCommandHandler terminateCommandHandler)
18+
public CaseInstancesController(ICreateCaseInstanceCommandHandler createCaseInstanceCommandHandler, ILaunchCaseInstanceCommandHandler launchCaseInstanceCommandHandler)
2919
{
20+
_createCaseInstanceCommandHandler = createCaseInstanceCommandHandler;
3021
_launchCaseInstanceCommandHandler = launchCaseInstanceCommandHandler;
31-
_confirmFormCommandHandler = confirmFormCommandHandler;
32-
_stopCaseInstanceCommandHandler = stopCaseInstanceCommandHandler;
33-
// _processFlowInstanceQueryRepository = processFlowInstanceQueryRepository;
34-
_activateCommandHandler = activateCommandHandler;
35-
_terminateCommandHandler = terminateCommandHandler;
3622
}
3723

3824
/*
@@ -43,6 +29,7 @@ public async Task<IActionResult> Search()
4329
var result = await _processFlowInstanceQueryRepository.Find(ExtractFindWorkflowInstanceParameter(query));
4430
return new OkObjectResult(ToDto(result));
4531
}
32+
*/
4633

4734
[HttpPost]
4835
public async Task<IActionResult> Create([FromBody] CreateCaseInstanceCommand createCaseInstance)
@@ -62,6 +49,7 @@ public async Task<IActionResult> Launch(string id)
6249
return new OkResult();
6350
}
6451

52+
/*
6553
[HttpGet("{id}/stop")]
6654
public async Task<IActionResult> Stop(string id)
6755
{
@@ -256,81 +244,111 @@ private static JObject ToDto(FindResponse<ProcessFlowInstance> resp)
256244
})) }
257245
};
258246
}
247+
*/
259248

260-
private static JObject ToDto(ProcessFlowInstance flowInstance)
249+
private static JObject ToDto(CMMNWorkflowInstance workflowInstance)
261250
{
262251
var result = new JObject
263252
{
264-
{ "id", flowInstance.Id },
265-
{ "create_datetime", flowInstance.CreateDateTime },
266-
{ "template_id", flowInstance.ProcessFlowTemplateId },
267-
{ "name", flowInstance.ProcessFlowName },
268-
{ "context", ToDto(flowInstance.ExecutionContext) }
253+
{ "id", workflowInstance.Id },
254+
{ "create_datetime", workflowInstance.CreateDateTime},
255+
{ "definition_id", workflowInstance.WorkflowDefinitionId },
256+
{ "context", ToDto(workflowInstance.ExecutionContext) },
257+
{ "state", workflowInstance.State }
269258
};
270-
if (flowInstance.Status != null)
259+
var stateHistories = new JArray();
260+
var transitionHistories = new JArray();
261+
var executionHistories = new JArray();
262+
var elts = new JArray();
263+
foreach(var stateHistory in workflowInstance.StateHistories)
271264
{
272-
result.Add("status", Enum.GetName(typeof(ProcessFlowInstanceStatus), flowInstance.Status).ToLowerInvariant());
265+
stateHistories.Add(new JObject
266+
{
267+
{ "state", stateHistory.State },
268+
{ "datetime", stateHistory.UpdateDateTime }
269+
});
273270
}
274271

275-
var planItems = new JArray();
276-
foreach(var planItem in flowInstance.Elements.Where(e => e is CMMNPlanItemDefinition).Cast<CMMNPlanItemDefinition>())
272+
foreach(var transitionHistory in workflowInstance.TransitionHistories)
277273
{
278-
planItems.Add(ToDto(planItem));
274+
transitionHistories.Add(new JObject
275+
{
276+
{ "transition", Enum.GetName(typeof(CMMNTransitions), transitionHistory.Transition) },
277+
{ "datetime", transitionHistory.CreateDateTime }
278+
});
279279
}
280280

281-
var fileItems = new JArray();
282-
foreach(var caseFileItem in flowInstance.Elements.Where(e => e is CMMNCaseFileItem).Cast<CMMNCaseFileItem>())
281+
foreach (var executionHistory in workflowInstance.ExecutionHistories)
283282
{
284-
fileItems.Add(ToDto(caseFileItem));
283+
executionHistories.Add(new JObject
284+
{
285+
{ "start_datetime", executionHistory.StartDateTime },
286+
{ "end_datetime", executionHistory.EndDateTime },
287+
{ "id", executionHistory.WorkflowElementDefinitionId }
288+
});
285289
}
286290

287-
result.Add("items", planItems);
288-
result.Add("fileitems", fileItems);
289-
return result;
290-
}
291-
292-
private static JObject ToDto(CMMNWorkflowInstanceExecutionContext context)
293-
{
294-
var jObj = new JObject();
295-
foreach (var kvp in context.Variables)
291+
foreach(var elt in workflowInstance.WorkflowElementInstances)
296292
{
297-
jObj.Add(kvp.Key, kvp.Value);
293+
elts.Add(ToDto(elt));
298294
}
299295

300-
return jObj;
296+
result.Add("state_histories", stateHistories);
297+
result.Add("transition_histories", transitionHistories);
298+
result.Add("execution_histories", executionHistories);
299+
result.Add("elements", elts);
300+
return result;
301301
}
302302

303-
private static JObject ToDto(CMMNPlanItemDefinition planItem)
303+
private static JObject ToDto(CMMNWorkflowElementInstance elt)
304304
{
305305
var result = new JObject
306306
{
307-
{ "id", planItem.Id },
308-
{ "name", planItem.Name },
309-
{ "version", planItem.Version }
307+
{ "id", elt.Id },
308+
{ "version", elt.Version },
309+
{ "create_datetime", elt.CreateDateTime},
310+
{ "definition_id", elt.WorkflowElementDefinitionId },
311+
{ "form_instanceid", elt.FormInstanceId },
312+
{ "state", elt.State }
310313
};
314+
var stateHistories = new JArray();
311315
var transitionHistories = new JArray();
312-
if (planItem.TransitionHistories != null)
316+
foreach (var stateHistory in elt.StateHistories)
313317
{
314-
foreach(var transitionHistory in planItem.TransitionHistories)
318+
stateHistories.Add(new JObject
315319
{
316-
transitionHistories.Add(new JObject
317-
{
318-
{ "create_datetime", transitionHistory.CreateDateTime },
319-
{ "transition", Enum.GetName(typeof(CMMNPlanItemTransitions), transitionHistory.Transition).ToLowerInvariant() },
320-
{ "version", transitionHistory.Version }
321-
});
322-
}
320+
{ "state", stateHistory.State },
321+
{ "datetime", stateHistory.UpdateDateTime }
322+
});
323323
}
324324

325-
if (planItem.Status != null)
325+
foreach (var transitionHistory in elt.TransitionHistories)
326326
{
327-
result.Add("status", Enum.GetName(typeof(ProcessFlowInstanceElementStatus), planItem.Status).ToLowerInvariant());
327+
transitionHistories.Add(new JObject
328+
{
329+
{ "transition", Enum.GetName(typeof(CMMNTransitions), transitionHistory.Transition) },
330+
{ "datetime", transitionHistory.CreateDateTime }
331+
});
328332
}
329333

330-
result.Add("histories", transitionHistories);
334+
result.Add("state_histories", stateHistories);
335+
result.Add("transition_histories", transitionHistories);
331336
return result;
332337
}
333338

339+
private static JObject ToDto(CMMNWorkflowInstanceExecutionContext context)
340+
{
341+
var jObj = new JObject();
342+
foreach (var kvp in context.Variables)
343+
{
344+
jObj.Add(kvp.Key, kvp.Value);
345+
}
346+
347+
return jObj;
348+
}
349+
350+
/*
351+
334352
private static JObject ToDto(CMMNCaseFileItem fileItem)
335353
{
336354
var result = new JObject();

src/CaseManagement.CMMN/ApplicationBuilderExtensions.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
1-
using Hangfire;
2-
3-
namespace Microsoft.AspNetCore.Builder
1+
namespace Microsoft.AspNetCore.Builder
42
{
53
public static class ApplicationBuilderExtensions
64
{
75
public static IApplicationBuilder UseCMMN(this IApplicationBuilder appBuilder)
86
{
9-
appBuilder.UseHangfireServer();
107
appBuilder.UseMvc();
118
return appBuilder;
129
}

0 commit comments

Comments
 (0)