JustAProgrammer.TeamPilgrim.VisualStudio.Model.VersionControl.ShelveServiceModel.RefreshSelectedDefinitionWorkItems C# (CSharp) Method

RefreshSelectedDefinitionWorkItems() private method

private RefreshSelectedDefinitionWorkItems ( ) : void
return void
        private void RefreshSelectedDefinitionWorkItems()
        {
            this.Logger().Trace("RefreshSelectedDefinitionWorkItems");

            if (SelectedWorkItemQueryDefinition == null)
                return;

            WorkItemCollection workItemCollection;
            if (teamPilgrimServiceModelProvider.TryGetQueryDefinitionWorkItemCollection(out workItemCollection,
                                                                                        _projectCollectionServiceModel.TfsTeamProjectCollection,
                                                                                        SelectedWorkItemQueryDefinition.QueryDefinition,
                                                                                        SelectedWorkItemQueryDefinition.Project.Name))
            {
                var currentWorkItems = workItemCollection.Cast<WorkItem>().ToArray();

                var modelIntersection = WorkItems == null
                                            ? new WorkItemModel[0]
                                            : WorkItems
                                                    .Join(currentWorkItems, model => model.WorkItem.Id,
                                                        workItem => workItem.Id,
                                                        (model, change) => model)
                                                    .ToArray();

                var modelsToRemove = WorkItems.Where(model => !modelIntersection.Contains(model)).ToArray();

                var selectedWorkItemCheckinActionEnum = TeamPilgrimPackage.TeamPilgrimSettings.SelectedWorkItemCheckinAction;
                var modelsToAdd = currentWorkItems
                    .Where(workItem => !modelIntersection.Select(workItemModel => workItemModel.WorkItem.Id).Contains(workItem.Id))
                    .Select(workItem => new WorkItemModel(workItem) { WorkItemCheckinAction = selectedWorkItemCheckinActionEnum }).ToArray();

                _backgroundFunctionPreventDataUpdate = true;

                foreach (var modelToAdd in modelsToAdd)
                {
                    WorkItems.Add(modelToAdd);
                }

                foreach (var modelToRemove in modelsToRemove)
                {
                    WorkItems.Remove(modelToRemove);
                }

                _backgroundFunctionPreventDataUpdate = false;

                WorkItemsOnCollectionChanged();
            }
        }