public virtual void Validate(ScheduleRunType ScheduleRunFrequency = 0)
 {
     if (ScheduleRunFrequency != ScheduleRunType.Hourly) // RetentionTimes are not needed for Hourly policy
     {
         if (RetentionTimes == null || RetentionTimes.Count != 1)
         {
             throw new ArgumentException(Resources.InvalidRetentionTimesInPolicyException);
         }
     }
 }
        // no extra fields
        public override void Validate(ScheduleRunType ScheduleRunFrequency = 0)
        {
            int MinDurationCountInDays = 7, MaxDurationCountInDays = PolicyConstants.MaxAllowedRetentionDurationCount;

            if (BackupManagementType == Management.RecoveryServices.Backup.Models.BackupManagementType.AzureStorage)
            {
                MinDurationCountInDays = PolicyConstants.AfsDailyRetentionDaysMin;
                MaxDurationCountInDays = PolicyConstants.AfsDailyRetentionDaysMax;
            }
            if (DurationCountInDays < MinDurationCountInDays || DurationCountInDays > MaxDurationCountInDays)
            {
                throw new ArgumentException(Resources.RetentionDurationCountInDaysInvalidException);
            }

            base.Validate(ScheduleRunFrequency);
        }
        public override void Validate(ScheduleRunType ScheduleRunFrequency = 0)
        {
            base.Validate(ScheduleRunFrequency);

            int MinDurationCountInYears = 1, MaxDurationCountInYears = PolicyConstants.MaxAllowedRetentionDurationCountYearly;

            if (BackupManagementType == Management.RecoveryServices.Backup.Models.BackupManagementType.AzureStorage)
            {
                MinDurationCountInYears = PolicyConstants.AfsYearlyRetentionMin;
                MaxDurationCountInYears = PolicyConstants.AfsYearlyRetentionMax;
            }
            if (DurationCountInYears < MinDurationCountInYears || DurationCountInYears > MaxDurationCountInYears)
            {
                throw new ArgumentException(Resources.RetentionDurationCountInvalidException);
            }

            if (MonthsOfYear == null || MonthsOfYear.Count == 0 || MonthsOfYear.Count != MonthsOfYear.Distinct().Count())
            {
                throw new ArgumentException(Resources.YearlyScheduleMonthsOfYearException);
            }

            if (RetentionScheduleFormatType == RetentionScheduleFormat.Daily)
            {
                if (RetentionScheduleDaily == null)
                {
                    throw new ArgumentException(Resources.MonthlyYearlyRetentionDailySchedulePolicyNULLException);
                }

                RetentionScheduleDaily.Validate();
            }

            if (RetentionScheduleFormatType == RetentionScheduleFormat.Weekly)
            {
                if (RetentionScheduleWeekly == null)
                {
                    throw new ArgumentException(Resources.MonthlyYearlyRetentionWeeklySchedulePolicyNULLException);
                }

                RetentionScheduleWeekly.Validate();
            }
        }
        public override void Validate(ScheduleRunType ScheduleRunFrequency = 0)
        {
            int MinDurationCountInWeeks = 1, MaxDurationCountInWeeks = PolicyConstants.MaxAllowedRetentionDurationCountWeekly;

            if (BackupManagementType == Management.RecoveryServices.Backup.Models.BackupManagementType.AzureStorage)
            {
                MinDurationCountInWeeks = PolicyConstants.AfsWeeklyRetentionMin;
                MaxDurationCountInWeeks = PolicyConstants.AfsWeeklyRetentionMax;
            }
            if (DurationCountInWeeks < MinDurationCountInWeeks || DurationCountInWeeks > MaxDurationCountInWeeks)
            {
                throw new ArgumentException(Resources.RetentionDurationCountInvalidException);
            }

            if (DaysOfTheWeek == null || DaysOfTheWeek.Count == 0 || DaysOfTheWeek.Count != DaysOfTheWeek.Distinct().Count())
            {
                throw new ArgumentException(Resources.WeeklyRetentionScheduleDaysOfWeekException);
            }

            base.Validate(ScheduleRunFrequency);
        }
        /// <summary>
        /// Validates null values and other possible combinations
        /// </summary>
        public void Validate(ScheduleRunType ScheduleRunFrequency = 0)
        {
            base.Validate();

            if (IsDailyScheduleEnabled == false && IsWeeklyScheduleEnabled == false &&
                IsMonthlyScheduleEnabled == false && IsYearlyScheduleEnabled == false)
            {
                throw new ArgumentException(Resources.AllRetentionSchedulesEmptyException);
            }

            if (IsDailyScheduleEnabled)
            {
                if (DailySchedule == null)
                {
                    throw new ArgumentException(Resources.DailyScheduleEnabledButScheduleIsNullException);
                }
                else
                {
                    DailySchedule.BackupManagementType = BackupManagementType;
                    DailySchedule.Validate(ScheduleRunFrequency);
                }
            }

            if (IsWeeklyScheduleEnabled)
            {
                if (WeeklySchedule == null)
                {
                    throw new ArgumentException(Resources.WeeklyScheduleEnabledButScheduleIsNullException);
                }
                else
                {
                    WeeklySchedule.BackupManagementType = BackupManagementType;
                    WeeklySchedule.Validate(ScheduleRunFrequency);
                }
            }

            if (IsMonthlyScheduleEnabled)
            {
                if (MonthlySchedule == null)
                {
                    throw new ArgumentException(Resources.MonthlyScheduleEnabledButScheduleIsNullException);
                }
                else
                {
                    MonthlySchedule.BackupManagementType = BackupManagementType;
                    MonthlySchedule.Validate(ScheduleRunFrequency);
                }
            }

            if (IsYearlyScheduleEnabled)
            {
                if (YearlySchedule == null)
                {
                    throw new ArgumentException(Resources.YearlyScheduleEnabledButScheduleIsNullException);
                }
                else
                {
                    YearlySchedule.BackupManagementType = BackupManagementType;
                    YearlySchedule.Validate(ScheduleRunFrequency);
                }
            }
        }
 private static void ValidateRetentionAndBackupTimes(List <DateTime> schPolicyTimes, List <DateTime> retPolicyTimes, ScheduleRunType scheduleRunFrequency = 0)
 {
     if (scheduleRunFrequency != ScheduleRunType.Hourly)
     {
         //Currently supported BackupTimes & retentionTimes is 1
         if (retPolicyTimes == null || retPolicyTimes.Count != 1)
         {
             throw new ArgumentException(Resources.InvalidRetentionTimesInPolicyException);
         }
         if (schPolicyTimes == null || schPolicyTimes.Count != 1)
         {
             throw new ArgumentException(Resources.InvalidBackupTimesInSchedulePolicyException);
         }
         if (schPolicyTimes[0] != retPolicyTimes[0])
         {
             throw new ArgumentException(Resources.BackupAndRetentionTimesMismatch);
         }
     }
 }