private IMigrationAction RealizeSingleActionFromEDM(
            RTChangeAction runTimeChangeAction)
        {
            XmlDocument changeActionData = null;

            if (!string.IsNullOrEmpty(runTimeChangeAction.ActionData))
            {
                changeActionData = new XmlDocument();
                changeActionData.LoadXml(runTimeChangeAction.ActionData);
            }

            IMigrationItemSerializer itemSerializer = ManagerWithMigrationItemSerializers[runTimeChangeAction.ActionId];

            DemandUnlocked("Cannot Create an action on a group after the initial Create");

            SqlMigrationAction migrationAction = new SqlMigrationAction(
                this, runTimeChangeAction.ChangeActionId, runTimeChangeAction.ActionId,
                itemSerializer.LoadItem(runTimeChangeAction.SourceItem, Manager),
                runTimeChangeAction.FromPath, runTimeChangeAction.ToPath, runTimeChangeAction.Version,
                runTimeChangeAction.MergeVersionTo, runTimeChangeAction.ItemTypeReferenceName, changeActionData,
                runTimeChangeAction.IsSubstituted ? ActionState.Skipped : ActionState.Pending);

            if (!m_usePagedActions)
            {
                AddAction(migrationAction);
            }

            migrationAction.IsDirty = false;
            return(migrationAction);
        }
Пример #2
0
        public void RegisterMigrationItemSerializer(Guid changeActionType, IMigrationItemSerializer serializer)
        {
            if (this.m_serializer.ContainsKey(changeActionType))
            {
                m_serializer.Remove(changeActionType);
            }

            m_serializer.Add(changeActionType, serializer);
        }
 /// <summary>
 /// Return a service based on serviceType.
 /// </summary>
 /// <param name="serviceType"></param>
 /// <returns></returns>
 public object GetService(Type serviceType)
 {
     if (serviceType == typeof(IAnalysisProvider))
     {
         if (m_analysisProvider == null)
         {
             m_analysisProvider = new TfsFileSystemAnalysisProvider();
         }
         return(m_analysisProvider);
     }
     else if (serviceType == typeof(IServerPathTranslationService))
     {
         if (m_serverPathTranslationProvider == null)
         {
             m_serverPathTranslationProvider = new TfsFileSystemTranslationService();
         }
         return(m_serverPathTranslationProvider);
     }
     else if (serviceType == typeof(IMigrationProvider))
     {
         if (m_migrationProvider == null)
         {
             m_migrationProvider = new TfsFileSystemMigrationProvider();
         }
         return(m_migrationProvider);
     }
     else if (serviceType == typeof(IVCDiffProvider))
     {
         if (m_diffProvider == null)
         {
             m_diffProvider = new TfsFileSystemDiffProvider();
         }
         return(m_diffProvider);
     }
     else if (serviceType == typeof(ISyncMonitorProvider))
     {
         if (m_syncMonitorProvider == null)
         {
             m_syncMonitorProvider = new TfsFileSystemSyncMonitorProvider();
         }
         return(m_syncMonitorProvider);
     }
     else if (serviceType == typeof(IMigrationItemSerializer))
     {
         if (m_migrationItemSerializer == null)
         {
             m_migrationItemSerializer = new TfsFileSystemMigrationItemSerializer();
         }
         return(m_migrationItemSerializer);
     }
     return(null);
 }
