Exemple #1
0
        public bool IsActionInDelta(LinkChangeAction linkChangeAction)
        {
            ILink link = linkChangeAction.Link;

            using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
            {
                var duplicateActionInDelta = context.FindLinkChangeActionInDelta(
                    SessionGroupId,
                    SessionId,
                    SourceId,
                    linkChangeAction.ChangeActionId,
                    link.SourceArtifactId,
                    link.SourceArtifact.Uri,
                    link.TargetArtifact.Uri,
                    link.Comment,
                    link.LinkType.ReferenceName,
                    link.LinkType.FriendlyName,
                    GetExtendedPropertyString(link),
                    link.LinkType.SourceArtifactType.ReferenceName,
                    link.LinkType.SourceArtifactType.FriendlyName,
                    link.LinkType.SourceArtifactType.ContentTypeReferenceName,
                    link.LinkType.TargetArtifactType.ReferenceName,
                    link.LinkType.TargetArtifactType.FriendlyName,
                    link.LinkType.TargetArtifactType.ContentTypeReferenceName);

                return(duplicateActionInDelta.Count() > 0);
            }
        }
Exemple #2
0
        private bool LinkChangeActionMatchesExistingServerLinkChangeId(LinkChangeAction linkChangeAction, RuntimeEntityModel context)
        {
            if (string.IsNullOrEmpty(linkChangeAction.ServerLinkChangeId))
            {
                TraceManager.TraceVerbose("LinkChangeActionMatchesExistingServerLinkChangeId returning false because ServerLinkChangeId is null or empty");
                return(false);
            }
            else
            {
                // Look for existing row in LINK_LINK_CHANGEACTION with linkChangeAction.ServerLinkChangeId;
                int completedStatus         = LinkChangeAction.GetStatusStorageValue(LinkChangeAction.LinkChangeActionStatus.Completed);
                var serverLinkChangeIdQuery =
                    from a in context.RTLinkChangeActionSet
                    where a.ActionId.Equals(linkChangeAction.ChangeActionId) &&
                    a.SessionGroupUniqueId.Equals(SessionGroupId) &&
                    a.SessionUniqueId.Equals(SessionId) &&
                    a.SourceId.Equals(SourceId) &&
                    a.ServerLinkChangeId.Equals(linkChangeAction.ServerLinkChangeId) &&
                    a.Status == completedStatus
                    select a.Id;

                // Return true only if row found
                return(serverLinkChangeIdQuery.Count() > 0);
            }
        }
Exemple #3
0
        public void PromoteInAnalysisChangesToReadyForMigration()
        {
            using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
            {
                //todo: convert to sproc
                int inAnalysisVal   = (int)LinkChangeGroup.LinkChangeGroupStatus.InAnalysisTranslated;
                int translatedVal   = LinkChangeAction.GetStatusStorageValue(LinkChangeAction.LinkChangeActionStatus.Translated);
                int readyForMigrVal = (int)LinkChangeGroup.LinkChangeGroupStatus.ReadyForMigration;
                var linkActionQuery = from a in context.RTLinkChangeActionSet
                                      where a.LinkChangeGroup.SessionGroupUniqueId.Equals(SessionGroupId) &&
                                      a.LinkChangeGroup.SessionUniqueId.Equals(SessionId) &&
                                      a.LinkChangeGroup.SourceId.Equals(SourceId) &&
                                      a.LinkChangeGroup.Status == inAnalysisVal &&
                                      !a.LinkChangeGroup.ContainsConflictedAction &&
                                      a.Status == translatedVal &&
                                      a.Conflicted == false
                                      select a;

                foreach (RTLinkChangeAction linkChangeAction in linkActionQuery)
                {
                    linkChangeAction.Status = LinkChangeAction.GetStatusStorageValue(LinkChangeAction.LinkChangeActionStatus.ReadyForMigration);
                }
                context.TrySaveChanges();

                context.BatchUpdateLinkChangeGroupStatus(SessionGroupId, SessionId, SourceId, false,
                                                         inAnalysisVal, readyForMigrVal);
            }
        }
