private IBuilder AddProductBuildStep(IBuildContext context, Product product, IBuilder rootBuilder)
{
var productOutput = targetRoot.GetChildDirectory(product.Name, createIfMissing: true);
var copyResultsStep = coreBuilderFactory.CreateCopyResultBuilder(rootBuilder, productOutput);
context.AddBuilder(copyResultsStep);
var resultBuilders = new List<IPostProcessor>();
if (product.PostProcessors.Any())
{
var factories = postProcessorFactories.ToList();
foreach (var pp in product.PostProcessors)
{
var postProcessor = factories
.Select(f => f.CreatePostProcessorFor(product, pp, new[] { copyResultsStep }))
.FirstOrDefault(p => p != null);
if (postProcessor != null)
{
resultBuilders.Add(postProcessor);
}
}
}
if (resultBuilders.Any())
{
var merger = coreBuilderFactory.CreateMergingBuilder(resultBuilders, new DescriptionTag(String.Format("Product {0}'s result builders", product.Name)));
context.AddBuilder(merger);
return merger;
}
else
{
return copyResultsStep;
}
}