Ejemplo n.º 1
0
        /// <summary>
        /// Adds a link to the work items with the given ids.
        /// </summary>
        /// <param name="ids">The ids.</param>
        /// <param name="linkTypeEnd">The link type.</param>
        /// <returns></returns>
        private bool AddLinks(int[] ids, WorkItemLinkTypeEnd linkTypeEnd)
        {
            // Check for OneToMany violations (e.g. more than one parent)
            if (ids.Length > 1 && linkTypeEnd.IsForwardLink == false && linkTypeEnd.LinkType.IsOneToMany)
            {
                throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Resources.LinkError_OneToManyViolation, linkTypeEnd.Name));
            }

            // remove all links of this link type and only for ids which are going to add
            var tfsLinks = (from Link l in WorkItem.Links select l).ToArray();

            foreach (Link link in tfsLinks)
            {
                var workItemLink = link as RelatedLink;
                if (workItemLink != null)
                {
                    if (workItemLink.LinkTypeEnd.Id == linkTypeEnd.Id && ids.Contains(workItemLink.RelatedWorkItemId))
                    {
                        WorkItem.Links.Remove(link);
                    }
                }
            }

            // add new links for this type
            foreach (var id in ids)
            {
                var relatedLink = new RelatedLink(linkTypeEnd, id);
                WorkItem.Links.Add(relatedLink);
            }

            return(true);
        }
Ejemplo n.º 2
0
        private HtmlLink LinkViewModelFromRelatedLink(RelatedLink relatedLink)
        {
            try
            {
                var link = new HtmlLink()
                {
                    Text = relatedLink.Caption,
                    Url  = new Uri(relatedLink.Link, UriKind.RelativeOrAbsolute)
                };

                if (_urlTransformers != null)
                {
                    foreach (var transformer in _urlTransformers)
                    {
                        link.Url = transformer.TransformUrl(link.Url);
                    }
                }

                return(link);
            }
            catch (UriFormatException)
            {
                return(new HtmlLink()
                {
                    Text = relatedLink.Caption
                });
            }
        }
Ejemplo n.º 3
0
        public void DeleteRelatedWorkItemLink(int workItemId, int relatedWorkItemId)
        {
            string  condition = String.Format("[System.Id] = {0}", workItemId);
            WITUtil util      = new WITUtil(WorkItemStore, TeamProjectName, condition, string.Empty);

            WorkItem wi = util.WorkItems[0];

            wi.Open();

            RelatedLink link = null;

            foreach (Link l in wi.Links)
            {
                RelatedLink rl = l as RelatedLink;

                if (rl != null)
                {
                    // v1 work item related link does not have direction info
                    // to avoid generating two link change actions for the same link
                    // we only pick one from the work item of smaller id
                    if (rl.RelatedWorkItemId == relatedWorkItemId)
                    {
                        link = rl;
                        break;
                    }
                }
            }

            Debug.Assert(link != null, "link is null");
            wi.Links.Remove(link);

            wi.Save();
        }
Ejemplo n.º 4
0
 static void ReadLinks(IEnumerable linkNodes, XmlNamespaceManager ns, CmdletObject currentCmdlet)
 {
     if (linkNodes == null)
     {
         return;
     }
     foreach (XmlNode linkNode in linkNodes)
     {
         RelatedLink link = new RelatedLink();
         // Link name
         XmlNode tempNode = linkNode.SelectSingleNode("maml:linkText", ns);
         if (tempNode != null)
         {
             link.LinkText = tempNode.InnerText.Trim();
             if (String.IsNullOrEmpty(link.LinkText))
             {
                 link.LinkText = "Unknown";
             }
         }
         tempNode = linkNode.SelectSingleNode("maml:uri", ns);
         if (tempNode != null)
         {
             link.LinkUrl = tempNode.InnerText.Trim();
         }
         currentCmdlet.RelatedLinks.Add(link);
     }
 }
        public override object ConvertSourceToObject(PublishedPropertyType propertyType, object source, bool preview)
        {
            if (source == null)
            {
                return(null);
            }

            var sourceString     = source.ToString();
            var relatedLinksData = JsonConvert.DeserializeObject <IEnumerable <RelatedLinkData> >(sourceString);
            var relatedLinks     = new List <RelatedLink>();

            foreach (RelatedLinkData linkData in relatedLinksData)
            {
                var relatedLink = new RelatedLink
                {
                    Caption    = linkData.Caption,
                    NewWindow  = linkData.NewWindow,
                    IsInternal = linkData.IsInternal,
                    Type       = linkData.Type,
                    Id         = linkData.Internal,
                    Link       = linkData.Link
                };
                relatedLink = CreateLink(relatedLink);

                if (!relatedLink.IsDeleted)
                {
                    relatedLinks.Add(relatedLink);
                }
                else
                {
                    LogHelper.Warn <RelatedLinks>($"Related Links value converter skipped a link as the node has been unpublished/deleted (Internal Link NodeId: {relatedLink.Link}, Link Caption: \"{relatedLink.Caption}\")");
                }
            }
            return(new RelatedLinks(relatedLinks));
        }
