-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathMiscHelpers.cs
121 lines (105 loc) · 3.59 KB
/
MiscHelpers.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
namespace TFSAggregator
{
public static class MiscHelpers
{
static string runSeparator = new string('-', 80);
public static void AddIfUnique(this List<WorkItem> workItemList, WorkItem workItem)
{
if (workItemList.Where(x=>x.Id == workItem.Id).Count() == 0)
workItemList.Add(workItem);
}
public static T LoadAttribute<T>(this XElement xmlElement, string attributeName, T defaultValue) where T : IConvertible
{
try
{
return (T)Convert.ChangeType(xmlElement.Attribute(attributeName).Value, typeof(T));
}
catch (Exception)
{
return defaultValue;
}
}
/// <summary>
/// Used to load an attribute from xml. If nothing is there then the default value is returned.
/// </summary>
public static TEnumType LoadEnumAttribute<TEnumType>(this XElement xmlElement, string attributeName, TEnumType defaultValue) where TEnumType : struct
{
try
{
TEnumType outEnum;
// try and see if we have a valid value
bool success = Enum.TryParse(xmlElement.Attribute(attributeName).Value, true, out outEnum);
// If we do then use it. If not then return the default
return success ? outEnum : defaultValue;
}
catch (Exception)
{
return defaultValue;
}
}
/// <summary>
/// Evaluate all conditions. All must be true to perform the aggregation.
/// </summary>
/// <param name="conditions"></param>
/// <param name="workItem"></param>
/// <returns></returns>
public static bool AreAllConditionsMet(this List<Condition> conditions, WorkItem workItem)
{
bool areAllTrue = true;
foreach (Condition condition in conditions)
{
if (!condition.Compare(workItem))
{
areAllTrue = false;
break;
}
}
return areAllTrue;
}
public static void LogMessage(string message, bool isError)
{
if (TFSAggregatorSettings.LoggingIsEnabled)
{
string[] lines = message.Split('\n');
foreach(string line in lines)
Trace.WriteLine(String.Format("TFSAggregator: {0}", line));
}
if (isError)
EventLog.WriteEntry(TFSAggregatorSettings.EventLogSource, String.Format("TFSAggregator: {0}", message), EventLogEntryType.Error);
}
public static void LogMessage(string message)
{
LogMessage(message, false);
}
public static void AddRunSeparatorToLog()
{
LogMessage(runSeparator);
}
public enum LoggingLevel
{
None,
Diagnostic
}
public static StringBuilder GetInvalidWorkItemFieldsList(WorkItem wi)
{
StringBuilder sb = new StringBuilder();
if (wi.IsValid())
{
sb.AppendLine("None");
}
else
{
foreach (string s in wi.Validate())
sb.AppendLine(s);
}
return sb;
}
}
}