private static void WebValidationOperations(ISharePointWebValidationService spWebValidationService)
        {
            Task <List <string> > t_missingGroups = Task.Factory.StartNew <List <string> >(() =>
            {
                logger.Log(LogLevel.Info, $"Checking for missing web groups");
                return(spWebValidationService.MissingWebGroups());
            }
                                                                                           );

            Task <List <UserGroupStatus> > t_missingUsersInGroups = Task.Factory.StartNew <List <UserGroupStatus> >(() =>
            {
                logger.Log(LogLevel.Info, $"Checking for missing users in groups");
                return(spWebValidationService.MissingUsersInGroups());
            }
                                                                                                                    );

            Task.WaitAll(new Task[] { t_missingGroups, t_missingUsersInGroups });

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

            if (t_missingUsersInGroups.Result.Count > 0)
            {
                CsvWriterHelper.WriteCsvRecords(t_missingUsersInGroups.Result, Path.Combine(dirInfo.FullName, "missingUsersInGroups.csv"));
            }
        }
        private static void SiteCollectionValidationOperations(ISharePointWebValidationService spWebValidationService)
        {
            watch.Restart();
            logger.Log(LogLevel.Info, $"Checking for missing site content types");
            var missingContentTypes = spWebValidationService.MissingContentTypes();

            if (missingContentTypes.Count > 0)
            {
                CsvWriterHelper.WriteCsvRecords(missingContentTypes, Path.Combine(dirInfo.FullName, "missingContentTypes.csv"));
            }
            watch.Stop();
            logger.Log(LogLevel.Info, $"Missing site content types Elapsed Time: {watch.Elapsed.Seconds}");

            watch.Restart();
            logger.Log(LogLevel.Info, $"Checking for missing site columns");
            var missingSiteColumns = spWebValidationService.MissingSiteColumns();

            if (missingSiteColumns.Count > 0)
            {
                CsvWriterHelper.WriteCsvRecords(missingSiteColumns, Path.Combine(dirInfo.FullName, "missingSiteColumns.csv"));
            }
            watch.Stop();
            logger.Log(LogLevel.Info, $"Missing site columns elapsed time: {watch.Elapsed.Seconds}");

            logger.Log(LogLevel.Info, $"Checking for missing site groups");
            var missingGroups = spWebValidationService.MissingSiteGroupsV1();

            if (missingGroups.Count > 0)
            {
                CsvWriterHelper.WriteCsvRecords(missingGroups, Path.Combine(dirInfo.FullName, "missingSiteGroups.csv"));
            }
            watch.Stop();
            logger.Log(LogLevel.Info, $"Missing Site Groups Elapsed Time: {watch.Elapsed.Seconds}");

            //TODO: custom permission levels

            /*
             * logger.Log(LogLevel.Info, $"Checking for missing users in groups");
             * var missingUsersInGroups = spWebValidationService.MissingUsersInGroups();
             * if (missingUsersInGroups.Count > 0)
             *  CsvWriterHelper.WriteCsvRecords(missingUsersInGroups, Path.Combine(dirInfo.FullName, "missingUsersInGroups.csv"));
             *
             *
             * logger.Log(LogLevel.Info, $"Checking for site user permissions");
             * var mismatchUserPerms = spWebValidationService.CheckUserPermissions();
             * if (mismatchUserPerms.Count > 0)
             *  CsvWriterHelper.WriteCsvRecords(mismatchUserPerms, Path.Combine(dirInfo.FullName, "mismatchUserPerms.csv"));
             */
        }
        private static void WebValidationOperations(ISharePointWebValidationService spWebValidationService)
        {
            logger.Log(LogLevel.Info, $"Checking for mismatches in web permissions inheritance");
            var mismatchWebPermsInheritance = spWebValidationService.CheckWebPermissionsInheritance();

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

            logger.Log(LogLevel.Info, $"Checking for missing web groups");
            var missingGroups = spWebValidationService.MissingWebGroups();

            if (missingGroups.Count > 0)
            {
                CsvWriterHelper.WriteCsvRecords(missingGroups, Path.Combine(dirInfo.FullName, "missingWebGroups.csv"));
            }
        }
        private static void SiteCollectionValidationOperations(ISharePointWebValidationService spWebValidationService)
        {
            Task <List <UserPermStatus> > t_mismatchUserPerms = Task.Factory.StartNew <List <UserPermStatus> >(() =>
            {
                logger.Log(LogLevel.Info, $"Checking for site user permissions");
                return(spWebValidationService.CheckUserPermissions());
            });

            Task <List <string> > t_missingContentTypes = Task.Factory.StartNew <List <string> >(() =>
            {
                logger.Log(LogLevel.Info, $"Checking for missing site content types");
                return(spWebValidationService.MissingContentTypes());
            });

            Task <List <SPField> > t_missingSiteColumns = Task.Factory.StartNew <List <SPField> >(() =>
            {
                logger.Log(LogLevel.Info, $"Checking for missing site columns");
                return(spWebValidationService.MissingSiteColumns());
            });

            Task.WaitAll(new Task[] { t_mismatchUserPerms, t_missingContentTypes, t_missingSiteColumns });

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

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

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