Skip to content

Commit 4c77e49

Browse files
Thierry Habarthabarthierry-hue
authored andcommitted
Ticket #4 : Launch case instance
1 parent 3f421ed commit 4c77e49

46 files changed

Lines changed: 1181 additions & 57 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.

CaseManagement.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00. Other", "00. Other", "{
2121
EndProject
2222
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CaseManagement.Workflow", "src\CaseManagement.Workflow\CaseManagement.Workflow.csproj", "{E3E72DF1-F427-4FEA-8F84-FB194EA20D07}"
2323
EndProject
24+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CaseManagement.CMMN.Acceptance.Tests", "tests\CaseManagement.CMMN.Acceptance.Tests\CaseManagement.CMMN.Acceptance.Tests.csproj", "{2D288182-CD6B-46AF-B420-F2038875F6BC}"
25+
EndProject
2426
Global
2527
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2628
Debug|Any CPU = Debug|Any CPU
@@ -47,6 +49,10 @@ Global
4749
{E3E72DF1-F427-4FEA-8F84-FB194EA20D07}.Debug|Any CPU.Build.0 = Debug|Any CPU
4850
{E3E72DF1-F427-4FEA-8F84-FB194EA20D07}.Release|Any CPU.ActiveCfg = Release|Any CPU
4951
{E3E72DF1-F427-4FEA-8F84-FB194EA20D07}.Release|Any CPU.Build.0 = Release|Any CPU
52+
{2D288182-CD6B-46AF-B420-F2038875F6BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
53+
{2D288182-CD6B-46AF-B420-F2038875F6BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
54+
{2D288182-CD6B-46AF-B420-F2038875F6BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
55+
{2D288182-CD6B-46AF-B420-F2038875F6BC}.Release|Any CPU.Build.0 = Release|Any CPU
5056
EndGlobalSection
5157
GlobalSection(SolutionProperties) = preSolution
5258
HideSolutionNode = FALSE
@@ -57,6 +63,7 @@ Global
5763
{2FC26859-C75B-4C4C-82AE-E46D8B4996DD} = {A632EFC3-730B-46D7-B669-91962DFA8947}
5864
{5BBD9089-565C-47F9-A284-65A41BEB3EFC} = {A632EFC3-730B-46D7-B669-91962DFA8947}
5965
{E3E72DF1-F427-4FEA-8F84-FB194EA20D07} = {9360C4A1-A2AA-4493-BBDC-4044D78D8F4B}
66+
{2D288182-CD6B-46AF-B420-F2038875F6BC} = {A632EFC3-730B-46D7-B669-91962DFA8947}
6067
EndGlobalSection
6168
GlobalSection(ExtensibilityGlobals) = postSolution
6269
SolutionGuid = {D2CFBF2E-D493-42F7-B339-01A3070C2B5E}

src/CaseManagement.BPMN/ProcessInstance/Processors/BPMNReceiveTaskProcessor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class BPMNReceiveTaskProcessor : IProcessFlowElementProcessor
1313
public Task Handle(ProcessFlowInstanceElement pfe, ProcessFlowInstanceExecutionContext context)
1414
{
1515
var receiveTask = pfe as BPMNReceiveTask;
16-
receiveTask.Start();
16+
receiveTask.Run();
1717
if (context.CallingOperation != receiveTask.OperationId)
1818
{
1919
return Task.FromResult(0);

src/CaseManagement.BPMN/ProcessInstance/Processors/BPMNServiceTaskProcessor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class BPMNServiceTaskProcessor : IProcessFlowElementProcessor
1313

1414
public async Task Handle(ProcessFlowInstanceElement pfe, ProcessFlowInstanceExecutionContext context)
1515
{
16-
pfe.Start();
16+
pfe.Run();
1717
var serviceTask = (BPMNServiceTask)pfe;
1818
var type = Type.GetType(serviceTask.FullQualifiedName);
1919
var instance = Activator.CreateInstance(type) as WorkflowTaskDelegate;
Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,82 @@
1-
namespace CaseManagement.CMMN.Apis
1+
using CaseManagement.CMMN.Persistence;
2+
using Microsoft.AspNetCore.Mvc;
3+
using Newtonsoft.Json.Linq;
4+
using System.Linq;
5+
using System.Threading.Tasks;
6+
7+
namespace CaseManagement.CMMN.Apis
28
{
3-
public class CaseDefinitionsController
9+
[Route(CMMNConstants.RouteNames.CaseDefinitions)]
10+
public class CaseDefinitionsController : Controller
411
{
12+
private readonly ICMMNDefinitionsQueryRepository _queryRepository;
13+
14+
public CaseDefinitionsController(ICMMNDefinitionsQueryRepository queryRepository)
15+
{
16+
_queryRepository = queryRepository;
17+
}
18+
19+
[HttpGet]
20+
public async Task<IActionResult> Get()
21+
{
22+
var result = await _queryRepository.GetAll();
23+
return new OkObjectResult(new JArray(result.Select(r => new JObject
24+
{
25+
{ "id", r.id },
26+
{ "name", r.name },
27+
{ "create_datetime", r.creationDate }
28+
})));
29+
}
30+
31+
[HttpGet("{id}")]
32+
public async Task<IActionResult> Get(string id)
33+
{
34+
var result = await _queryRepository.FindDefinitionById(id);
35+
if (result == null)
36+
{
37+
return new NotFoundResult();
38+
}
39+
40+
return new OkObjectResult(ToDto(result));
41+
}
42+
43+
[HttpGet("{id}/cases")]
44+
public async Task<IActionResult> GetCases(string id)
45+
{
46+
var result = await _queryRepository.FindDefinitionById(id);
47+
if (result == null)
48+
{
49+
return new NotFoundResult();
50+
}
51+
52+
return new OkObjectResult(result.@case);
53+
}
54+
55+
private static JObject ToDto(tDefinitions def)
56+
{
57+
var result = new JObject
58+
{
59+
{ "id", def.id },
60+
{ "name", def.name },
61+
{ "create_datetime", def.creationDate },
62+
};
63+
result.Add("cases", ToDto(def.@case));
64+
return result;
65+
}
66+
67+
private static JArray ToDto(tCase[] cases)
68+
{
69+
var cmmnCases = new JArray();
70+
foreach (var cmmnCase in cases)
71+
{
72+
cmmnCases.Add(new JObject
73+
{
74+
{ "id", cmmnCase.id },
75+
{ "name", cmmnCase.name }
76+
});
77+
}
78+
79+
return cmmnCases;
80+
}
581
}
682
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using CaseManagement.CMMN.CaseInstance.Commands;
2+
using CaseManagement.CMMN.CaseInstance.Handlers;
3+
using Microsoft.AspNetCore.Mvc;
4+
using Newtonsoft.Json.Linq;
5+
using System.Net;
6+
using System.Threading.Tasks;
7+
8+
namespace CaseManagement.CMMN.Apis
9+
{
10+
[Route(CMMNConstants.RouteNames.CaseInstances)]
11+
public class CaseInstancesController : Controller
12+
{
13+
private readonly ICreateCaseInstanceCommandHandler _createCaseInstanceCommandHandler;
14+
private readonly ILaunchCaseInstanceCommandHandler _launchCaseInstanceCommandHandler;
15+
16+
public CaseInstancesController(ICreateCaseInstanceCommandHandler createCaseInstanceCommandHandler, ILaunchCaseInstanceCommandHandler launchCaseInstanceCommandHandler)
17+
{
18+
_createCaseInstanceCommandHandler = createCaseInstanceCommandHandler;
19+
}
20+
21+
[HttpPost]
22+
public async Task<IActionResult> Create([FromBody] CreateCaseInstanceCommand createCaseInstance)
23+
{
24+
var result = await _createCaseInstanceCommandHandler.Handle(createCaseInstance);
25+
return new ContentResult
26+
{
27+
StatusCode = (int)HttpStatusCode.Created,
28+
Content = new JObject
29+
{
30+
{ "id", result }
31+
}.ToString()
32+
};
33+
}
34+
35+
[HttpGet("{id}/launch")]
36+
public async Task<IActionResult> Launch(string id)
37+
{
38+
await _launchCaseInstanceCommandHandler.Handle(new LaunchCaseInstanceCommand { CaseInstanceId = id });
39+
return null;
40+
}
41+
42+
[HttpGet("{id}")]
43+
public async Task<IActionResult> Get(string id)
44+
{
45+
return null;
46+
}
47+
}
48+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace Microsoft.AspNetCore.Builder
2+
{
3+
public static class ApplicationBuilderExtensions
4+
{
5+
public static IApplicationBuilder UseCMMN(this IApplicationBuilder appBuilder)
6+
{
7+
appBuilder.UseMvc();
8+
return appBuilder;
9+
}
10+
}
11+
}

src/CaseManagement.CMMN/CMMNConstants.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ public static class CMMNConstants
55
public static class RouteNames
66
{
77
public const string CaseDefinitions = "case-definitions";
8+
public const string CaseInstances = "case-instances";
89
}
910
}
1011
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using CaseManagement.CMMN.Parser;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
5+
namespace CaseManagement.CMMN
6+
{
7+
public class CMMNDefinitionsBuilder
8+
{
9+
private readonly ICollection<tDefinitions> _definitions;
10+
11+
public CMMNDefinitionsBuilder()
12+
{
13+
_definitions = new List<tDefinitions>();
14+
}
15+
16+
public CMMNDefinitionsBuilder AddDefinition(tDefinitions def)
17+
{
18+
_definitions.Add(def);
19+
return this;
20+
}
21+
22+
public CMMNDefinitionsBuilder ImportDefinition(string filePath)
23+
{
24+
var parser = new CMMNParser();
25+
var def = parser.ParseWSDL(File.ReadAllText(filePath));
26+
_definitions.Add(def);
27+
return this;
28+
}
29+
30+
public ICollection<tDefinitions> Build()
31+
{
32+
return _definitions;
33+
}
34+
}
35+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using CaseManagement.CMMN.Persistence;
2+
using CaseManagement.CMMN.Persistence.InMemory;
3+
using Microsoft.Extensions.DependencyInjection;
4+
using System;
5+
using System.Collections.Generic;
6+
7+
namespace CaseManagement.CMMN
8+
{
9+
public class CMMNServerBuilder
10+
{
11+
private readonly IServiceCollection _services;
12+
13+
public CMMNServerBuilder(IServiceCollection services)
14+
{
15+
_services = services;
16+
}
17+
18+
public CMMNServerBuilder AddDefinitions(Action<CMMNDefinitionsBuilder> callback)
19+
{
20+
var builder = new CMMNDefinitionsBuilder();
21+
callback(builder);
22+
_services.AddSingleton<ICMMNDefinitionsQueryRepository>(new InMemoryCMMNDefinitionsQueryRepository(builder.Build()));
23+
return this;
24+
}
25+
26+
public CMMNServerBuilder AddDefinitions(ICollection<tDefinitions> defs)
27+
{
28+
_services.AddSingleton<ICMMNDefinitionsQueryRepository>(new InMemoryCMMNDefinitionsQueryRepository(defs));
29+
return this;
30+
}
31+
}
32+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System.Runtime.Serialization;
2+
3+
namespace CaseManagement.CMMN.CaseInstance.Commands
4+
{
5+
[DataContract]
6+
public class CreateCaseInstanceCommand
7+
{
8+
[DataMember(Name = "case_definition_id")]
9+
public string CaseDefinitionId { get; set; }
10+
[DataMember(Name = "case_id")]
11+
public string CasesId { get; set; }
12+
}
13+
}

0 commit comments

Comments
 (0)