Ejemplo n.º 1
0
        internal RTLinkChangeGroup AddLinkChangeGroup(LinkChangeGroup group)
        {
            using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
            {
                var rtLinkChangeGroup = RTLinkChangeGroup.CreateRTLinkChangeGroup(
                    0, (int)group.Status, false, SessionGroupId, SessionId, SourceId);
                rtLinkChangeGroup.GroupName = group.GroupName;
                context.AddToRTLinkChangeGroupSet(rtLinkChangeGroup);

                int newActiveActionCount = 0;
                foreach (LinkChangeAction a in group.Actions)
                {
                    RTLinkChangeAction rtLinkChangeAction = AddChangeAction(a, context);
                    if (rtLinkChangeAction == null)
                    {
                        continue;
                    }

                    rtLinkChangeAction.LinkChangeGroup = rtLinkChangeGroup;
                    ++newActiveActionCount;
                }

                if (newActiveActionCount <= 0)
                {
                    return(null);
                }

                context.TrySaveChanges();
                group.InternalId = rtLinkChangeGroup.Id;
                context.Detach(rtLinkChangeGroup);
                return(rtLinkChangeGroup);
            }
        }
Ejemplo n.º 2
0
        internal void SaveChangeGroupActionStatus(LinkChangeGroup linkGroup)
        {
            using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
            {
                var groupQuery = from g in context.RTLinkChangeGroupSet
                                 where g.Id == linkGroup.InternalId
                                 select g;

                Debug.Assert(groupQuery.First() != null);
                RTLinkChangeGroup rtLinkChangeGroup = groupQuery.First();
                rtLinkChangeGroup.Status = (int)linkGroup.Status;
                rtLinkChangeGroup.ContainsConflictedAction = linkGroup.IsConflicted;

                foreach (LinkChangeAction linkAction in linkGroup.Actions)
                {
                    if (linkAction.InternalId == LinkChangeAction.INVALID_INTERNAL_ID)
                    {
                        throw new InvalidOperationException("Error updating link change action: action is not persisted in DB.");
                    }

                    RTLinkChangeAction rtLinkChangeAction = context.RTLinkChangeActionSet.Where
                                                                (lcg => lcg.Id == linkAction.InternalId).First();

                    rtLinkChangeAction.Status             = (int)linkAction.Status;
                    rtLinkChangeAction.Conflicted         = linkAction.IsConflicted;
                    rtLinkChangeAction.ServerLinkChangeId = linkAction.ServerLinkChangeId;
                }

                context.TrySaveChanges();
            }
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
0
        private void UpdateLinkChangeActionStatus(
            long internalId,
            LinkChangeAction.LinkChangeActionStatus linkChangeActionStatus,
            RuntimeEntityModel context)
        {
            Debug.Assert(internalId != LinkChangeAction.INVALID_INTERNAL_ID);

            var linkChangeActionQuery = from a in context.RTLinkChangeActionSet
                                        where a.Id == internalId
                                        select a;

            Debug.Assert(linkChangeActionQuery.Count() == 1);
            RTLinkChangeAction rtLinkChangeAction = linkChangeActionQuery.First();

            rtLinkChangeAction.Status = (int)linkChangeActionStatus;
        }
Ejemplo n.º 5
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);
        }
Ejemplo n.º 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);

            linkChangeAction.ServerLinkChangeId = rtLinkChangeAction.ServerLinkChangeId;
            return(linkChangeAction);
        }