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); } }