internal static ProjectElement GetTargetItem(this ProjectTargetElement target, View view)
{
// get the member name and data from the view, and create/lookup the item.
// return the item.
switch (view.MemberName) {
case "PropertyGroup":
break;
case "ItemGroup":
break;
case "AfterTargets":
break;
default:
//
var taskName = view.MemberName;
if (TaskClasses.Value.ContainsKey(taskName.ToLower())) {
// for tasks we recognize
var tskType = TaskClasses.Value[taskName.ToLower()];
var tsk = target.AddTask(taskName);
var required = tskType.RequiredInputs.ToList();
foreach (var n in view.GetChildPropertyNames()) {
var prop = view.GetProperty(n);
if (n == "Condition") {
tsk.Condition = prop;
continue;
}
if (required.Contains(n)) {
required.Remove(n);
} else {
if (!tskType.OptionalInputs.Contains(n)) {
Event<Warning>.Raise("Unknown Parameter", "Task '{0}' does not appear to have an input parameter '{1}'", taskName, n);
// could we set some item collection based on these?
// TODO: maybe.
}
}
tsk.SetParameter(n, prop.Values.CollapseToString(";"));
}
foreach (var r in required) {
Event<Warning>.Raise("Missing Parameter", "Task '{0}' is missing required input parameter '{1}'", taskName, r);
}
var outputs = tskType.Outputs.ToList();
foreach (var n in view.GetIndexedPropertyNames()) {
var prop = view.GetProperty(n);
// an output paramter.
var nam = prop.GetProperty(prop.GetChildPropertyNames().FirstOrDefault());
if (!tskType.Outputs.Contains(nam.Value)) {
Event<Warning>.Raise("Unknown Parameter", "Task '{0}' does not appear to have an output parameter '{1}'", taskName, nam.Value);
}
if (outputs.Contains(nam.Value)) {
outputs.Remove(nam.Value);
}
tsk.AddOutputProperty(nam.Value, nam.MemberName);
tsk.AddOutputItem(nam.Value, nam.MemberName);
}
foreach (var output in outputs) {
// add in any unreferenced outputs as themselves.
tsk.AddOutputProperty(output, output);
tsk.AddOutputItem(output, output);
}
return tsk;
}
// for tasks we don't recognize
var tsk2 = target.AddTask(taskName);
Event<Warning>.Raise("Unrecognized Task", "Task '{0}' is not recognized.", taskName);
foreach (var n in view.GetChildPropertyNames()) {
var prop = view.GetProperty(n);
if(n == "Condition") {
tsk2.Condition = prop;
continue;
}
tsk2.SetParameter(n, prop.Values.CollapseToString(";"));
}
foreach (var n in view.GetIndexedPropertyNames()) {
var prop = view.GetProperty(n);
// an output paramter.
var nam = prop.GetProperty(prop.GetChildPropertyNames().FirstOrDefault());
tsk2.AddOutputProperty(nam.Value, nam.MemberName);
tsk2.AddOutputItem(nam.Value, nam.MemberName);
}
return tsk2;
}
return null;
}