/// <summary>
        /// Evaluates the pending changes for policy violations
        /// </summary>
        /// <returns></returns>
        public override PolicyFailure[] Evaluate()
        {
            try
            {
                TellMe.Instance.TrackEvent("BranchPolicyEvaluate");
                List<PolicyFailure> policyFailures = new List<PolicyFailure>();
                Stopwatch partialTimer = new Stopwatch();
                Stopwatch wholeProcessTimer = new Stopwatch();
                wholeProcessTimer.Start();

                BranchPatternEvaluator ev = new BranchPatternEvaluator();
                // process each file in the set of pending changes
                if (_pendingCheckin != null)
                {
                    partialTimer.Start();
                    List<String> serverItems = (from x in PendingCheckin.PendingChanges.CheckedPendingChanges select x.ServerItem).ToList();
                    TellMe.Instance.TrackMetric("PendingCheckinRetrieve", partialTimer.ElapsedMilliseconds);
                    TellMe.Instance.TrackMetric("PendingCheckinCount", serverItems.Count);
                    List<BranchPattern> matchingBranchPatterns = ev.EvaluateServerPaths(serverItems, branchPatterns);
                    TellMe.Instance.TrackMetric("BranchPolicyDetectedCount", matchingBranchPatterns.Count);
                    List<BranchPolicyFailure> branchPolicyFailures = new List<BranchPolicyFailure>();
                    foreach (BranchPattern bp in matchingBranchPatterns)
                    {
                     branchPolicyFailures.AddRange( bp.EvaluatePendingCheckin(_pendingCheckin ));
                    }
                    policyFailures = (from bpf in branchPolicyFailures select new PolicyFailure(bpf.Message, this)).ToList();
                }
                TellMe.Instance.TrackMetric("BranchPolicyEvaluateTimespan", wholeProcessTimer.ElapsedMilliseconds);
                return policyFailures.ToArray();
            }
            catch (Exception ex)
            {
                TellMe.Instance.TrackException(ex);
                throw ex;
            }
            return new PolicyFailure[] { new PolicyFailure(string.Format("There was an error evaluating the policy. Pass the session ID {0} to your administrator.", TellMe.Instance.Context.Session.Id), this) };

        }
 public void Init()
 {
     evaluator = new BranchPatternEvaluator();
 }