Ejemplo n.º 6
0
        private bool NeedsToBeRemovedDueToWorkItemRelationMatched(RelatedLink relatedLink)
        {
            if (_linkTypeEndNamePattern == null && RelatedWorkItemId <= 0)
            {
                return(false);
            }

            if (_linkTypeEndNamePattern != null)
            {
                if (!_linkTypeEndNamePattern.IsMatch(relatedLink.LinkTypeEnd.Name))
                {
                    return(false);
                }
            }

            if (RelatedWorkItemId > 0)
            {
                if (relatedLink.RelatedWorkItemId != RelatedWorkItemId)
                {
                    return(false);
                }
            }

            return(true);
        }
Ejemplo n.º 7
0
        // GET: Admin/RelatedLinks/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            RelatedLink relatedLink = db.RelatedLinks.Find(id);
            //Below Lines added for Community
            var userid       = User.Identity.GetUserId();
            var relatedLinka = from item in db.RelatedLinks where (item.RelatedLinkId == id) select item;

            relatedLinka = relatedLinka.Include(a => a.CreatedBy);
            relatedLinka = relatedLinka.Where(a => a.CreatedBy == userid);
            if (relatedLinka.Count() == 0)
            {
                relatedLink = null;
            }



            if (relatedLink == null)
            {
                return(HttpNotFound());
            }
            return(View(relatedLink));
        }
Ejemplo n.º 8
0
        public HttpResponseMessage CreateItem([FromUri] string requestedCollectionUri, [FromUri] string requestedProject, [FromBody] SimpleWorkItem requestedWorkItem)
        {
            Uri collectionUri                      = new Uri(requestedCollectionUri);
            TfsTeamProjectCollection tpc           = new TfsTeamProjectCollection(collectionUri, new NetworkCredential(username, password, domain));
            WorkItemStore            workItemStore = tpc.GetService <WorkItemStore>();
            Project      teamProject               = workItemStore.Projects[requestedProject];
            WorkItemType workItemType              = teamProject.WorkItemTypes[Utils.GetTFSType(requestedWorkItem.Type)];

            // Create the work item.
            WorkItem newWorkItem = new WorkItem(workItemType)
            {
                // The title is generally the only required field that doesn’t have a default value.
                // You must set it, or you can’t save the work item. If you’re working with another
                // type of work item, there may be other fields that you’ll have to set.
                Title         = requestedWorkItem.Title,
                AreaPath      = requestedWorkItem.AreaPath,
                State         = requestedWorkItem.State,
                IterationPath = requestedWorkItem.IterationPath,
            };
            RelatedLink parent = new RelatedLink(workItemStore.WorkItemLinkTypes.LinkTypeEnds[requestedWorkItem.LinkType], requestedWorkItem.LinkId);

            newWorkItem.Links.Add(parent);
            newWorkItem.Save();
            requestedWorkItem.id = newWorkItem.Id;
            return(Request.CreateResponse <SimpleWorkItem>(HttpStatusCode.OK, requestedWorkItem));
        }