Пример #4
0
 /// <summary>
 /// Creates a new migration action instance using a default transaction.
 /// </summary>
 internal abstract void CreateNew(IMigrationItemSerializer serializer);
        /// <summary>
        /// bulk save sliced child change actions
        /// </summary>
        /// <param name="page">a page/slice of child change actions</param>
        internal void BatchSaveChangeActions(IList <IMigrationAction> page)
        {
            Debug.Assert(m_runTimeChangeGroup != null);

            const int bulkChangeActionInsertionSize = 1000;
            int       changeActionCount             = 0;
            int       pageIndex = 0;

            while (pageIndex < page.Count)
            {
                using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
                {
                    RTChangeGroup rtChangeGroupCache = getNativeRTChangeGroup(context);
                    Debug.Assert(null != rtChangeGroupCache);

                    while (pageIndex < page.Count && changeActionCount < bulkChangeActionInsertionSize)
                    {
                        SqlMigrationAction action = page[pageIndex] as SqlMigrationAction;
                        Debug.Assert(null != action);

                        // cache "Dirty" flag, as assignin 'this' to its ChangeGroup will set the flag to true
                        bool actionWasDirty = action.IsDirty;
                        action.ChangeGroup = this;

                        if (!action.IsPersisted)
                        {
                            IMigrationItemSerializer serializer = ManagerWithMigrationItemSerializers[action.Action];
                            action.CreateNew(serializer);
                            context.AddToRTChangeActionSet(action.RTChangeAction);
                            action.RTChangeAction.ChangeGroup = rtChangeGroupCache;
                            ++changeActionCount;
                        }
                        else if (actionWasDirty)
                        {
                            IMigrationItemSerializer serializer     = ManagerWithMigrationItemSerializers[action.Action];
                            RTChangeAction           rtChangeAction = action.RTChangeAction;
                            if (null != rtChangeAction)
                            {
                                rtChangeAction = context.GetObjectByKey(rtChangeAction.EntityKey) as RTChangeAction;
                            }
                            else
                            {
                                rtChangeAction = context.RTChangeActionSet.Where(ca => ca.ChangeActionId == action.ActionId).First();
                            }

                            rtChangeAction.Recursivity           = action.Recursive;
                            rtChangeAction.IsSubstituted         = action.State == ActionState.Skipped ? true : false;
                            rtChangeAction.ActionId              = action.Action;
                            rtChangeAction.SourceItem            = serializer.SerializeItem(action.SourceItem);
                            rtChangeAction.ToPath                = action.Path;
                            rtChangeAction.ItemTypeReferenceName = action.ItemTypeReferenceName;
                            rtChangeAction.FromPath              = action.FromPath;
                            rtChangeAction.Version               = action.Version;
                            rtChangeAction.MergeVersionTo        = action.MergeVersionTo;

                            if (action.MigrationActionDescription != null &&
                                action.MigrationActionDescription.DocumentElement != null)
                            {
                                rtChangeAction.ActionData = action.MigrationActionDescription.DocumentElement.OuterXml;
                            }
                            ++changeActionCount;
                        }

                        ++pageIndex;
                    }
                    context.TrySaveChanges();
                    changeActionCount = 0;
                }
            }
        }
        protected override void Create()
        {
            // ToDo
            ChangeStatus targetStatus = Status;

            SqlChangeGroupManager manager = this.Manager as SqlChangeGroupManager;

            Debug.Assert(null != manager, "Manager is not a SqlChangeGroupManager for SqlChangeGroup");

            // save the group (without child actions)
            SavePartialChangeGroup();

            // bulk save sliced child change actions
            const int bulkChangeActionInsertionSize = 1000;
            int       changeActionCount             = 0;

            while (Actions.Count > 0)
            {
                using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
                {
                    try
                    {
                        context.Attach(m_runTimeChangeGroup);

                        while (Actions.Count > 0 && changeActionCount < bulkChangeActionInsertionSize)
                        {
                            SqlMigrationAction action = Actions[0] as SqlMigrationAction;
                            Debug.Assert(null != action);
                            action.ChangeGroup = this;

                            IMigrationItemSerializer serializer = ManagerWithMigrationItemSerializers[action.Action];
                            action.CreateNew(serializer);
                            action.RTChangeAction.ChangeGroup = m_runTimeChangeGroup;

                            // Remove processed child change actions.
                            // When this ObjectModel context is disposed,
                            // the RTChangeAction will be disposed as well.
                            Actions.RemoveAt(0);

                            ++changeActionCount;
                        }
                        context.TrySaveChanges();
                    }
                    finally
                    {
                        context.Detach(m_runTimeChangeGroup);
                    }
                }

                changeActionCount = 0;
            }

            // update group status in DB
            using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
            {
                try
                {
                    context.Attach(m_runTimeChangeGroup);
                    m_runTimeChangeGroup.Status          = (int)targetStatus;
                    m_runTimeChangeGroup.UsePagedActions = m_usePagedActions;
                    context.TrySaveChanges();
                }
                finally
                {
                    context.Detach(m_runTimeChangeGroup);
                }
            }
        }
Пример #7
0
 public void RegisterDefaultSerializer(IMigrationItemSerializer defaultSerializer)
 {
     m_defaultSerializer = defaultSerializer;
 }
Пример #8
0
 /// <summary>
 /// Registers a source serializer for a ContentType with the ChangeGroupManager.
 /// </summary>
 /// <param name="type">The ContentType id</param>
 /// <param name="serializer">The IMigrationItemSerializer to register for the specified ContentType</param>
 /// <seealso cref="Microsoft.TeamFoundation.Migration.Toolkit.IMigrationItemSerializer"/>
 /// <seealso cref="Microsoft.TeamFoundation.Migration.Toolkit.Services.ContentType"/>
 /// <seealso cref="Microsoft.TeamFoundation.Migration.Toolkit.Services.WellKnownContentType"/>
 public void RegisterSourceSerializer(Guid type, IMigrationItemSerializer serializer)
 {
     m_changeGroupManager.RegisterMigrationItemSerializer(type, serializer);
 }
