/// <summary>
        /// Start the migration.
        /// </summary>
        /// <param name="migrateContentTypes">true if migrate ContentTypes</param>
        /// <param name="migrateUser">true if migrate User</param>
        /// <param name="migrateGroup">true if migrate Group</param>
        /// <param name="migrateSiteColumns">true if migrate SiteColumns</param>
        /// <param name="migratePermission">true if migrate PermissionLevel</param>
        /// <param name="migrateWorkflows">true if migrate Workflows</param>
        /// <returns>true when migration finished</returns>
        internal bool StartMigration(bool migrateContentTypes, bool migrateUser, bool migrateGroup, bool migrateSiteColumns, bool migratePermission, bool migrateWorkflows)
        {
            IElementsMigrator   migrator = new Sharepoint2010Migrator(this.sourceClientContext, this.targetClientContext, this.logger);
            MigrationDelegation migrate  = null;

            if (migrateContentTypes)
            {
                migrate = migrator.MigrateContentTypes;
                this.Migrate(migrate, "Content-Types");
            }

            if (migrateUser)
            {
                migrate = migrator.MigrateUser;
                this.Migrate(migrate, "User");
            }

            if (migrateGroup)
            {
                migrate = migrator.MigrateGroup;
                this.Migrate(migrate, "Group");
            }

            if (migratePermission)
            {
                migrate = migrator.MigratePermissionlevels;
                this.Migrate(migrate, "Permissionlevel");
            }

            if (migrateSiteColumns)
            {
                migrate = migrator.MigrateSiteColumns;
                this.Migrate(migrate, "SiteColumns");
            }

            if (migrateWorkflows)
            {
                migrate = migrator.MigrateWorkflow;
                this.Migrate(migrate, "Workflow");
            }

            return(true);
        }
        /// <summary>
        /// Executes the delegation object to migrate the type.
        /// </summary>
        /// <param name="method">delegation method to execute</param>
        /// <param name="migrationType">type of migration for the log-output</param>
        private void Migrate(MigrationDelegation method, string migrationType)
        {
            try
            {
                this.logger.AddMessage("=============== START MIGRATION OF " + migrationType + " =================== \n\r");
                method();
            }
            catch (ElementsMigrationException e)
            {
                this.logger.AddMessage("ERROR during migrating " + migrationType + "\n\r");
                this.logger.AddMessage(e.Message + "\n\r");
                Console.WriteLine("ERROR during migrating {0}", migrationType);
                Console.WriteLine(e);
            }
            catch (Exception e)
            {
                this.logger.AddMessage("FATAL during migrating " + migrationType + "\n\r");
                this.logger.AddMessage(e.Message + "\n\r");
            }

            this.logger.AddMessage("=============== FINISHED MIGRATION OF " + migrationType + " =================== \n\r");
        }