Ejemplo n.º 9
0
        private bool AddLink(WiLink link, WorkItem wi)
        {
            var linkEnd = ParseLinkEnd(link, wi);

            if (linkEnd != null)
            {
                try
                {
                    var relatedLink = new RelatedLink(linkEnd, link.TargetWiId);
                    relatedLink = ResolveCiclycalLinks(relatedLink, wi);
                    if (!IsDuplicateWorkItemLink(wi.Links, relatedLink))
                    {
                        wi.Links.Add(relatedLink);
                        return(true);
                    }
                    return(false);
                }

                catch (Exception ex)
                {
                    Logger.Log(LogLevel.Error, ex.Message);
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
 public void MigrateLinks(WorkItem sourceWorkItemLinkStart, WorkItemStoreContext sourceWorkItemStore, WorkItem targetWorkItemLinkStart, WorkItemStoreContext targetWorkItemStore, bool save = true)
 {
     if (targetWorkItemLinkStart.Links.Count == sourceWorkItemLinkStart.Links.Count)
     {
         Trace.WriteLine(string.Format("[SKIP] Source and Target have same number of links  {0} - {1}", sourceWorkItemLinkStart.Id, sourceWorkItemLinkStart.Type.ToString()), "LinkMigrationContext");
     }
     else
     {
         Trace.Indent();
         foreach (Link item in sourceWorkItemLinkStart.Links)
         {
             try
             {
                 Trace.WriteLine(string.Format("Migrating link for {0} of type {1}",
                                               sourceWorkItemLinkStart.Id, item.GetType().Name), "LinkMigrationContext");
                 if (IsHyperlink(item))
                 {
                     CreateHyperlink((Hyperlink)item, targetWorkItemLinkStart, save);
                 }
                 else if (IsRelatedLink(item))
                 {
                     RelatedLink rl = (RelatedLink)item;
                     CreateRelatedLink(sourceWorkItemLinkStart, rl, targetWorkItemLinkStart, sourceWorkItemStore, targetWorkItemStore, save);
                 }
                 else if (IsExternalLink(item))
                 {
                     ExternalLink rl = (ExternalLink)item;
                     CreateExternalLink((ExternalLink)item, targetWorkItemLinkStart, save);
                 }
                 else
                 {
                     UnknownLinkTypeException ex = new UnknownLinkTypeException(string.Format("  [UnknownLinkType] Unable to {0}", item.GetType().Name));
                     Telemetry.Current.TrackException(ex);
                     Trace.WriteLine(ex.ToString(), "LinkMigrationContext");
                     throw ex;
                 }
             }
             catch (WorkItemLinkValidationException ex)
             {
                 sourceWorkItemLinkStart.Reset();
                 targetWorkItemLinkStart.Reset();
                 Telemetry.Current.TrackException(ex);
                 Trace.WriteLine(string.Format("  [WorkItemLinkValidationException] Adding link for wiSourceL={0}", sourceWorkItemLinkStart.Id), "LinkMigrationContext");
                 Trace.WriteLine(ex.ToString(), "LinkMigrationContext");
             }
             catch (FormatException ex)
             {
                 sourceWorkItemLinkStart.Reset();
                 targetWorkItemLinkStart.Reset();
                 Telemetry.Current.TrackException(ex);
                 Trace.WriteLine(string.Format("  [CREATE-FAIL] Adding Link for wiSourceL={0}", sourceWorkItemLinkStart.Id), "LinkMigrationContext");
                 Trace.WriteLine(ex.ToString(), "LinkMigrationContext");
             }
         }
     }
     if (sourceWorkItemLinkStart.Type.Name == "Test Case")
     {
         MigrateSharedSteps(sourceWorkItemLinkStart, targetWorkItemLinkStart, sourceWorkItemStore, targetWorkItemStore, save);
     }
 }
        public dynamic UpsertResourcesRelatedLinks(dynamic resourceObject)
        {
            RelatedLink     relatedLink = new RelatedLink();
            List <TopicTag> topicTags   = new List <TopicTag>();
            List <Location> locations   = new List <Location>();
            dynamic         references  = GetReferences(resourceObject);

            topicTags = references[0];
            locations = references[1];

            relatedLink = new RelatedLink()
            {
                ResourceId       = resourceObject.id == "" ? Guid.NewGuid() : resourceObject.id,
                Name             = resourceObject.name,
                ResourceCategory = resourceObject.resourceCategory,
                Description      = resourceObject.description,
                ResourceType     = resourceObject.resourceType,
                Url                = resourceObject.url,
                TopicTags          = topicTags,
                OrganizationalUnit = resourceObject.organizationalUnit,
                Location           = locations,
                CreatedBy          = resourceObject.createdBy,
                ModifiedBy         = resourceObject.modifiedBy
            };
            relatedLink.Validate();
            return(relatedLink);
        }
Ejemplo n.º 12
0
        private RelatedLink CreateLink(RelatedLink link)
        {
            if (link.IsInternal && link.Id != null)
            {
                if (_urlProvider == null && UmbracoContext.Current == null)
                {
                    return(null);
                }

                var urlProvider = _urlProvider ?? UmbracoContext.Current.UrlProvider;

                link.Link = urlProvider.GetUrl((int)link.Id);
                if (link.Link.Equals("#"))
                {
                    link.IsDeleted = true;
                    link.Link      = link.Id.ToString();
                }
                else
                {
                    link.IsDeleted = false;
                }
            }

            return(link);
        }
Ejemplo n.º 13
0
 static void XmlGenerateLinks(StringBuilder SB, RelatedLink link)
 {
     SB.Append("		<maml:navigationLink>"+ n);
     SB.Append("			<maml:linkText>"+ SecurityElement.Escape(link.LinkText) + "</maml:linkText>" + n);
     SB.Append("			<maml:uri>"+ SecurityElement.Escape(link.LinkUrl) + "</maml:uri>" + n);
     SB.Append("		</maml:navigationLink>"+ n);
 }
Ejemplo n.º 14
0
        public ActionResult DeleteConfirmed(int id)
        {
            RelatedLink relatedLink = db.RelatedLinks.Find(id);

            db.RelatedLinks.Remove(relatedLink);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Ejemplo n.º 15
0
        /// <summary>
        ///		Consulta los elementos de trabajo y los transforma en una colección de tareas
        /// </summary>
        private TaskModelCollection QueryWorkItems(ProjectModel objProject, string strQuery)
        {
            Project             objTfsProject = LoadProjectTfs(objProject);
            TaskModelCollection objColTasks   = new TaskModelCollection();

            // Carga las tareas del proyecto
            if (objTfsProject != null)
            {
                WorkItemStore      objWorkItemStore = tfsTeamProject.GetService <WorkItemStore>();
                WorkItemCollection objColWorkItems  = objWorkItemStore.Query(strQuery);

                // Transforma los elementos de trabajo en tareas
                foreach (WorkItem objWorkItem in objColWorkItems)
                {
                    TaskModel objTask = new TaskModel();

                    // Asigna los datos
                    objTask.ID              = objWorkItem.Id;
                    objTask.Name            = objWorkItem.Title;                                                                         // GetWorkItemField(objWorkItem, CoreField.Title);
                    objTask.Description     = objWorkItem.Description;                                                                   // GetWorkItemField(objWorkItem, CoreField.Description);
                    objTask.IdIteration     = objWorkItem.IterationId;                                                                   //  GetWorkItemField(objWorkItem, CoreField.IterationId).GetInt();
                    objTask.Project         = objWorkItem.Project.Name;                                                                  // GetWorkItemField(objWorkItem, CoreField.TeamProject);
                    objTask.AssignedTo      = GetWorkItemField(objWorkItem, CoreField.AssignedTo);
                    objTask.DateUpdate      = objWorkItem.ChangedDate;                                                                   // GetWorkItemField(objWorkItem, CoreField.ChangedDate).GetDateTime();
                    objTask.UserUpdate      = objWorkItem.ChangedBy;                                                                     // GetWorkItemField(objWorkItem, CoreField.ChangedBy);
                    objTask.DateNew         = objWorkItem.CreatedDate;                                                                   // GetWorkItemField(objWorkItem, CoreField.CreatedDate).GetDateTime();
                    objTask.UserNew         = objWorkItem.CreatedBy;                                                                     // GetWorkItemField(objWorkItem, CoreField.CreatedBy);
                    objTask.State           = objWorkItem.State;                                                                         // GetWorkItemField(objWorkItem, CoreField.State);
                    objTask.Tags            = objWorkItem.Tags;                                                                          // GetWorkItemField(objWorkItem, CoreField.Tags);
                    objTask.Type            = objWorkItem.Type.ToString();                                                               // GetWorkItemField(objWorkItem, CoreField.WorkItemType);
                    objTask.DateAuthorized  = objWorkItem.AuthorizedDate;                                                                // GetWorkItemField(objWorkItem, CoreField.AuthorizedDate).GetDateTime();
                    objTask.UserAuthorized  = GetWorkItemField(objWorkItem, CoreField.AuthorizedAs);
                    objTask.BoardColumn     = GetWorkItemField(objWorkItem, CoreField.BoardColumn);
                    objTask.BoardColumnDone = GetWorkItemField(objWorkItem, CoreField.BoardColumnDone);
                    objTask.BoardLane       = GetWorkItemField(objWorkItem, CoreField.BoardLane);
                    objTask.LinkType        = GetWorkItemField(objWorkItem, CoreField.LinkType);
                    objTask.NodeName        = objWorkItem.NodeName;                                                                          // GetWorkItemField(objWorkItem, CoreField.NodeName);
                    objTask.Reason          = objWorkItem.Reason;                                                                            // GetWorkItemField(objWorkItem, CoreField.Reason);

                    objTask.RelatedLinkCount = GetWorkItemField(objWorkItem, CoreField.RelatedLinkCount).GetInt(0);
                    // Añade la tarea a la colección
                    objColTasks.Add(objTask);

                    for (int intIndex = 0; intIndex < objWorkItem.Links.Count; intIndex++)
                    {
                        RelatedLink objLink = objWorkItem.Links[intIndex] as RelatedLink;

                        if (objLink != null)
                        {
                            System.Diagnostics.Debug.WriteLine(objWorkItem.Id + " - " + objLink.ArtifactLinkType.Name + " -- " +
                                                               objLink.RelatedWorkItemId + " - " + objLink.LinkTypeEnd.Name);
                        }
                    }
                }
            }
            // Devuelve la colección
            return(objColTasks);
        }
Ejemplo n.º 16
0
        public ActionResult Edit([Bind(Include = "RelatedLinkId,Title,TitleLink,LinkUrl,ImageUrl,Description,Phone,Address,CreatedDate,CreatedBy,ModifiedDate,ModifiedBy,DelFlg")] RelatedLink relatedLink, HttpPostedFileBase ImageUrl, HttpPostedFileBase LinkUrl)


        {
            if (ModelState.IsValid)
            {
                db.Entry(relatedLink).State = EntityState.Modified;

                relatedLink.ModifiedBy   = User.Identity.GetUserId();
                relatedLink.ModifiedDate = DateTime.Now;

                if (ImageUrl != null)
                {
                    string pathToCreate = "~/Images/relatedLink";
                    if (!Directory.Exists(Server.MapPath(pathToCreate)))
                    {
                        //Now you know it is ok, create it
                        Directory.CreateDirectory(Server.MapPath(pathToCreate));
                    }
                    string extension = Path.GetExtension(ImageUrl.FileName);
                    string fileName  = Path.GetFileNameWithoutExtension(ImageUrl.FileName);
                    string id        = Guid.NewGuid().ToString();
                    string imageUrl  = "/Images/relatedLink/" + fileName + "" + /*main.MainId.ToString()*/ id + extension;

                    ImageUrl.SaveAs(Path.Combine(Server.MapPath(pathToCreate), fileName + "" + /*main.MainId.ToString()*/ id + extension));
                    string DestinationPath = Path.Combine(Server.MapPath(pathToCreate));
                    DestinationPath += "\\" + fileName + id;
                    ImageResizer.ImageJob i = new ImageResizer.ImageJob(DestinationPath + extension, DestinationPath + "_thumb.jpg", new ImageResizer.ResizeSettings(
                                                                            "width=200;height=200;format=jpg;mode=max"));
                    i.Build();
                    relatedLink.ImageUrl = imageUrl;
                }
                else if (LinkUrl != null && LinkUrl.ContentLength > 0)
                {
                    string pathToCreate = "~/UploadedDocuments/relatedLink";
                    if (!Directory.Exists(Server.MapPath(pathToCreate)))
                    {
                        //Now you know it is ok, create it
                        Directory.CreateDirectory(Server.MapPath(pathToCreate));
                    }
                    string extension = Path.GetExtension(LinkUrl.FileName);
                    string fileName  = Path.GetFileNameWithoutExtension(LinkUrl.FileName);
                    string id        = Guid.NewGuid().ToString();
                    string linkurl   = "/UploadedDocuments/relatedLink/" + fileName + "" + /*main.MainId.ToString()*/ id + extension;
                    LinkUrl.SaveAs(Path.Combine(Server.MapPath(pathToCreate), fileName + "" + /*main.MainId.ToString()*/ id + extension));
                    // extract only the filename
                    string DestinationPath = Path.Combine(Server.MapPath(pathToCreate));
                    DestinationPath += "\\" + fileName + id;
                    // store the file inside ~/App_Data/uploads folder
                    relatedLink.LinkUrl = linkurl;

                    db.RelatedLinks.Add(relatedLink);
                }
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            return(View(relatedLink));
        }
Ejemplo n.º 17
0
        void downLink(Object obj)
        {
            Int32       old  = cmdlet.RelatedLinks.IndexOf(CurrentRelink);
            RelatedLink temp = cmdlet.RelatedLinks[old + 1];

            cmdlet.RelatedLinks[old + 1] = CurrentRelink;
            cmdlet.RelatedLinks[old]     = temp;
            CurrentRelink = cmdlet.RelatedLinks[old + 1];
        }
Ejemplo n.º 18
0
        void newLink(Object obj)
        {
            var link = new RelatedLink {
                LinkText = "<Link>"
            };

            cmdlet.RelatedLinks.Add(link);
            CurrentRelink = link;
        }
Ejemplo n.º 19
0
 private bool IsDuplicateWorkItemLink(LinkCollection links, RelatedLink relatedLink)
 {
     if (links.Contains(relatedLink))
     {
         Logger.Log(LogLevel.Warning, $"Duplicate work item link, related workitem id: {relatedLink.RelatedWorkItemId}");
         return(true);
     }
     return(false);
 }
Ejemplo n.º 20
0
        private static void MapSingleRelatedLink(WorkItem cloneWI, RelatedLink rLink)
        {
            // TODO how they can be meaningful in different Collections?
#if false
            var cloneLink = new RelatedLink(rLink.LinkTypeEnd, rLink.RelatedWorkItemId);
            cloneLink.Comment = rLink.Comment;
            cloneWI.Links.Add(cloneLink);
#endif
        }
Ejemplo n.º 21
0
 public void MigrateLinks(WorkItem sourceWorkItemLinkStart, WorkItemStoreContext sourceWorkItemStore, WorkItem targetWorkItemLinkStart, WorkItemStoreContext targetWorkItemStore, bool save = true, string sourceReflectedWIIdField = null)
 {
     if (targetWorkItemLinkStart.Links.Count == sourceWorkItemLinkStart.Links.Count)
     {
         Log.Information("[SKIP] Source and Target have same number of links  {sourceWorkItemLinkStartId} - {sourceWorkItemLinkStartType}", sourceWorkItemLinkStart.Id, sourceWorkItemLinkStart.Type.ToString());
     }
     else
     {
         Trace.Indent();
         foreach (Link item in sourceWorkItemLinkStart.Links)
         {
             try
             {
                 Log.Information("Migrating link for {sourceWorkItemLinkStartId} of type {ItemGetTypeName}", sourceWorkItemLinkStart.Id, item.GetType().Name);
                 if (IsHyperlink(item))
                 {
                     CreateHyperlink((Hyperlink)item, targetWorkItemLinkStart, save);
                 }
                 else if (IsRelatedLink(item))
                 {
                     RelatedLink rl = (RelatedLink)item;
                     CreateRelatedLink(sourceWorkItemLinkStart, rl, targetWorkItemLinkStart, sourceWorkItemStore, targetWorkItemStore, save, sourceReflectedWIIdField);
                 }
                 else if (IsExternalLink(item))
                 {
                     var el = (ExternalLink)item;
                     if (!IsBuildLink(el))
                     {
                         CreateExternalLink(el, targetWorkItemLinkStart, save);
                     }
                 }
                 else
                 {
                     UnknownLinkTypeException ex = new UnknownLinkTypeException(string.Format("  [UnknownLinkType] Unable to {0}", item.GetType().Name));
                     Log.Error(ex, "LinkMigrationContext");
                     throw ex;
                 }
             }
             catch (WorkItemLinkValidationException ex)
             {
                 sourceWorkItemLinkStart.Reset();
                 targetWorkItemLinkStart.Reset();
                 Log.Error(ex, "[WorkItemLinkValidationException] Adding link for wiSourceL={sourceWorkItemLinkStartId}", sourceWorkItemLinkStart.Id);
             }
             catch (FormatException ex)
             {
                 sourceWorkItemLinkStart.Reset();
                 targetWorkItemLinkStart.Reset();
                 Log.Error(ex, "[CREATE-FAIL] Adding Link for wiSourceL={sourceWorkItemLinkStartId}", sourceWorkItemLinkStart.Id);
             }
         }
     }
     if (sourceWorkItemLinkStart.Type.Name == "Test Case")
     {
         MigrateSharedSteps(sourceWorkItemLinkStart, targetWorkItemLinkStart, sourceWorkItemStore, targetWorkItemStore, save);
     }
 }
Ejemplo n.º 22
0
        private RelatedLink ResolveCiclycalLinks(RelatedLink link, WorkItem wi)
        {
            if (link.LinkTypeEnd.LinkType.IsNonCircular && DetectCycle(wi, link))
            {
                return(new RelatedLink(link.LinkTypeEnd.OppositeEnd, link.RelatedWorkItemId));
            }

            return(link);
        }
        public override object ConvertSourceToIntermediate(IPublishedElement owner, PublishedPropertyType propertyType, object source, bool preview)
        {
            if (source == null)
            {
                return(null);
            }
            var sourceString = source.ToString();

            var relatedLinksData = JsonConvert.DeserializeObject <IEnumerable <RelatedLink> >(sourceString);
            var relatedLinks     = new List <RelatedLink>();

            foreach (var linkData in relatedLinksData)
            {
                var relatedLink = new RelatedLink
                {
                    Caption    = linkData.Caption,
                    NewWindow  = linkData.NewWindow,
                    IsInternal = linkData.IsInternal,
                    Type       = linkData.Type,
                    Link       = linkData.Link
                };

                int contentId;
                if (int.TryParse(relatedLink.Link, out contentId))
                {
                    relatedLink.Id = contentId;
                    relatedLink    = CreateLink(relatedLink);
                }
                else
                {
                    var strLinkId  = linkData.Link;
                    var udiAttempt = strLinkId.TryConvertTo <GuidUdi>();
                    if (udiAttempt.Success && udiAttempt.Result != null)
                    {
                        var content = _publishedSnapshotAccessor.PublishedSnapshot.Content.GetById(udiAttempt.Result.Guid);
                        if (content != null)
                        {
                            relatedLink.Id      = content.Id;
                            relatedLink         = CreateLink(relatedLink);
                            relatedLink.Content = content;
                        }
                    }
                }

                if (relatedLink.IsDeleted == false)
                {
                    relatedLinks.Add(relatedLink);
                }
                else
                {
                    _logger.Warn <RelatedLinksValueConverter>("Related Links value converter skipped a link as the node has been unpublished/deleted (Internal Link NodeId: {RelatedLinkNodeId}, Link Caption: '{RelatedLinkCaption}')", relatedLink.Link, relatedLink.Caption);
                }
            }

            return(new RelatedLinks(relatedLinks, sourceString));
        }
        /// <summary>
        /// Renders an anchor element for a RelatedLink instance, accepting htmlAttributes.
        /// Format: &lt;a href=&quot;relatedLink.Link&quot; target=&quot;_blank/_self&quot; htmlAttributes&gt;relatedLink.Caption&lt;/a&gt;
        /// </summary>
        /// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
        /// <param name="relatedLink">The RelatedLink instance</param>
        /// <param name="htmlAttributes">An object that contains the HTML attributes to set for the element.</param>
        /// <returns></returns>
        public static MvcHtmlString GetRelatedLinkHtml(this HtmlHelper htmlHelper, RelatedLink relatedLink, object htmlAttributes)
        {
            var tagBuilder = new TagBuilder("a");

            tagBuilder.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
            tagBuilder.MergeAttribute("href", relatedLink.Link);
            tagBuilder.MergeAttribute("target", relatedLink.NewWindow ? "_blank" : "_self");
            tagBuilder.InnerHtml = HttpUtility.HtmlEncode(relatedLink.Caption);
            return(MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal)));
        }
Ejemplo n.º 25
0
        void removeLink(Object obj)
        {
            Int32 index = cmdlet.RelatedLinks.IndexOf(CurrentRelink);

            cmdlet.RelatedLinks.Remove(CurrentRelink);
            if (index > 0)
            {
                CurrentRelink = cmdlet.RelatedLinks[index - 1];
            }
        }
Ejemplo n.º 26
0
        void DownLink(Object obj)
        {
            Int32       old  = CurrentLinkIndex;
            RelatedLink temp = _evm.CurrentCmdlet.RelatedLinks[CurrentLinkIndex + 1];

            _evm.CurrentCmdlet.RelatedLinks[CurrentLinkIndex + 1] = CurrentRelink;
            _evm.CurrentCmdlet.RelatedLinks[CurrentLinkIndex]     = temp;
            CurrentLinkIndex = old + 1;
            Utils.MarkUnsaved();
        }
 public static Link ToLink(this RelatedLink content)
 {
     return(new Link()
     {
         Title = content.Caption,
         Url = content.Link == string.Empty || content.Link.ToLowerInvariant() == "http://" ? null : content.Link,
         NewWindow = content.NewWindow,
         IsInternal = content.IsInternal
     });
 }
Ejemplo n.º 28
0
 public void MigrateLinks(WorkItemData sourceWorkItemLinkStart, IWorkItemMigrationClient sourceWorkItemStore, WorkItemData targetWorkItemLinkStart, IWorkItemMigrationClient targetWorkItemStore, bool save = true, bool filterWorkItemsThatAlreadyExistInTarget = true, string sourceReflectedWIIdField = null)
 {
     if (ShouldCopyLinks(sourceWorkItemLinkStart, targetWorkItemLinkStart, filterWorkItemsThatAlreadyExistInTarget))
     {
         Trace.Indent();
         foreach (Link item in sourceWorkItemLinkStart.ToWorkItem().Links)
         {
             try
             {
                 Log.Information("Migrating link for {sourceWorkItemLinkStartId} of type {ItemGetTypeName}", sourceWorkItemLinkStart.Id, item.GetType().Name);
                 if (IsHyperlink(item))
                 {
                     CreateHyperlink((Hyperlink)item, targetWorkItemLinkStart, save);
                 }
                 else if (IsRelatedLink(item))
                 {
                     RelatedLink rl = (RelatedLink)item;
                     CreateRelatedLink(sourceWorkItemLinkStart, rl, targetWorkItemLinkStart, sourceWorkItemStore, targetWorkItemStore, save, sourceReflectedWIIdField);
                 }
                 else if (IsExternalLink(item))
                 {
                     var el = (ExternalLink)item;
                     if (!IsBuildLink(el))
                     {
                         CreateExternalLink(el, targetWorkItemLinkStart, save);
                     }
                 }
                 else
                 {
                     UnknownLinkTypeException ex = new UnknownLinkTypeException(string.Format("  [UnknownLinkType] Unable to {0}", item.GetType().Name));
                     Log.Error(ex, "LinkMigrationContext");
                     throw ex;
                 }
             }
             catch (WorkItemLinkValidationException ex)
             {
                 sourceWorkItemLinkStart.ToWorkItem().Reset();
                 targetWorkItemLinkStart.ToWorkItem().Reset();
                 Log.Error(ex, "[WorkItemLinkValidationException] Adding link for wiSourceL={sourceWorkItemLinkStartId}", sourceWorkItemLinkStart.Id);
             }
             catch (FormatException ex)
             {
                 sourceWorkItemLinkStart.ToWorkItem().Reset();
                 targetWorkItemLinkStart.ToWorkItem().Reset();
                 Log.Error(ex, "[CREATE-FAIL] Adding Link for wiSourceL={sourceWorkItemLinkStartId}", sourceWorkItemLinkStart.Id);
             }
         }
     }
     if (sourceWorkItemLinkStart.Type == "Test Case")
     {
         MigrateSharedSteps(sourceWorkItemLinkStart, targetWorkItemLinkStart, sourceWorkItemStore, targetWorkItemStore, save);
     }
 }
        static partial void RealInstanceFactory(ref RelatedLink real, string callerName)
        {
            WorkItemStore  workItemStore = WorkItemStoreWrapper_UnitTests.GetRealInstance();
            WorkItem       workitem      = workItemStore.GetWorkItem(195);
            LinkCollection links         = workitem.Links;

            foreach (object link in links)
            {
                if (link is RelatedLink)
                {
                    real = (RelatedLink)link;
                }
            }
        }
Ejemplo n.º 30
0
        private bool IsDuplicateWorkItemLink(LinkCollection links, RelatedLink relatedLink)
        {
            var containsRelatedLink      = links.Contains(relatedLink);
            var hasSameRelatedWorkItemId = links.OfType <RelatedLink>()
                                           .Any(l => l.RelatedWorkItemId == relatedLink.RelatedWorkItemId);

            if (!containsRelatedLink && !hasSameRelatedWorkItemId)
            {
                return(false);
            }

            Logger.Log(LogLevel.Warning, $"Duplicate work item link detected to related workitem id: {relatedLink.RelatedWorkItemId}, Skipping link");
            return(true);
        }
 private bool IsParentLink(RelatedLink link)
 {
     return link.LinkTypeEnd.Name == "Parent";
 }
Ejemplo n.º 32
0
        public void LinkBuildWorkItem(string _buildNumber)
        {
            if (!String.IsNullOrEmpty(_buildNumber))
            {
                WorkItemCollection _wic = Query4BBI(Workitem.Store, Workitem.Project.Name, _buildNumber);

                if (_wic.Count > 0)
                {
                    foreach (WorkItem _workItem in _wic)
                    {
                        string _bbiBuildNumber = (string)_workItem.Fields["Build Number"].Value;

                        if (!_dbiBuildNumbers.Contains(_bbiBuildNumber))
                        {
                            _dbiBuildNumbers.Add(_bbiBuildNumber);
                        }

                        RelatedLink _rl = new RelatedLink(_workItem.Id);
                        bool _isLinkAlreadyThere = false;

                        foreach (Link _ln in Workitem.Links)
                        {
                            if (_ln.ArtifactLinkType.Name.Contains("Related"))
                            {
                                RelatedLink _rrl = (RelatedLink)_ln;
                                if (_rrl.RelatedWorkItemId == _rl.RelatedWorkItemId)
                                {
                                    _isLinkAlreadyThere = true;

                                    if (!_bbiNumbers.Contains(_rrl.RelatedWorkItemId))
                                    {
                                        _bbiNumbers.Add(_rrl.RelatedWorkItemId);
                                    }
                                }
                            }
                        }

                        if (!_isLinkAlreadyThere)
                        {
                            Workitem.Links.Add(_rl);

                            if (!_bbiNumbers.Contains(_rl.RelatedWorkItemId))
                            {
                                _bbiNumbers.Add(_rl.RelatedWorkItemId);
                            }

                            SyncDBI2BBI(_workItem);

                        }

                    }

                    UpdateRelatedWorkItemComment(GetBBILinkComment());
                }

            }
        }
 private bool IsChildLink(RelatedLink link)
 {
     return link.LinkTypeEnd.Name == "Child";
 }
Ejemplo n.º 34
0
 /// <summary>
 /// Link Work Items in TFS
 /// </summary>
 /// <param name="source">
 /// The source.
 /// </param>
 /// <param name="targetWorkItemId">
 /// The target Work Item Id.
 /// </param>
 /// <param name="linkTypeEndName">
 /// The link Type End Name.
 /// </param>
 /// <param name="comments">
 /// The comments.
 /// </param>
 public void LinkWorkItems(WorkItem source, int targetWorkItemId, string linkTypeEndName, string comments)
 {
     WorkItem wItem = tfsManager.GetWorkItem(targetWorkItemId);
     if (wItem != null)
     {
         WorkItemLinkTypeEnd linkTypeEnd = tfsManager.GetAllWorkItemLinksTypes().LinkTypeEnds[linkTypeEndName];
         var link = new RelatedLink(linkTypeEnd, targetWorkItemId) { Comment = comments };
         source.Links.Add(link);
         source.Save();
     }
 }
Ejemplo n.º 35
0
        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);
        }