예제 #1
0
        public ListValidationServiceController(SPConnection sourceCreds, SPConnection targetCreds, IUserMapping userMapping, ILogger logger)
        {
            var container = new UnityContainer();

            container.RegisterType <ISharePointRepository, SharePointRepository>();
            this.SharePointRepository = container.Resolve <ISharePointRepository>(
                new ParameterOverrides
            {
                { "logger", logger }
            });

            container.RegisterType <ISharePointRepository2007, SharePointRepository2007>();
            this.SharePointRepository2007 = container.Resolve <ISharePointRepository2007>(
                new ParameterOverrides
            {
                { "logger", logger }
            });

            this.SourceSiteCreds = sourceCreds;
            this.TargetSiteCreds = targetCreds;

            if (sourceCreds.SiteType == SiteType.WSS)
            {
                this.SourceWSSContext = this.SharePointRepository2007.GetSPContext(SourceSiteCreds.SiteUrl, SourceSiteCreds.UserName, SourceSiteCreds.Password);
            }
            else if (sourceCreds.SiteType == SiteType.SharePointOnPremises)
            {
                this.SourceClientContext = this.SharePointRepository.GetSP2013Context(SourceSiteCreds.SiteUrl, SourceSiteCreds.UserName, SourceSiteCreds.Password, SourceSiteCreds.Domain);
            }
            else
            {
                this.SourceClientContext = this.SharePointRepository.GetSPOContext(SourceSiteCreds.SiteUrl, SourceSiteCreds.UserName, SourceSiteCreds.Password);
            }

            if (targetCreds.SiteType == SiteType.WSS)
            {
                this.TargetWSSContext = this.SharePointRepository2007.GetSPContext(TargetSiteCreds.SiteUrl, TargetSiteCreds.UserName, TargetSiteCreds.Password);
            }
            else if (targetCreds.SiteType == SiteType.SharePointOnPremises)
            {
                this.TargetClientContext = this.SharePointRepository.GetSP2013Context(TargetSiteCreds.SiteUrl, TargetSiteCreds.UserName, TargetSiteCreds.Password, TargetSiteCreds.Domain);
            }
            else
            {
                this.TargetClientContext = this.SharePointRepository.GetSPOContext(TargetSiteCreds.SiteUrl, TargetSiteCreds.UserName, TargetSiteCreds.Password);
            }

            this.UserMapping = userMapping;
            this.logger      = logger;

            //re-initialize _getExistingLists
            _getExistingLists = new List <string>();
        }
        static void Main(string[] args)
        {
            try
            {
                //Register and initialize containers
                var container = new UnityContainer();
                container.RegisterType <ISharePointWebValidationService, WebValidationServiceController>();
                container.RegisterType <ISharePointListValidationService, ListValidationServiceController>();
                container.RegisterType <IUserMapping, UserMappingController>();

                IUserMapping userMapping = null;
                if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings["UserMappingFilePath"]))
                {
                    container.RegisterType <IUserMapping, UserMappingController>();
                    userMapping = container.Resolve <IUserMapping>(
                        new ParameterOverrides
                    {
                        { "filePath", ConfigurationManager.AppSettings["UserMappingFilePath"] }
                    });
                }
                var siteRelativeUrls = ConfigurationManager.AppSettings["SiteRelativeUrls"].Split(new char[] { ';' });
                var userMappingFile  = ConfigurationManager.AppSettings["UserMappingFilePath"];

                foreach (var siteRelativeUrl in siteRelativeUrls)
                {
                    var sRelativeUrl  = siteRelativeUrl;
                    var sourceSiteUrl = ConfigurationManager.AppSettings["SourceSiteHost"] + sRelativeUrl;
                    var targetSiteUrl = ConfigurationManager.AppSettings["TargetSiteHost"] + sRelativeUrl;

                    //initialize source connection object
                    var srcSPCredObject = new SPConnection(ConfigurationManager.AppSettings["SourceSiteType"], sourceSiteUrl, sRelativeUrl, ConfigurationManager.AppSettings["SourceUserName"], ConfigurationManager.AppSettings["SourcePassword"]);
                    var tgtSPCredObject = new SPConnection(ConfigurationManager.AppSettings["TargetSiteType"], targetSiteUrl, sRelativeUrl, ConfigurationManager.AppSettings["TargetUserName"], ConfigurationManager.AppSettings["TargetPassword"]);

                    var spWebValidationService = container.Resolve <ISharePointWebValidationService>(
                        new ParameterOverrides
                    {
                        { "sourceCreds", srcSPCredObject },
                        { "targetCreds", tgtSPCredObject },
                        { "userMapping", userMapping },
                        { "logger", logger }
                    });

                    var spListValidationService = container.Resolve <ISharePointListValidationService>(
                        new ParameterOverrides
                    {
                        { "sourceCreds", srcSPCredObject },
                        { "targetCreds", tgtSPCredObject },
                        { "userMapping", userMapping },
                        { "logger", logger }
                    });

                    //Create base directory first based on the sRelativeUrl
                    dirInfo = Directory.CreateDirectory(ConfigurationManager.AppSettings["LogDirectory"] + sRelativeUrl);

                    //Get missing Sites from the site collection
                    logger.Log(LogLevel.Info, $"Validating Sites and Lists for {targetSiteUrl}");

                    Task <List <string> > t_missingSites = Task.Factory.StartNew <List <string> >(() =>
                    {
                        logger.Log(LogLevel.Info, $"Checking for missing sites");
                        return(spWebValidationService.MissingSites());
                    });

                    t_missingSites.Wait();
                    var missingSites = t_missingSites.Result;

                    if (missingSites.Count > 0)
                    {
                        CsvWriterHelper.WriteCsvRecords(missingSites, Path.Combine(dirInfo.FullName, "missingSites.csv"));
                    }

                    //Perform site collection operations
                    SiteCollectionValidationOperations(spWebValidationService);

                    //Perform web & list operations
                    var webUrls = spWebValidationService.GetAllSourceWebUrls();

                    foreach (var webUrl in webUrls)
                    {
                        var webUri      = new Uri(webUrl, true);
                        var relativeUri = webUri.MakeRelativeUri(webUri);
                        dirInfo = Directory.CreateDirectory(dirInfo.FullName + relativeUri.ToString());

                        if (webUrl == sourceSiteUrl)
                        {
                            WebValidationOperations(spWebValidationService);
                            ListValidationOperations(spListValidationService);
                            continue;
                        }

                        if (missingSites.Count > 0)
                        {
                            var match = missingSites.Exists(s => s == webUrl);
                            if (match)
                            {
                                continue;
                            }
                        }

                        targetSiteUrl = ConfigurationManager.AppSettings["TargetSiteHost"] + "/" + relativeUri.ToString();

                        //initialize source connection object
                        srcSPCredObject = new SPConnection(ConfigurationManager.AppSettings["SourceSiteType"], webUrl, relativeUri.ToString(), ConfigurationManager.AppSettings["SourceUserName"], ConfigurationManager.AppSettings["SourcePassword"]);
                        tgtSPCredObject = new SPConnection(ConfigurationManager.AppSettings["TargetSiteType"], targetSiteUrl, relativeUri.ToString(), ConfigurationManager.AppSettings["TargetUserName"], ConfigurationManager.AppSettings["TargetPassword"]);

                        spWebValidationService = container.Resolve <ISharePointWebValidationService>(
                            new ParameterOverrides
                        {
                            { "sourceCreds", srcSPCredObject },
                            { "targetCreds", tgtSPCredObject },
                            { "userMapping", userMapping },
                            { "logger", logger }
                        });
                        WebValidationOperations(spWebValidationService);

                        spListValidationService = container.Resolve <ISharePointListValidationService>(
                            new ParameterOverrides
                        {
                            { "sourceCreds", srcSPCredObject },
                            { "targetCreds", tgtSPCredObject },
                            { "userMapping", userMapping },
                            { "logger", logger }
                        });
                        ListValidationOperations(spListValidationService);
                    }
                }


                /*
                 * List<Task> tasks = new List<Task>();
                 * foreach (var siteRelativeUrl in siteRelativeUrls)
                 * {
                 *  //Passing the task with parameters -- arg = siteRelativeUrl.
                 *  Task t = Task.Factory.StartNew((arg) =>
                 *  {
                 *      var sRelativeUrl = (string)arg;
                 *      var sourceSiteUrl = ConfigurationManager.AppSettings["SourceSiteHost"] + sRelativeUrl;
                 *      var targetSiteUrl = ConfigurationManager.AppSettings["TargetSiteHost"] + sRelativeUrl;
                 *
                 *      //initialize source connection object
                 *      var srcSPCredObject = new SPConnection(sourceSiteUrl, ConfigurationManager.AppSettings["SourceUserName"], ConfigurationManager.AppSettings["SourcePassword"]);
                 *      var tgtSPCredObject = new SPConnection(targetSiteUrl, ConfigurationManager.AppSettings["TargetUserName"], ConfigurationManager.AppSettings["TargetPassword"]);
                 *
                 *      var spWebValidationService = container.Resolve<ISharePointWebValidationService>(
                 *          new ParameterOverrides
                 *          {
                 *              {"sourceCreds", srcSPCredObject },
                 *              {"targetCreds", tgtSPCredObject},
                 *              {"userMapping", userMapping},
                 *              {"logger", logger }
                 *          });
                 *
                 *      var spListValidationService = container.Resolve<ISharePointListValidationService>(
                 *          new ParameterOverrides
                 *          {
                 *              {"sourceCreds", srcSPCredObject },
                 *              {"targetCreds", tgtSPCredObject},
                 *              {"userMapping", userMapping},
                 *              {"logger", logger }
                 *          });
                 *
                 *      //Create base directory first based on the sRelativeUrl
                 *      dirInfo = Directory.CreateDirectory(ConfigurationManager.AppSettings["LogDirectory"] + sRelativeUrl);
                 *
                 *      //Get missing Sites from the site collection
                 *      logger.Log(LogLevel.Info, $"Validating Sites and Lists for {targetSiteUrl}");
                 *
                 *      Task<List<string>> t_missingSites = Task.Factory.StartNew<List<string>>(() =>
                 *      {
                 *          logger.Log(LogLevel.Info, $"Checking for missing sites");
                 *          return spWebValidationService.MissingSites();
                 *      });
                 *
                 *      t_missingSites.Wait();
                 *      var missingSites = t_missingSites.Result;
                 *
                 *      if (missingSites.Count > 0)
                 *          CsvWriterHelper.WriteCsvRecords(missingSites, Path.Combine(dirInfo.FullName, "missingSites.csv"));
                 *
                 *      //Perform site collection operations
                 *      SiteCollectionValidationOperations(spWebValidationService);
                 *
                 *      //Perform web & list operations
                 *      var webUrls = spWebValidationService.GetAllSourceWebUrls();
                 *
                 *      foreach (var webUrl in webUrls)
                 *      {
                 *          var webUri = new Uri(webUrl, true);
                 *          var relativeUri = webUri.MakeRelativeUri(webUri);
                 *          dirInfo = Directory.CreateDirectory(dirInfo.FullName + relativeUri.ToString());
                 *
                 *          if (webUrl == sourceSiteUrl)
                 *          {
                 *              WebValidationOperations(spWebValidationService);
                 *              ListValidationOperations(spListValidationService);
                 *              continue;
                 *          }
                 *
                 *          if (missingSites.Count > 0)
                 *          {
                 *              var match = missingSites.Exists(s => s == webUrl);
                 *              if (match)
                 *                  continue;
                 *          }
                 *
                 *          targetSiteUrl = ConfigurationManager.AppSettings["TargetSiteHost"] + "/" + relativeUri.ToString();
                 *
                 *          //initialize source connection object
                 *          srcSPCredObject = new SPConnection(webUrl, ConfigurationManager.AppSettings["SourceUserName"], ConfigurationManager.AppSettings["SourcePassword"]);
                 *          tgtSPCredObject = new SPConnection(targetSiteUrl, ConfigurationManager.AppSettings["TargetUserName"], ConfigurationManager.AppSettings["TargetPassword"]);
                 *
                 *          spWebValidationService = container.Resolve<ISharePointWebValidationService>(
                 *          new ParameterOverrides
                 *          {
                 *              {"sourceCreds", srcSPCredObject },
                 *              {"targetCreds", tgtSPCredObject},
                 *              {"userMapping", userMapping},
                 *              {"logger", logger }
                 *          });
                 *          WebValidationOperations(spWebValidationService);
                 *
                 *          spListValidationService = container.Resolve<ISharePointListValidationService>(
                 *          new ParameterOverrides
                 *          {
                 *              {"sourceCreds", srcSPCredObject },
                 *              {"targetCreds", tgtSPCredObject},
                 *              {"userMapping", userMapping},
                 *              {"logger", logger }
                 *          });
                 *          ListValidationOperations(spListValidationService);
                 *      }
                 *  },
                 *      siteRelativeUrl // pass symbol as an arg so task receives proper value to process:
                 *  );
                 *
                 *  tasks.Add(t);
                 * }
                 * //wait for all the tasks to complete.
                 * Task.WaitAll(tasks.ToArray());
                 * }
                 */

                logger.Log(LogLevel.Info, $"Validation Complete");
                Console.ReadKey();
            }
            catch (AggregateException ae)
            {
                ae = ae.Flatten();  // could have a tree of exceptions, so flatten first:
                foreach (Exception ex in ae.InnerExceptions)
                {
                    logger.Log(LogLevel.Error, ex);
                }
            }
            catch (Exception ex)
            {
                logger.Log(LogLevel.Error, ex);
            }
        }
        static void Main(string[] args)
        {
            try
            {
                //Register and initialize containers
                var container = new UnityContainer();
                container.RegisterType <ISharePointWebValidationService, WebValidationServiceController>();
                container.RegisterType <ISharePointListValidationService, ListValidationServiceController>();
                container.RegisterType <IUserMapping, UserMappingController>();

                //TODO: What id userMapping is empty.. currently its set to an empty constructor.
                IUserMapping userMapping = new UserMappingController();
                if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings["UserMappingFilePath"]))
                {
                    userMapping = container.Resolve <IUserMapping>(
                        new ParameterOverrides
                    {
                        { "filePath", ConfigurationManager.AppSettings["UserMappingFilePath"] }
                    });
                }

                var siteRelativeUrls = ConfigurationManager.AppSettings["SiteRelativeUrls"].Split(new char[] { ';' });
                var userMappingFile  = ConfigurationManager.AppSettings["UserMappingFilePath"];
                foreach (var siteRelativeUrl in siteRelativeUrls)
                {
                    var sRelativeUrl = siteRelativeUrl.Equals("/") ? "" : siteRelativeUrl;

                    var sourceSiteUrl = ConfigurationManager.AppSettings["SourceSiteHost"] + sRelativeUrl;
                    var targetSiteUrl = ConfigurationManager.AppSettings["TargetSiteHost"] + sRelativeUrl;

                    //initialize source connection object
                    var srcSPCredObject = new SPConnection(ConfigurationManager.AppSettings["SourceSiteType"], sourceSiteUrl, sRelativeUrl, ConfigurationManager.AppSettings["SourceUserName"], ConfigurationManager.AppSettings["SourcePassword"]);
                    var tgtSPCredObject = new SPConnection(ConfigurationManager.AppSettings["TargetSiteType"], targetSiteUrl, sRelativeUrl, ConfigurationManager.AppSettings["TargetUserName"], ConfigurationManager.AppSettings["TargetPassword"]);

                    var spWebValidationService = container.Resolve <ISharePointWebValidationService>(
                        new ParameterOverrides
                    {
                        { "sourceCreds", srcSPCredObject },
                        { "targetCreds", tgtSPCredObject },
                        { "userMapping", userMapping },
                        { "logger", logger }
                    });

                    var spListValidationService = container.Resolve <ISharePointListValidationService>(
                        new ParameterOverrides
                    {
                        { "sourceCreds", srcSPCredObject },
                        { "targetCreds", tgtSPCredObject },
                        { "userMapping", userMapping },
                        { "logger", logger }
                    });

                    //Create base directory first based on the siteRelativeUrl
                    var targetFilePath = Path.Combine(ConfigurationManager.AppSettings["LogDirectory"], (targetSiteUrl.Contains("https://") ? targetSiteUrl.Replace("https://", "") : targetSiteUrl.Replace("http://", "")));
                    dirInfo = Directory.CreateDirectory(targetFilePath);

                    //Get missing Sites from the site collection
                    logger.Log(LogLevel.Info, $"Validating Sites and Lists for {targetSiteUrl}");

                    logger.Log(LogLevel.Info, $"Checking for missing sites");

                    watch.Restart();
                    var missingSites = spWebValidationService.MissingSitesV1();
                    watch.Stop();
                    logger.Log(LogLevel.Info, $"Missing Sites Elapsed Time: {watch.Elapsed.Seconds}");

                    if (missingSites.Count > 0)
                    {
                        CsvWriterHelper.WriteCsvRecords(missingSites, Path.Combine(dirInfo.FullName, "missingSites.csv"));
                    }

                    //Perform site collection operations
                    SiteCollectionValidationOperations(spWebValidationService);

                    //Perform web & list operations
                    var webUrls = spWebValidationService.GetAllSourceWebUrls();

                    //TODO: Revisit this again

                    /*
                     * if (webUrls.Count() == 1)
                     * {
                     *  if (webUrls.First().ToLower() == sourceSiteUrl.ToLower())
                     *  {
                     *      WebValidationOperations(spWebValidationService);
                     *      ListValidationOperations(spListValidationService);
                     *  }
                     *  continue;
                     * }
                     */

                    foreach (var webUrl in webUrls)
                    {
                        if (missingSites.Count > 0)
                        {
                            var match = missingSites.Exists(s => s.ToLower() == webUrl.ToLower());
                            if (match)
                            {
                                continue;
                            }
                        }

                        if (webUrl.ToLower() == sourceSiteUrl.ToLower())
                        {
                            WebValidationOperations(spWebValidationService);
                            ListValidationOperations(spListValidationService);
                            continue;
                        }

                        // relative URL --> the very last part
                        var relativeUrl = webUrl.ToLower().Replace(sourceSiteUrl.ToLower(), "");

                        targetSiteUrl = ConfigurationManager.AppSettings["TargetSiteHost"] + sRelativeUrl + relativeUrl;

                        targetFilePath = Path.Combine(ConfigurationManager.AppSettings["LogDirectory"], (targetSiteUrl.Contains("https://") ? targetSiteUrl.Replace("https://", "") : targetSiteUrl.Replace("http://", "")));
                        dirInfo        = Directory.CreateDirectory(targetFilePath);

                        //initialize source connection object
                        srcSPCredObject = new SPConnection(ConfigurationManager.AppSettings["SourceSiteType"], webUrl, relativeUrl, ConfigurationManager.AppSettings["SourceUserName"], ConfigurationManager.AppSettings["SourcePassword"]);
                        tgtSPCredObject = new SPConnection(ConfigurationManager.AppSettings["TargetSiteType"], targetSiteUrl, relativeUrl, ConfigurationManager.AppSettings["TargetUserName"], ConfigurationManager.AppSettings["TargetPassword"]);


                        logger.Log(LogLevel.Info, $"Validating Sites and Lists for {targetSiteUrl}");

                        spWebValidationService = container.Resolve <ISharePointWebValidationService>(
                            new ParameterOverrides
                        {
                            { "sourceCreds", srcSPCredObject },
                            { "targetCreds", tgtSPCredObject },
                            { "userMapping", userMapping },
                            { "logger", logger }
                        });
                        WebValidationOperations(spWebValidationService);

                        spListValidationService = container.Resolve <ISharePointListValidationService>(
                            new ParameterOverrides
                        {
                            { "sourceCreds", srcSPCredObject },
                            { "targetCreds", tgtSPCredObject },
                            { "userMapping", userMapping },
                            { "logger", logger }
                        });
                        ListValidationOperations(spListValidationService);
                    }
                }
                logger.Log(LogLevel.Info, $"Validation Complete");
            }
            catch (Exception ex)
            {
                logger.Log(LogLevel.Error, ex);
            }
        }