Exemple #4
0
 public void DeleteChangeAction(LinkChangeAction action)
 {
     if (m_actions.Contains(action))
     {
         m_actions.Remove(action);
     }
 }
Exemple #5
0
        private RTLinkChangeAction AddChangeAction(LinkChangeAction action, RuntimeEntityModel context)
        {
            if (action.InternalId == LinkChangeAction.INVALID_INTERNAL_ID)
            {
                RTArtifactLink rtArtifactLink = FindCreateLink(action.Link, context);
                Debug.Assert(null != rtArtifactLink, "rtArtifactLink is null.");

                int status = LinkChangeAction.GetStatusStorageValue(action.Status);
                var duplicateActionInDeferralQuery =
                    from a in context.RTLinkChangeActionSet
                    where a.ActionId.Equals(action.ChangeActionId) &&
                    a.SessionGroupUniqueId.Equals(SessionGroupId) &&
                    a.SessionUniqueId.Equals(SessionId) &&
                    a.SourceId.Equals(SourceId) &&
                    a.ArtifactLink.Id == rtArtifactLink.Id &&
                    a.Status == status
                    select a.Id;

                if (duplicateActionInDeferralQuery.Count() > 0)
                {
                    // duplicate link change action in deferral status
                    return(null);
                }

                var rtLinkChangeAction = RTLinkChangeAction.CreateRTLinkChangeAction(
                    0, SessionGroupId, SessionId, action.ChangeActionId,
                    status,
                    false, SourceId);
                rtLinkChangeAction.ArtifactLink = rtArtifactLink;

                return(rtLinkChangeAction);
            }

            throw new MigrationException(MigrationToolkitResources.ErrorSaveDuplicateLinkAction, action.InternalId);
        }
Exemple #6
0
        private LinkChangeAction RealizeLinkChangeActionFromEDM(LinkChangeGroup linkChangeGroup, RTLinkChangeAction rtLinkChangeAction)
        {
            rtLinkChangeAction.ArtifactLinkReference.Load();
            ILink artifactLink = RealizeArtifactLinkFromEDM(rtLinkChangeAction.ArtifactLink);

            var linkChangeAction = new LinkChangeAction(rtLinkChangeAction.ActionId, artifactLink, (LinkChangeAction.LinkChangeActionStatus)rtLinkChangeAction.Status,
                                                        rtLinkChangeAction.Conflicted, rtLinkChangeAction.ExecutionOrder ?? 0, linkChangeGroup,
                                                        rtLinkChangeAction.Id);

            return(linkChangeAction);
        }
Exemple #7
0
        public void AddChangeAction(LinkChangeAction action)
        {
            if (action == null)
            {
                return;
            }

            if (m_actions.Contains(action))
            {
                return;
            }

            action.Group = this;
            m_actions.Add(action);
        }
Exemple #8
0
        private RTLinkChangeAction AddChangeAction(LinkChangeAction action, RuntimeEntityModel context)
        {
            if (LinkChangeActionMatchesExistingServerLinkChangeId(action, context))
            {
                TraceManager.TraceInformation(String.Format("LinkChangeGroupManager: Skipping generated link change ({0} link to work item {1}) because it was made by the sync process",
                                                            action.ChangeActionId == WellKnownChangeActionId.Add ? "Add" : "Delete", action.Link.SourceArtifactId));
                return(null);
            }

            if (action.InternalId == LinkChangeAction.INVALID_INTERNAL_ID)
            {
                RTArtifactLink rtArtifactLink = FindCreateLink(action.Link, context);
                Debug.Assert(null != rtArtifactLink, "rtArtifactLink is null.");

                int status = LinkChangeAction.GetStatusStorageValue(action.Status);
                var duplicateActionInDeferralQuery =
                    from a in context.RTLinkChangeActionSet
                    where a.ActionId.Equals(action.ChangeActionId) &&
                    a.SessionGroupUniqueId.Equals(SessionGroupId) &&
                    a.SessionUniqueId.Equals(SessionId) &&
                    a.SourceId.Equals(SourceId) &&
                    a.ArtifactLink.Id == rtArtifactLink.Id &&
                    a.Status == status
                    select a.Id;

                if (duplicateActionInDeferralQuery.Count() > 0)
                {
                    // duplicate link change action in deferral status
                    return(null);
                }

                var rtLinkChangeAction = RTLinkChangeAction.CreateRTLinkChangeAction(
                    0, SessionGroupId, SessionId, action.ChangeActionId,
                    status,
                    false, SourceId);
                rtLinkChangeAction.ArtifactLink = rtArtifactLink;
                if (!string.IsNullOrEmpty(action.ServerLinkChangeId))
                {
                    rtLinkChangeAction.ServerLinkChangeId = action.ServerLinkChangeId;
                }

                return(rtLinkChangeAction);
            }

            throw new MigrationException(MigrationToolkitResources.ErrorSaveDuplicateLinkAction, action.InternalId);
        }
