-
Notifications
You must be signed in to change notification settings - Fork 175
Expand file tree
/
Copy pathDefaultActivityResolver.cs
More file actions
73 lines (65 loc) · 2.52 KB
/
DefaultActivityResolver.cs
File metadata and controls
73 lines (65 loc) · 2.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using System.Text.Json.Nodes;
using Elsa.Api.Client.Extensions;
using Elsa.Studio.Workflows.Domain.Contracts;
using Elsa.Studio.Workflows.Domain.Models;
namespace Elsa.Studio.Workflows.Resolvers;
/// <summary>
/// A default resolver.
/// </summary>
public class DefaultActivityResolver : IActivityResolver
{
/// <inheritdoc />
public int Priority => -1;
/// <inheritdoc />
public bool GetSupportsActivity(JsonObject activity) => true;
/// <inheritdoc />
public ValueTask<IEnumerable<EmbeddedActivity>> GetActivitiesAsync(
JsonObject activity,
CancellationToken cancellationToken = default
)
{
var embedded = new List<EmbeddedActivity>();
foreach (var (propName, node) in activity)
{
switch (node)
{
// 1) direct child activity:
case JsonObject childObj when childObj.IsActivity():
embedded.Add(new EmbeddedActivity(childObj, propName));
break;
// 2) array of activities:
case JsonArray arr:
foreach (var item in arr.OfType<JsonObject>())
{
// e.g. expectedStatusCodes: pick up item.activity
if (
item.TryGetPropertyValue("activity", out var actNode)
&& actNode is JsonObject actObj
&& actObj.IsActivity()
)
{
embedded.Add(new EmbeddedActivity(actObj, propName));
}
else if (item.IsActivity())
{
embedded.Add(new EmbeddedActivity(item, propName));
}
}
break;
}
// 3) special‑case any nested Flowchart under "body":
if (
node is JsonObject container
&& container.TryGetPropertyValue("body", out var bodyNode)
&& bodyNode is JsonObject bodyObj
&& bodyObj.TryGetPropertyValue("activities", out var activitiesNode)
&& activitiesNode is JsonArray childActivities
)
{
foreach (var child in childActivities.OfType<JsonObject>())
embedded.Add(new EmbeddedActivity(child, propName));
}
}
return new ValueTask<IEnumerable<EmbeddedActivity>>(embedded);
}
}