public virtual void Execute() { PipelineJob[] jobs = RunSteps.Where(SupportsType).ToArray(); for (JobIndex = 0; JobIndex < jobs.Length; JobIndex++) { if (JobIsManifestProcessor()) { ExecuteManifestLoop(); } else { ExecuteJob(); } } JobIndex = -1; PipelineJob Job() => jobs[JobIndex]; void ExecuteJob() => Job().Execute(this); bool JobIsManifestProcessor() => Job().GetType().GetCustomAttributes <ManifestProcessorAttribute>().Any(); bool CanProcessManifest(RequiresManifestDatumTypeAttribute attribute) => attribute.CanProcessManifest(Manifest); bool JobCanProcessManifest() => Job().GetType().GetCustomAttributes <RequiresManifestDatumTypeAttribute>().All(CanProcessManifest); void ExecuteManifestLoop() { for (ManifestIndex = 0; ManifestIndex < manifests.Length; ManifestIndex++) { if (Manifest && JobCanProcessManifest()) { ExecuteJob(); } } ManifestIndex = -1; } }
/// <summary>Gets the include functions.</summary> /// <param name="run">The run.</param> /// <param name="campaign">The campaign.</param> /// <returns></returns> private static RunSteps GetIncludeFunctions(Run run, Campaign campaign) { RunSteps incFunctions = RunSteps.None; if (run.Smooth) { incFunctions |= RunSteps.CXgSmooth; } if (run.ISR && IsIsrApplicableForCampaign(run, campaign)) { incFunctions |= RunSteps.CXgIsr; } if (run.Optimisation && campaign.IncludeOptimisation) { incFunctions |= RunSteps.CXgOptimiser; } if (run.RightSizer && IsRightSizerApplicableForCampaign(run, campaign)) { incFunctions |= RunSteps.CXgRightSizer; var resolvedRightSizerLevel = ResolveRightSizerLevelForCampaign(run, campaign); switch (resolvedRightSizerLevel) { case RightSizerLevel.CampaignLevel: incFunctions |= RunSteps.CXgRightSizerCamp; break; case RightSizerLevel.DetailLevel: incFunctions |= RunSteps.CXgRightSizerDetail; break; } } return(incFunctions); }