Skip to content

Commit b668ab2

Browse files
Ticket #112 : Implement Message Event - BPMN
1 parent 29afe9d commit b668ab2

43 files changed

Lines changed: 589 additions & 224 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.

src/CaseManagement.BPMN.AspNetCore/Apis/ProcessInstancesController.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,24 @@ public async Task<IActionResult> Start(string id, CancellationToken cancellation
8383
}
8484
}
8585

86+
[HttpPost("{id}/messages")]
87+
public async Task<IActionResult> ConsumeMessage(string id, [FromBody] ConsumeMessageInstanceCommand consumeMessageInstanceCommand, CancellationToken token)
88+
{
89+
try
90+
{
91+
consumeMessageInstanceCommand.FlowNodeInstanceId = id;
92+
await _mediator.Send(consumeMessageInstanceCommand, token);
93+
return new OkResult();
94+
}
95+
catch (UnknownFlowInstanceException ex)
96+
{
97+
return this.ToError(new List<KeyValuePair<string, string>>
98+
{
99+
new KeyValuePair<string, string>("bad_request", ex.Message)
100+
}, HttpStatusCode.NotFound, Request);
101+
}
102+
}
103+
86104
[HttpPost("{id}/statetransitions")]
87105
public async Task<IActionResult> MakeTransition(string id, [FromBody] MakeStateTransitionCommand stateTransitionCommand, CancellationToken token)
88106
{

src/CaseManagement.BPMN.Host/Bpmns/GetWeatherInformation.bpmn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<outgoing>SequenceFlow_0h21x7r</outgoing>
66
</startEvent>
77
<sequenceFlow id="SequenceFlow_0h21x7r" sourceRef="StartEvent_1y45yut" targetRef="Task_1hcentk" />
8-
<serviceTask id="Task_1hcentk" name="Check weather conditions" implementation="##csharpcallback" cmg:className="CaseManagement.BPMN.Host.Delegates.GetWeatherInformationDelegate">
8+
<serviceTask id="Task_1hcentk" name="Check weather conditions" implementation="##csharpcallback" cmg:delegateId="GetWeatherInformationDelegate">
99
<incoming>SequenceFlow_0h21x7r</incoming>
1010
<outgoing>Flow_0ofj7xp</outgoing>
1111
</serviceTask>

src/CaseManagement.BPMN.Host/Delegates/GetWeatherInformationDelegate.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace CaseManagement.BPMN.Host.Delegates
99
{
1010
public class GetWeatherInformationDelegate : IDelegateHandler
1111
{
12-
public Task<ICollection<MessageToken>> Execute(ICollection<MessageToken> incoming, CancellationToken cancellationToken)
12+
public Task<ICollection<MessageToken>> Execute(ICollection<MessageToken> incoming, DelegateConfigurationAggregate delegateConfiguration, CancellationToken cancellationToken)
1313
{
1414
ICollection<MessageToken> result = new List<MessageToken>();
1515
var rnd = new Random();
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
using CaseManagement.BPMN.Domains;
2+
using CaseManagement.BPMN.Exceptions;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Net;
7+
using System.Net.Mail;
8+
using System.Threading;
9+
using System.Threading.Tasks;
10+
11+
namespace CaseManagement.BPMN.Host.Delegates
12+
{
13+
public class SendEmailDelegate : IDelegateHandler
14+
{
15+
public Task<ICollection<MessageToken>> Execute(ICollection<MessageToken> incoming, DelegateConfigurationAggregate delegateConfiguration, CancellationToken cancellationToken)
16+
{
17+
var email = incoming.FirstOrDefault(i => i.Name == "email");
18+
if (email == null)
19+
{
20+
throw new BPMNProcessorException("Email parameter is missing");
21+
}
22+
23+
24+
var parameter = SendDelegateParameter.Build(delegateConfiguration);
25+
using (var smtpClient = new SmtpClient(parameter.SmtpHost)
26+
{
27+
Port = parameter.SmtpPort,
28+
Credentials = new NetworkCredential(parameter.SmtpUserName, parameter.SmtpPassword),
29+
EnableSsl = parameter.SmtpEnableSsl
30+
})
31+
{
32+
var mailMessage = new MailMessage
33+
{
34+
35+
};
36+
}
37+
38+
throw new NotImplementedException();
39+
}
40+
41+
private class SendDelegateParameter
42+
{
43+
public string HttpBody { get; set; }
44+
public string Subject { get; set; }
45+
public string SmtpHost { get; set; }
46+
public int SmtpPort { get; set; }
47+
public string SmtpUserName { get; set; }
48+
public string SmtpPassword { get; set; }
49+
public bool SmtpEnableSsl { get; set; }
50+
51+
public static SendDelegateParameter Build(DelegateConfigurationAggregate delegateConfiguration)
52+
{
53+
return new SendDelegateParameter
54+
{
55+
HttpBody = delegateConfiguration.GetValue("httpBody"),
56+
Subject = delegateConfiguration.GetValue("subject"),
57+
SmtpHost = delegateConfiguration.GetValue("smtpHost"),
58+
SmtpPort = delegateConfiguration.GetValueNumber("smtpPort"),
59+
SmtpUserName = delegateConfiguration.GetValue("smtpUserName"),
60+
SmtpPassword = delegateConfiguration.GetValue("smtpPassword"),
61+
SmtpEnableSsl = delegateConfiguration.GetValueBoolean("smtpEnableSsl")
62+
};
63+
}
64+
}
65+
}
66+
}

src/CaseManagement.BPMN.Host/Startup.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Copyright (c) SimpleIdServer. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3-
using CaseManagement.BPMN.AspNetCore.Apis;
3+
using CaseManagement.BPMN.Host.Delegates;
44
using Microsoft.AspNetCore.Authentication.JwtBearer;
55
using Microsoft.AspNetCore.Builder;
66
using Microsoft.AspNetCore.Hosting;
@@ -11,6 +11,7 @@
1111
using Microsoft.IdentityModel.Tokens;
1212
using Newtonsoft.Json;
1313
using System;
14+
using System.Collections.Concurrent;
1415
using System.Collections.Generic;
1516
using System.IO;
1617
using System.Linq;
@@ -65,7 +66,10 @@ public void ConfigureServices(IServiceCollection services)
6566
{
6667
opts.WSHumanTaskAPI = "http://localhost:60006";
6768
opts.CallbackUrl = "http://localhost:60007/processinstances/{id}/complete/{eltId}";
68-
}).AddProcessFiles(files);
69+
}).AddProcessFiles(files).AddDelegateConfigurations(new ConcurrentBag<Domains.DelegateConfigurationAggregate>
70+
{
71+
Domains.DelegateConfigurationAggregate.Create("GetWeatherInformationDelegate", typeof(GetWeatherInformationDelegate).FullName)
72+
});
6973
services.AddSwaggerGen();
7074
services.Configure<ForwardedHeadersOptions>(options =>
7175
{

src/CaseManagement.BPMN.Persistence.EF/BPMNDbContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using CaseManagement.BPMN.Domains;
2+
using CaseManagement.BPMN.Domains.DelegateConfiguration;
23
using Microsoft.EntityFrameworkCore;
34

45
namespace CaseManagement.BPMN.Persistence.EF
@@ -9,6 +10,7 @@ public BPMNDbContext(DbContextOptions<BPMNDbContext> dbContextOptions) : base(db
910

1011
public DbSet<ProcessInstanceAggregate> ProcessInstances { get; set; }
1112
public DbSet<ProcessFileAggregate> ProcessFiles { get; set; }
13+
public DbSet<DelegateConfigurationAggregate> DelegateConfigurations { get; set; }
1214

1315
protected override void OnModelCreating(ModelBuilder modelBuilder)
1416
{
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using CaseManagement.BPMN.Domains;
2+
using Microsoft.EntityFrameworkCore;
3+
using System.Threading;
4+
using System.Threading.Tasks;
5+
6+
namespace CaseManagement.BPMN.Persistence.EF.Persistence
7+
{
8+
public class DelegateConfigurationRepository : IDelegateConfigurationRepository
9+
{
10+
private readonly BPMNDbContext _dbContext;
11+
12+
public DelegateConfigurationRepository(BPMNDbContext dbContext)
13+
{
14+
_dbContext = dbContext;
15+
}
16+
17+
public Task<DelegateConfigurationAggregate> Get(string delegateId, CancellationToken cancellationToken)
18+
{
19+
return _dbContext.DelegateConfigurations.FirstOrDefaultAsync(d => d.AggregateId == delegateId, cancellationToken);
20+
}
21+
}
22+
}

src/CaseManagement.BPMN.Persistence.EF/ServiceCollectionExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public static IServiceCollection AddBPMNStoreEF(this IServiceCollection services
1414
services.AddTransient<IProcessInstanceQueryRepository, ProcessInstanceQueryRepository>();
1515
services.AddTransient<IProcessFileCommandRepository, ProcessFileCommandRepository>();
1616
services.AddTransient<IProcessFileQueryRepository, ProcessFileQueryRepository>();
17+
services.AddTransient<IDelegateConfigurationRepository, DelegateConfigurationRepository>();
1718
services.AddDbContext<BPMNDbContext>(optionsAction, ServiceLifetime.Transient);
1819
return services;
1920
}

src/CaseManagement.BPMN.SqlServer.Host/Bpmns/GetWeatherInformation.bpmn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<outgoing>SequenceFlow_0h21x7r</outgoing>
66
</startEvent>
77
<sequenceFlow id="SequenceFlow_0h21x7r" sourceRef="StartEvent_1y45yut" targetRef="Task_1hcentk" />
8-
<serviceTask id="Task_1hcentk" name="Check weather conditions" implementation="##csharpcallback" cmg:className="CaseManagement.BPMN.SqlServer.Host.Delegates.GetWeatherInformationDelegate">
8+
<serviceTask id="Task_1hcentk" name="Check weather conditions" implementation="##csharpcallback" cmg:delegateId="GetWeatherInformationDelegate">
99
<incoming>SequenceFlow_0h21x7r</incoming>
1010
<outgoing>Flow_0ofj7xp</outgoing>
1111
</serviceTask>

src/CaseManagement.BPMN.SqlServer.Host/Delegates/GetWeatherInformationDelegate.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace CaseManagement.BPMN.SqlServer.Host.Delegates
99
{
1010
public class GetWeatherInformationDelegate : IDelegateHandler
1111
{
12-
public Task<ICollection<MessageToken>> Execute(ICollection<MessageToken> incoming, CancellationToken cancellationToken)
12+
public Task<ICollection<MessageToken>> Execute(ICollection<MessageToken> incoming, DelegateConfigurationAggregate delegateConfiguration, CancellationToken cancellationToken)
1313
{
1414
ICollection<MessageToken> result = new List<MessageToken>();
1515
var rnd = new Random();

0 commit comments

Comments
 (0)