public static Step CreateManifestStepForExecutionTask(string relativePathToProjectDir, CyPhy.ExecutionTask executionTask) { var step = new Step(); step.Description = executionTask.Attributes.Description; // %project_dir% is relative path to MgaExtensions.MgaExtensions.GetProjectDirectoryPath(testBenchType.Impl.Project) step.Invocation = Regex.Replace(executionTask.Attributes.Invocation, "%project_dir%", relativePathToProjectDir, RegexOptions.CultureInvariant | RegexOptions.IgnoreCase); step.PreProcess = executionTask.Attributes.PreProcess; step.PostProcess = executionTask.Attributes.PostProcess; var splitStrings = new string[] { Environment.NewLine, "\n" }; foreach (var parameterValue in executionTask.Attributes.Parameters.Split(splitStrings, StringSplitOptions.RemoveEmptyEntries)) { Parameter parameter = new Parameter(); parameter.Name = parameterValue; step.Parameters.Add(parameter); } return(step); }
public void AddAllTasks( CyPhy.TestBenchType testBenchType, IEnumerable <global::META.ComComponent> interpreters, string relativePathToProjectDir) { Contract.Requires(testBenchType != null); Contract.Requires(interpreters != null); var workflowRef = testBenchType.Children .WorkflowRefCollection .ToList(); if (workflowRef.Count == 1 && workflowRef[0].AllReferred != null) { var workflow = workflowRef[0].Referred.Workflow; var allTasks = workflow.Children.TaskBaseCollection; var startTask = allTasks .Where(x => x.AllSrcConnections.Count() == 0) .FirstOrDefault(); CyPhy.TaskBase nextTask = startTask; int regularTaskIndex = 0; int regularTaskCount = interpreters.Count(); var processed = new List <CyPhy.TaskBase>(); while (nextTask != null && processed.Contains(nextTask) == false) { processed.Add(nextTask); if (nextTask.Impl.MetaBase.Name == (typeof(CyPhy.Task).Name)) { if (regularTaskIndex < regularTaskCount) { var currTask = interpreters.ElementAt(regularTaskIndex++); if (currTask.result != null && currTask.result.RunCommand != null) { var step = new Step(); step.Invocation = currTask.result.RunCommand; this.Steps.Add(step); } } } else if (nextTask.Impl.MetaBase.Name == (typeof(CyPhy.ExecutionTask).Name)) { CyPhy.ExecutionTask executionTask = ISIS.GME.Dsml.CyPhyML.Classes.ExecutionTask.Cast(nextTask.Impl); var step = new Step(); step.Description = executionTask.Attributes.Description; // %project_dir% is relative path to MgaExtensions.MgaExtensions.GetProjectDirectoryPath(testBenchType.Impl.Project) step.Invocation = Regex.Replace(executionTask.Attributes.Invocation, "%project_dir%", relativePathToProjectDir, RegexOptions.CultureInvariant | RegexOptions.IgnoreCase); step.PreProcess = executionTask.Attributes.PreProcess; step.PostProcess = executionTask.Attributes.PostProcess; var splitStrings = new string[] { Environment.NewLine, "\n" }; foreach (var parameterValue in executionTask.Attributes.Parameters.Split(splitStrings, StringSplitOptions.RemoveEmptyEntries)) { Parameter parameter = new Parameter(); parameter.Name = parameterValue; step.Parameters.Add(parameter); } this.Steps.Add(step); } var flow = nextTask.DstConnections.FlowCollection.FirstOrDefault(); if (flow == null) { nextTask = null; } else { nextTask = flow.DstEnds.TaskBase; } } } }
public void AddAllTasks( CyPhy.TestBenchType testBenchType, IEnumerable <global::META.ComComponent> interpreters, string relativePathToProjectDir) { Contract.Requires(testBenchType != null); Contract.Requires(interpreters != null); var workflowRef = testBenchType.Children .WorkflowRefCollection .ToList(); if (workflowRef.Count == 1 && workflowRef[0].AllReferred != null) { var workflow = workflowRef[0].Referred.Workflow; var allTasks = workflow.Children.TaskBaseCollection; var startTask = allTasks .Where(x => x.AllSrcConnections.Count() == 0) .FirstOrDefault(); CyPhy.TaskBase nextTask = startTask; int regularTaskIndex = 0; int regularTaskCount = interpreters.Count(); var processed = new List <CyPhy.TaskBase>(); while (nextTask != null && processed.Contains(nextTask) == false) { processed.Add(nextTask); if (nextTask.Impl.MetaBase.Name == (typeof(CyPhy.Task).Name)) { if (regularTaskIndex < regularTaskCount) { var currTask = interpreters.ElementAt(regularTaskIndex++); if (currTask.result != null && currTask.result.RunCommand != null) { var step = new Step(); step.Invocation = currTask.result.RunCommand; this.Steps.Add(step); } } } else if (nextTask.Impl.MetaBase.Name == (typeof(CyPhy.ExecutionTask).Name)) { CyPhy.ExecutionTask executionTask = ISIS.GME.Dsml.CyPhyML.Classes.ExecutionTask.Cast(nextTask.Impl); Step step = CreateManifestStepForExecutionTask(relativePathToProjectDir, executionTask); this.Steps.Add(step); } var flow = nextTask.DstConnections.FlowCollection.FirstOrDefault(); if (flow == null) { nextTask = null; } else { nextTask = flow.DstEnds.TaskBase; } } } else if (testBenchType.Impl.MetaBase.Name == typeof(CyPhy.CADTestBench).Name) { // CADTestBench aka Structural FEA Test Bench is assumed to run with only CyPhy2CAD var step = new Step(); step.Invocation = interpreters.Single().result.RunCommand; this.Steps.Add(step); } }