Exemple #9
0
        private void GetLinkChangeActions(LinkChangeGroup linkChangeGroup, RuntimeEntityModel context)
        {
            int skippedWILinkValue = LinkChangeAction.GetStatusStorageValue(LinkChangeAction.LinkChangeActionStatus.SkipScopedOutWILinks);
            int skippedVCLinkValue = LinkChangeAction.GetStatusStorageValue(LinkChangeAction.LinkChangeActionStatus.SkipScopedOutVCLinks);
            var changeActionQuery  = from a in context.RTLinkChangeActionSet
                                     where a.LinkChangeGroup.Id == linkChangeGroup.InternalId &&
                                     a.Status != skippedVCLinkValue &&
                                     a.Status != skippedWILinkValue
                                     select a;

            foreach (RTLinkChangeAction rtLinkChangeAction in changeActionQuery)
            {
                if (rtLinkChangeAction.SourceId.Equals(SourceId))
                {
                    linkChangeGroup.AddChangeAction(RealizeLinkChangeActionFromEDM(linkChangeGroup, rtLinkChangeAction));
                }
            }
        }
Exemple #10
0
        internal LinkChangeAction TryFindLastDeleteAction(LinkChangeAction queryAction)
        {
            ILink link = queryAction.Link;

            using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
            {
                int    completedStatus        = (int)LinkChangeAction.LinkChangeActionStatus.Completed;
                string extendedLinkProperties = GetExtendedPropertyString(link);
                var    query =
                    (from lcAction in context.RTLinkChangeActionSet
                     where lcAction.SessionGroupUniqueId.Equals(SessionGroupId) &&
                     lcAction.SessionUniqueId.Equals(SessionId) &&
                     lcAction.SourceId.Equals(SourceId) &&
                     lcAction.Status == completedStatus &&
                     lcAction.ArtifactLink.SourceArtifactId.Equals(link.SourceArtifactId) &&
                     lcAction.ArtifactLink.SourceArtifactUri.Equals(link.SourceArtifact.Uri) &&
                     lcAction.ArtifactLink.TargetArtifactUri.Equals(link.TargetArtifact.Uri) &&
                     lcAction.ArtifactLink.Comment.Equals(link.Comment) &&
                     lcAction.ArtifactLink.LinkType.ReferenceName.Equals(link.LinkType.ReferenceName) &&
                     lcAction.ArtifactLink.LinkType.ExtendedProperty.Equals(extendedLinkProperties) &&
                     lcAction.ArtifactLink.LinkType.SourceArtifactType.ReferenceName.Equals(link.LinkType.SourceArtifactType.ReferenceName) &&
                     lcAction.ArtifactLink.LinkType.SourceArtifactType.ArtifactContentType.Equals(link.LinkType.SourceArtifactType.ContentTypeReferenceName) &&
                     lcAction.ArtifactLink.LinkType.TargetArtifactType.ReferenceName.Equals(link.LinkType.TargetArtifactType.ReferenceName) &&
                     lcAction.ArtifactLink.LinkType.TargetArtifactType.ArtifactContentType.Equals(link.LinkType.TargetArtifactType.ContentTypeReferenceName)
                     orderby lcAction.Id descending
                     select lcAction).Take(1);

                if (query.Count() == 0 ||
                    !query.First().ActionId.Equals(WellKnownChangeActionId.Delete))
                {
                    return(null);
                }

                return(new LinkChangeAction(
                           WellKnownChangeActionId.Delete,
                           queryAction.Link,
                           LinkChangeAction.LinkChangeActionStatus.Completed,
                           query.First().Conflicted));
            }
        }
