Merge pull request #6341 from elsa-workflows/task/restore-descendants-util
Restore methods for traversing activity execution context hierarchy
This commit is contained in:
commit
a2efe5a941
|
|
@ -183,20 +183,6 @@ public static partial class ActivityExecutionContextExtensions
|
|||
return portProperty.GetCustomAttribute<PortAttribute>()?.Name ?? portProperty.Name;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a flattened list of the current context's ancestors.
|
||||
/// </summary>
|
||||
public static IEnumerable<ActivityExecutionContext> GetAncestors(this ActivityExecutionContext context)
|
||||
{
|
||||
var current = context.ParentActivityExecutionContext;
|
||||
|
||||
while (current != null)
|
||||
{
|
||||
yield return current;
|
||||
current = current.ParentActivityExecutionContext;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Send a signal up the current hierarchy of ancestors.
|
||||
/// </summary>
|
||||
|
|
@ -314,6 +300,68 @@ public static partial class ActivityExecutionContextExtensions
|
|||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a flattened list of the current context's ancestors.
|
||||
/// </summary>
|
||||
public static IEnumerable<ActivityExecutionContext> GetAncestors(this ActivityExecutionContext context)
|
||||
{
|
||||
var current = context.ParentActivityExecutionContext;
|
||||
|
||||
while (current != null)
|
||||
{
|
||||
yield return current;
|
||||
current = current.ParentActivityExecutionContext;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a flattened list of the current context's descendants.
|
||||
/// </summary>
|
||||
public static IEnumerable<ActivityExecutionContext> GetDescendents(this ActivityExecutionContext context)
|
||||
{
|
||||
var children = context.WorkflowExecutionContext.ActivityExecutionContexts.Where(x => x.ParentActivityExecutionContext == context).ToList();
|
||||
|
||||
foreach (var child in children)
|
||||
{
|
||||
yield return child;
|
||||
|
||||
foreach (var descendent in GetDescendents(child))
|
||||
yield return descendent;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a flattened list of the current context's immediate active children.
|
||||
/// </summary>
|
||||
public static IEnumerable<ActivityExecutionContext> GetActiveChildren(this ActivityExecutionContext context)
|
||||
{
|
||||
return context.WorkflowExecutionContext.ActivityExecutionContexts.Where(x => x.ParentActivityExecutionContext == context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a flattened list of the current context's immediate children.
|
||||
/// </summary>
|
||||
public static IEnumerable<ActivityExecutionContext> GetChildren(this ActivityExecutionContext context)
|
||||
{
|
||||
return context.WorkflowExecutionContext.ActivityExecutionContexts.Where(x => x.ParentActivityExecutionContext == context);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a flattened list of the current context's descendants.
|
||||
/// </summary>
|
||||
public static IEnumerable<ActivityExecutionContext> GetDescendants(this ActivityExecutionContext context)
|
||||
{
|
||||
var children = context.WorkflowExecutionContext.ActivityExecutionContexts.Where(x => x.ParentActivityExecutionContext == context).ToList();
|
||||
|
||||
foreach (var child in children)
|
||||
{
|
||||
yield return child;
|
||||
|
||||
foreach (var descendant in child.GetDescendants())
|
||||
yield return descendant;
|
||||
}
|
||||
}
|
||||
|
||||
internal static bool GetHasEvaluatedProperties(this ActivityExecutionContext context) => context.TransientProperties.TryGetValue<bool>("HasEvaluatedProperties", out var value) && value;
|
||||
internal static void SetHasEvaluatedProperties(this ActivityExecutionContext context) => context.TransientProperties["HasEvaluatedProperties"] = true;
|
||||
|
|
|
|||
Loading…
Reference in a new issue