2016-08-22 12:21:34 -07:00
|
|
|
// 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-22 12:21:34 -07:00
|
|
|
|
2016-08-23 13:50:05 -07:00
|
|
|
namespace Microsoft.DotNet.ProjectJsonMigration.Transforms
|
2016-08-22 12:21:34 -07:00
|
|
|
{
|
|
|
|
public class AddItemTransform<T> : ConditionalTransform<T, ProjectItemElement>
|
|
|
|
{
|
2016-08-23 13:50:05 -07:00
|
|
|
private readonly ProjectRootElement _itemObjectGenerator = ProjectRootElement.Create();
|
2016-08-22 12:21:34 -07:00
|
|
|
|
2016-08-23 13:50:05 -07:00
|
|
|
private readonly string _itemName;
|
|
|
|
private readonly string _includeValue;
|
|
|
|
private readonly string _excludeValue;
|
2016-08-22 12:21:34 -07:00
|
|
|
|
2016-08-23 13:50:05 -07:00
|
|
|
private readonly Func<T, string> _includeValueFunc;
|
|
|
|
private readonly Func<T, string> _excludeValueFunc;
|
2016-08-22 12:21:34 -07:00
|
|
|
|
2016-08-23 13:50:05 -07:00
|
|
|
private readonly List<ItemMetadataValue<T>> _metadata = new List<ItemMetadataValue<T>>();
|
2016-08-22 12:21:34 -07:00
|
|
|
|
|
|
|
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) { }
|
2016-08-22 12:21:34 -07:00
|
|
|
|
|
|
|
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)
|
2016-08-22 12:21:34 -07:00
|
|
|
: 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;
|
|
|
|
}
|
|
|
|
|
2016-10-10 16:07:31 -05:00
|
|
|
public AddItemTransform<T> WithMetadata(
|
|
|
|
string metadataName,
|
|
|
|
Func<T, string> metadataValueFunc,
|
|
|
|
Func<T, bool> writeMetadataConditionFunc = null)
|
2016-08-22 12:21:34 -07:00
|
|
|
{
|
2016-10-10 16:07:31 -05:00
|
|
|
_metadata.Add(new ItemMetadataValue<T>(metadataName, metadataValueFunc, writeMetadataConditionFunc));
|
2016-08-22 12:21:34 -07:00
|
|
|
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)
|
|
|
|
{
|
2016-10-10 14:04:30 -05:00
|
|
|
if (metadata.ShouldWriteMetadata(source))
|
|
|
|
{
|
|
|
|
item.AddMetadata(metadata.MetadataName, metadata.GetMetadataValue(source));
|
|
|
|
}
|
2016-08-22 12:21:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
return item;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|