Exemple #11
0
        internal void TryDeprecateActiveAddActionMigrationInstruction(LinkChangeAction queryAction)
        {
            ILink link                    = queryAction.Link;
            int   translatedStatus        = LinkChangeAction.GetStatusStorageValue(LinkChangeAction.LinkChangeActionStatus.Translated);
            int   readyForMigrationStatus = LinkChangeAction.GetStatusStorageValue(LinkChangeAction.LinkChangeActionStatus.ReadyForMigration);

            using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
            {
                string extendedLinkProperties = GetExtendedPropertyString(link);
                var    query =
                    (from lcAction in context.RTLinkChangeActionSet
                     where lcAction.ActionId.Equals(WellKnownChangeActionId.Add) &&
                     lcAction.SessionGroupUniqueId.Equals(SessionGroupId) &&
                     lcAction.SessionUniqueId.Equals(SessionId) &&
                     lcAction.SourceId.Equals(SourceId) &&
                     (lcAction.Status == translatedStatus || lcAction.Status == readyForMigrationStatus) &&
                     lcAction.ArtifactLink.SourceArtifactId.Equals(link.SourceArtifactId) &&
                     lcAction.ArtifactLink.SourceArtifactUri.Equals(link.SourceArtifact.Uri) &&
                     lcAction.ArtifactLink.TargetArtifactUri.Equals(link.TargetArtifact.Uri) &&
                     lcAction.ArtifactLink.Comment.Equals(link.Comment) &&
                     lcAction.ArtifactLink.LinkType.ReferenceName.Equals(link.LinkType.ReferenceName) &&
                     lcAction.ArtifactLink.LinkType.ExtendedProperty.Equals(extendedLinkProperties) &&
                     lcAction.ArtifactLink.LinkType.SourceArtifactType.ReferenceName.Equals(link.LinkType.SourceArtifactType.ReferenceName) &&
                     lcAction.ArtifactLink.LinkType.SourceArtifactType.ArtifactContentType.Equals(link.LinkType.SourceArtifactType.ContentTypeReferenceName) &&
                     lcAction.ArtifactLink.LinkType.TargetArtifactType.ReferenceName.Equals(link.LinkType.TargetArtifactType.ReferenceName) &&
                     lcAction.ArtifactLink.LinkType.TargetArtifactType.ArtifactContentType.Equals(link.LinkType.TargetArtifactType.ContentTypeReferenceName)
                     orderby lcAction.Id descending
                     select lcAction).Take(1);


                foreach (var action in query)
                {
                    action.Status = LinkChangeAction.GetStatusStorageValue(LinkChangeAction.LinkChangeActionStatus.Skipped);
                }

                context.TrySaveChanges();
            }
        }
 public bool IsActionInDelta(LinkChangeAction linkChangeAction)
 {
     return(m_linkChangeGroupManager.IsActionInDelta(linkChangeAction));
 }
 internal LinkChangeAction TryFindLastDeleteAction(LinkChangeAction queryAction)
 {
     return(m_linkChangeGroupManager.TryFindLastDeleteAction(queryAction));
 }
 internal void TryDeprecateActiveAddActionMigrationInstruction(LinkChangeAction queryAction)
 {
     m_linkChangeGroupManager.TryDeprecateActiveAddActionMigrationInstruction(queryAction);
 }