private static void TraverseActivities(BaseTraversalObject activity, int level) { _logger.Trace($"Converting {activity.DisplayName} to traversal object."); _logger.Trace($"In Level: {level}."); AddActivityToTransferObject(activity, level); // add any variables in current scope to transfer object (as global scope variable) if (activity.Variables.Any()) { _logger.Trace($"Has {activity.Variables.Count()} variables."); AddVariablesToTransferObject(activity.Variables); } // evaluate any activities in scope _logger.Trace($"Has {activity.Activities.Count()} child activities."); foreach (var childActivity in activity.Activities) { // convert child to traversal object var newActivity = FromGenericWWFObject.ToBaseTraversalObject(childActivity); // traverse child if (newActivity.IsSequence || newActivity.IsForEachActivity || newActivity.IsIfActivity || newActivity.IsTryCatchActivity) { TraverseActivities(newActivity, level + 1); } else { AddActivityToTransferObject(newActivity, level); } } // evaluate if then if (activity.Then != null) { _logger.Trace("In Then."); var thenActivity = FromGenericWWFObject.ToBaseTraversalObject(activity.Then); TraverseActivities(thenActivity, level + 1); } // evaluate if else if (activity.Else != null) { _logger.Trace("In Else"); var elseActivity = FromGenericWWFObject.ToBaseTraversalObject(activity.Else); TraverseActivities(elseActivity, level + 1); } }
private static void AddActivityToTransferObject(BaseTraversalObject activity, int level) { if (activity.IsSequence) { TransferObject.Activities.Add((level, new TransferSequenceObject { DisplayName = activity.DisplayName })); } if (activity.IsIfActivity) { TransferObject.Activities.Add((level, new TransferIfObject { DisplayName = activity.DisplayName, Condition = activity.Condition })); } if (activity.IsForEachActivity) { TransferObject.Activities.Add((level, new TransferForEachObject { DisplayName = activity.DisplayName, Values = activity.Values, Argument = activity.Argument })); } if (activity.IsTryCatchActivity) { TransferObject.Activities.Add((level, new TransferTryCatchObject { DisplayName = activity.DisplayName })); } if (activity.IsCodeActivity) { TransferObject.Activities.Add((level, new TransferCodeActivity { DisplayName = activity.DisplayName, Arguments = activity.Arguments.Select(a => a.Value).ToList() })); } }