TicketImporter.TfsProject.updateWorkItem C# (CSharp) Method

updateWorkItem() private method

private updateWorkItem ( Ticket source, Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem workItem ) : void
source Ticket
workItem Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem
return void
        private void updateWorkItem(Ticket source, WorkItem workItem)
        {
            var ticketTitle = workItem.Id + " - " + workItem.Title;
            onDetailedProcessing(ticketTitle);

            if (source.HasParent)
            {
                var parentWorkItem = findWorkItem(source.Parent);
                if (parentWorkItem != null)
                {
                    try
                    {
                        var workItemStore = (WorkItemStore) tfs.GetService(typeof (WorkItemStore));
                        var linkType = workItemStore.WorkItemLinkTypes[CoreLinkTypeReferenceNames.Hierarchy];
                        parentWorkItem.Links.Add(new WorkItemLink(linkType.ForwardEnd, workItem.Id));
                    }
                    catch (Exception linkException)
                    {
                        importSummary.Warnings.Add(string.Format("Failed to update parent link for '{0}'.", ticketTitle));
                        importSummary.Warnings.Add(linkException.Message);
                    }
                }
            }

            if (source.HasLinks)
            {
                var workItemStore = (WorkItemStore) tfs.GetService(typeof (WorkItemStore));
                if (workItemStore.WorkItemLinkTypes.Contains("System.LinkTypes.Related"))
                {
                    var linkType = workItemStore.WorkItemLinkTypes["System.LinkTypes.Related"];
                    var linkTypeEnd = workItemStore.WorkItemLinkTypes.LinkTypeEnds[linkType.ForwardEnd.Name];
                    foreach (var link in source.Links)
                    {
                        var linkedWorkItem = findWorkItem(link.LinkedTo);
                        if (linkedWorkItem != null)
                        {
                            try
                            {
                                var relatedLink = new RelatedLink(linkTypeEnd, linkedWorkItem.Id);
                                relatedLink.Comment = link.LinkName;
                                workItem.Links.Add(relatedLink);
                            }
                            catch (Exception linkException)
                            {
                                if (linkException.Message.Contains("TF237099") == false)
                                {
                                    importSummary.Warnings.Add(string.Format("Failed to update links for '{0}'.",
                                        ticketTitle));
                                    importSummary.Warnings.Add(linkException.Message);
                                }
                            }
                        }
                    }
                }
            }

            if (string.IsNullOrWhiteSpace(source.Epic) == false)
            {
                var workItemStore = (WorkItemStore) tfs.GetService(typeof (WorkItemStore));
                var feature = findWorkItem(source.Epic);
                if (feature != null)
                {
                    try
                    {
                        var linkType = workItemStore.WorkItemLinkTypes["System.LinkTypes.Hierarchy"];
                        var linkTypeEnd = workItemStore.WorkItemLinkTypes.LinkTypeEnds[linkType.ReverseEnd.Name];
                        var relatedLink = new RelatedLink(linkTypeEnd, feature.Id);
                        relatedLink.Comment = string.Format("A member of Epic '{0} - {1}'.", feature.Id, feature.Title);
                        workItem.Links.Add(relatedLink);
                    }
                    catch (Exception linkException)
                    {
                        if (linkException.Message.Contains("TF237099") == false)
                        {
                            importSummary.Warnings.Add(string.Format("Failed to update epic link for '{0}'.",
                                ticketTitle));
                            importSummary.Warnings.Add(linkException.Message);
                        }
                    }
                }
            }

            if (workItem.IsDirty)
            {
                try
                {
                    workItem.Save(SaveFlags.MergeLinks);
                }
                catch (Exception ex)
                {
                    importSummary.Errors.Add(
                        string.Format("Failed to update work item '{0} - {1}'.", workItem.Id, workItem.Title));
                    importSummary.Errors.Add(ex.Message);
                    return;
                }
            }

            updateWorkItemState(source, workItem);
        }