private void EvaluateCheckIn()
{
this.Logger().Trace("EvaluateCheckIn");
var pendingChanges = PendingChanges
.Where(model => model.IncludeChange)
.Select(model => model.Change)
.ToArray();
if (!pendingChanges.Any())
{
CheckinEvaluationResult = null;
CheckinNotes.Clear();
return;
}
var currentCheckinNoteDefinitions = _workspaceServiceModel.checkinNotesCacheWrapper.GetCheckinNotes(pendingChanges);
var equalityComparer = CheckinNoteFieldDefinition.NameComparer.ToGenericComparer<CheckinNoteFieldDefinition>().ToEqualityComparer();
var modelIntersection =
CheckinNotes
.Join(currentCheckinNoteDefinitions, model => model.CheckinNoteFieldDefinition, checkinNoteFieldDefinition => checkinNoteFieldDefinition, (model, change) => model, equalityComparer)
.ToArray();
var modelsToRemove = CheckinNotes.Where(model => !modelIntersection.Contains(model)).ToArray();
var modelsToAdd = currentCheckinNoteDefinitions
.Where(checkinNoteFieldDefinition => !modelIntersection.Select(model => model.CheckinNoteFieldDefinition).Contains(checkinNoteFieldDefinition, equalityComparer))
.Select(checkinNoteFieldDefinition => new CheckinNoteModel(checkinNoteFieldDefinition)).ToArray();
foreach (var modelToAdd in modelsToAdd)
{
CheckinNotes.Add(modelToAdd);
}
foreach (var modelToRemove in modelsToRemove)
{
CheckinNotes.Remove(modelToRemove);
}
CheckinEvaluationResult checkinEvaluationResult;
var workItemChanges =
WorkItems
.Where(model => model.IsSelected)
.Select(model => new WorkItemCheckinInfo(model.WorkItem, model.WorkItemCheckinAction.ToWorkItemCheckinAction())).ToArray();
var checkinNoteFieldValues =
CheckinNotes
.Where(model => !string.IsNullOrWhiteSpace(model.Value))
.Select(model => new CheckinNoteFieldValue(model.CheckinNoteFieldDefinition.Name, model.Value))
.ToArray();
var checkinNote = new CheckinNote(checkinNoteFieldValues);
if (teamPilgrimServiceModelProvider.TryEvaluateCheckin(out checkinEvaluationResult, _workspaceServiceModel.Workspace, pendingChanges, Comment, checkinNote, workItemChanges))
{
CheckinEvaluationResult = checkinEvaluationResult;
this.Logger().Debug("EvaluateCheckIn: Valid:{0}", checkinEvaluationResult.IsValid());
}
}