Пример #9
0
 /// <summary>
 /// Registers the specified IMigrationItemSerializer as the default source serializer with the ChangeGroupManager.
 /// </summary>
 /// <param name="serializer">The serializer to register</param>
 /// <seealso cref="Microsoft.TeamFoundation.Migration.Toolkit.IMigrationItemSerializer"/>
 public void RegisterDefaultSourceSerializer(IMigrationItemSerializer serializer)
 {
     m_changeGroupManager.RegisterDefaultSerializer(serializer);
 }
Пример #10
0
        internal override void CreateNew(IMigrationItemSerializer serializer)
        {
            // TODO: Consider renaming local RTChangeAction property to avoid conflict
            if (null == serializer)
            {
                throw new InvalidOperationException("IMigrationItem serializer is not registered");
            }

            m_RTChangeAction = Microsoft.TeamFoundation.Migration.EntityModel.RTChangeAction.CreateRTChangeAction
                                   (ChangeGroup.ChangeGroupId, ActionId, Recursive, (State == ActionState.Skipped), 1, Action,
                                   serializer.SerializeItem(SourceItem), Path, false, ItemTypeReferenceName);
            m_RTChangeAction.FromPath       = FromPath;
            m_RTChangeAction.Version        = this.Version;
            m_RTChangeAction.MergeVersionTo = this.MergeVersionTo;

            if (MigrationActionDescription != null && MigrationActionDescription.DocumentElement != null)
            {
                m_RTChangeAction.ActionData = MigrationActionDescription.DocumentElement.OuterXml;
            }

            m_RTChangeAction.PropertyChanged +=
                new System.ComponentModel.PropertyChangedEventHandler(RTChangeAction_PropertyChanged);

            /*
             * Debug.Assert(ActionId == -1);
             *
             * MigrationSqlTransaction sqlTrx = (MigrationSqlTransaction)trx;
             *
             * using (SqlCommand cmd = sqlTrx.CreateCommand())
             * {
             *  cmd.CommandType = CommandType.StoredProcedure;
             *  cmd.CommandText = "prc_iiCreateActionData";
             *
             *  cmd.Parameters.Add("@ChangeGroupID", SqlDbType.Int).Value = ChangeGroup.ChangeGroupId;
             *
             *  cmd.Parameters.Add("@Order", SqlDbType.Int).Value = Order;
             *
             *  cmd.Parameters.Add("@State", SqlDbType.Int).Value = State;
             *
             *  cmd.Parameters.Add("@SourceItem", SqlDbType.Xml).Value
             *      = (SourceItem != null) ? (object)ChangeGroup.Manager.SourceSerializer.SerializeItem(SourceItem) : (object)DBNull.Value;
             *
             *  cmd.Parameters.Add("@TargetSourceItem", SqlDbType.Xml).Value
             *      = (TargetSourceItem != null) ? (object)ChangeGroup.Manager.TargetSerializer.SerializeItem(TargetSourceItem) : (object)DBNull.Value;
             *
             *  cmd.Parameters.Add("@TargetTargetItem", SqlDbType.Xml).Value
             *      = (TargetTargetItem != null) ? (object)ChangeGroup.Manager.TargetSerializer.SerializeItem(TargetTargetItem) : (object)DBNull.Value;
             *
             *  cmd.Parameters.Add("@BasicAction", SqlDbType.Int).Value = Action;
             *  cmd.Parameters.Add("@Recursivity", SqlDbType.Bit).Value = Recursive;
             *
             *  cmd.Parameters.Add("@Label", SqlDbType.NVarChar).Value
             *      = (Label != null) ? Label : (object)DBNull.Value;
             *
             *  cmd.Parameters.Add("@Version", SqlDbType.NVarChar).Value
             *      = (Version != null) ? Version : (object)DBNull.Value;
             *
             *  cmd.Parameters.Add("@MergeVersionTo", SqlDbType.NVarChar).Value
             *      = (MergeVersionTo != null) ? MergeVersionTo : (object)DBNull.Value;
             *
             *  int identity;
             *  if (DataAccessManager.TryExecuteScalar<int>(cmd, out identity))
             *  {
             *       ActionId = identity;
             *  }
             *  else
             *  {
             *      throw new MigrationException(MigrationToolkitResources.FailureCreatingNewActionRow);
             *  }
             * }*/
        }
Пример #11
0
 public ClearCaseMigrationProvider()
 {
     m_alternativeSerializer     = null;
     m_hwmLastSyncedTfsChangeset = null;
 }
Пример #12
0
 /// <summary>
 /// Constructor.
 /// Initialize a clearCaseV6MigrationProvider with an alternative serializer.
 /// This is used for ClearTFSAdapter
 /// </summary>
 /// <param name="alternativeSerializer"></param>
 public ClearCaseMigrationProvider(IMigrationItemSerializer alternativeSerializer, string hwmName)
 {
     m_alternativeSerializer     = alternativeSerializer;
     m_hwmLastSyncedTfsChangeset = new HighWaterMark <int>(hwmName);
 }