dotnet-installer/src/Microsoft.DotNet.ProjectJsonMigration/transforms/AddItemTransform.cs

120 lines
4 KiB
C#
Raw Normal View History

// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Collections.Generic;
using Microsoft.Build.Construction;
2016-08-23 13:50:05 -07:00
using Microsoft.DotNet.ProjectJsonMigration.Models;
2016-08-23 13:50:05 -07:00
namespace Microsoft.DotNet.ProjectJsonMigration.Transforms
{
public class AddItemTransform<T> : ConditionalTransform<T, ProjectItemElement>
{
2016-08-23 13:50:05 -07:00
private readonly ProjectRootElement _itemObjectGenerator = ProjectRootElement.Create();
2016-08-23 13:50:05 -07:00
private readonly string _itemName;
private readonly string _includeValue;
private readonly string _excludeValue;
2016-08-23 13:50:05 -07:00
private readonly Func<T, string> _includeValueFunc;
private readonly Func<T, string> _excludeValueFunc;
2016-08-23 13:50:05 -07:00
private readonly List<ItemMetadataValue<T>> _metadata = new List<ItemMetadataValue<T>>();
public AddItemTransform(
string itemName,
IEnumerable<string> includeValues,
IEnumerable<string> excludeValues,
2016-08-23 13:50:05 -07:00
Func<T, bool> condition)
: this(itemName, string.Join(";", includeValues), string.Join(";", excludeValues), condition) { }
public AddItemTransform(
string itemName,
Func<T, string> includeValueFunc,
Func<T, string> excludeValueFunc,
Func<T, bool> condition)
: base(condition)
{
_itemName = itemName;
_includeValueFunc = includeValueFunc;
_excludeValueFunc = excludeValueFunc;
}
public AddItemTransform(
string itemName,
string includeValue,
Func<T, string> excludeValueFunc,
Func<T, bool> condition)
: base(condition)
{
_itemName = itemName;
_includeValue = includeValue;
_excludeValueFunc = excludeValueFunc;
}
public AddItemTransform(
string itemName,
Func<T, string> includeValueFunc,
string excludeValue,
Func<T, bool> condition)
: base(condition)
{
_itemName = itemName;
_includeValueFunc = includeValueFunc;
_excludeValue = excludeValue;
}
public AddItemTransform(
string itemName,
string includeValue,
string excludeValue,
2016-08-23 13:50:05 -07:00
Func<T, bool> condition)
: base(condition)
{
_itemName = itemName;
_includeValue = includeValue;
_excludeValue = excludeValue;
}
public AddItemTransform<T> WithMetadata(string metadataName, string metadataValue)
{
_metadata.Add(new ItemMetadataValue<T>(metadataName, metadataValue));
return this;
}
public AddItemTransform<T> WithMetadata(
string metadataName,
Func<T, string> metadataValueFunc,
Func<T, bool> writeMetadataConditionFunc = null)
{
_metadata.Add(new ItemMetadataValue<T>(metadataName, metadataValueFunc, writeMetadataConditionFunc));
return this;
}
public AddItemTransform<T> WithMetadata(ItemMetadataValue<T> metadata)
{
_metadata.Add(metadata);
return this;
}
public override ProjectItemElement ConditionallyTransform(T source)
{
string includeValue = _includeValue ?? _includeValueFunc(source);
string excludeValue = _excludeValue ?? _excludeValueFunc(source);
var item = _itemObjectGenerator.AddItem(_itemName, includeValue);
item.Exclude = excludeValue;
foreach (var metadata in _metadata)
{
if (metadata.ShouldWriteMetadata(source))
{
item.AddMetadata(metadata.MetadataName, metadata.GetMetadataValue(source));
}
}
return item;
}
}
}