Example #1
0
 public static CrontabSchedule Parse(string expression, CronStringFormat format = CronStringFormat.Default)
 {
     return(new CrontabSchedule
     {
         Format = format,
         Filters = _ParseToDictionary(expression, format)
     });
 }
Example #2
0
 public static CrontabSchedule TryParse(string expression, CronStringFormat format = CronStringFormat.Default)
 {
     try
     {
         return(Parse(expression, format));
     }
     catch (Exception)
     {
         return(null);
     }
 }
        static void CronFinite(string cronExpression, string startTimeString, string endTimeString, CronStringFormat format)
        {
            var schedule = CrontabSchedule.Parse(cronExpression, format);
            var occurrence = schedule.GetNextOccurrence(Time(startTimeString), Time(endTimeString));

            Assert.AreEqual(endTimeString, TimeString(occurrence),
                "Occurrence of <{0}> after <{1}> did not terminate with <{2}>.",
                cronExpression, startTimeString, endTimeString);
        }
        static void CronCall(string startTimeString, string cronExpression, string nextTimeString, CronStringFormat format)
        {
            var schedule = CrontabSchedule.Parse(cronExpression, format);
            var next = schedule.GetNextOccurrence(Time(startTimeString));

            var message = string.Format("Occurrence of <{0}> after <{1}>, format <{2}>.", cronExpression, startTimeString, Enum.GetName(typeof(CronStringFormat), format));
            Assert.AreEqual(nextTimeString, TimeString(next), message);
        }
 static void BadField(string expression, CronStringFormat format)
 {
     Assert2.Throws<CrontabException>(() => CrontabSchedule.Parse(expression, format));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="RecurringDateRangeJobScheduler"/>
 /// class with default background job factory.
 /// </summary>
 public RecurringDateRangeJobScheduler(CronStringFormat cronStringFormat = CronStringFormat.Default, bool ignoreTimeComponentInStartEndDates = false)
     : this(new BackgroundJobFactory())
 {
     _cronStringFormat = cronStringFormat;
     _ignoreTimeComponentInStartEndDates = ignoreTimeComponentInStartEndDates;
 }
Example #7
0
        private static Dictionary <CrontabFieldKind, List <ICronFilter> > _ParseToDictionary(string cron, CronStringFormat format)
        {
            if (string.IsNullOrWhiteSpace(cron))
            {
                throw new CrontabException("The provided cron string is null, empty or contains only whitespace");
            }

            var fields        = new Dictionary <CrontabFieldKind, List <ICronFilter> >();
            var instructions  = cron.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            var expectedCount = Constants.ExpectedFieldCounts[format];

            if (instructions.Length > expectedCount)
            {
                throw new CrontabException(string.Format("The provided cron string <{0}> has too many parameters", cron));
            }
            if (instructions.Length < expectedCount)
            {
                throw new CrontabException(string.Format("The provided cron string <{0}> has too few parameters", cron));
            }

            var defaultFieldOffset = 0;

            if (format == CronStringFormat.WithSeconds || format == CronStringFormat.WithSecondsAndYears)
            {
                fields.Add(CrontabFieldKind.Second, _ParseField(instructions[0], CrontabFieldKind.Second));
                defaultFieldOffset = 1;
            }

            fields.Add(CrontabFieldKind.Minute, _ParseField(instructions[defaultFieldOffset + 0], CrontabFieldKind.Minute));
            fields.Add(CrontabFieldKind.Hour, _ParseField(instructions[defaultFieldOffset + 1], CrontabFieldKind.Hour));
            fields.Add(CrontabFieldKind.Day, _ParseField(instructions[defaultFieldOffset + 2], CrontabFieldKind.Day));
            fields.Add(CrontabFieldKind.Month, _ParseField(instructions[defaultFieldOffset + 3], CrontabFieldKind.Month));
            fields.Add(CrontabFieldKind.DayOfWeek, _ParseField(instructions[defaultFieldOffset + 4], CrontabFieldKind.DayOfWeek));

            if (format == CronStringFormat.WithYears || format == CronStringFormat.WithSecondsAndYears)
            {
                fields.Add(CrontabFieldKind.Year, _ParseField(instructions[defaultFieldOffset + 5], CrontabFieldKind.Year));
            }

            CheckForIllegalFilters(fields);

            return(fields);
        }
 // In the event a developer creates their own instance
 public CrontabSchedule()
 {
     Filters = new Dictionary <CrontabFieldKind, List <ICronFilter> >();
     Format  = CronStringFormat.Default;
 }
        private static Dictionary<CrontabFieldKind, List<ICronFilter>> ParseToDictionary(string cron, CronStringFormat format)
        {
            if (cron.IsNullOrWhiteSpace())
                throw new CrontabException("The provided cron string is null, empty or contains only whitespace");

            var fields = new Dictionary<CrontabFieldKind, List<ICronFilter>>();

            var instructions = cron.Split(new [] {' '}, StringSplitOptions.RemoveEmptyEntries);

            var expectedCount = Constants.ExpectedFieldCounts[format];
            if (instructions.Length > expectedCount)
                throw new CrontabException(string.Format("The provided cron string <{0}> has too many parameters", cron));
            if (instructions.Length < expectedCount)
                throw new CrontabException(string.Format("The provided cron string <{0}> has too few parameters", cron));

            var defaultFieldOffset = 0;
            if (format == CronStringFormat.WithSeconds || format == CronStringFormat.WithSecondsAndYears)
            {
                fields.Add(CrontabFieldKind.Second, ParseField(instructions[0], CrontabFieldKind.Second));
                defaultFieldOffset = 1;
            }

            fields.Add(CrontabFieldKind.Minute, ParseField(instructions[defaultFieldOffset + 0], CrontabFieldKind.Minute));
            fields.Add(CrontabFieldKind.Hour, ParseField(instructions[defaultFieldOffset + 1], CrontabFieldKind.Hour));
            fields.Add(CrontabFieldKind.Day, ParseField(instructions[defaultFieldOffset + 2], CrontabFieldKind.Day));
            fields.Add(CrontabFieldKind.Month, ParseField(instructions[defaultFieldOffset + 3], CrontabFieldKind.Month));
            fields.Add(CrontabFieldKind.DayOfWeek, ParseField(instructions[defaultFieldOffset + 4], CrontabFieldKind.DayOfWeek));

            if (format == CronStringFormat.WithYears || format == CronStringFormat.WithSecondsAndYears)
                fields.Add(CrontabFieldKind.Year, ParseField(instructions[defaultFieldOffset + 5], CrontabFieldKind.Year));

            CheckForIllegalFilters(fields);

            return fields;
        }
 public static CrontabSchedule TryParse(string expression, CronStringFormat format = CronStringFormat.Default)
 {
     try
     {
         return Parse(expression, format);
     }
     catch (Exception)
     {
         return null;
     }
 }
 public static CrontabSchedule Parse(string expression, CronStringFormat format = CronStringFormat.Default)
 {
     return new CrontabSchedule
     {
         Format = format,
         Filters = ParseToDictionary(expression, format)
     };
 }
 // In the event a developer creates their own instance
 public CrontabSchedule()
 {
     Filters = new Dictionary<CrontabFieldKind, List<ICronFilter>>();
     Format = CronStringFormat.Default;
 }
Example #13
0
 public CronAttribute(string expression, int defer = 0, CronStringFormat format = CronStringFormat.Default)
 {
     Expression = expression ?? throw new ArgumentNullException(nameof(expression));
     Defer      = defer;
     Format     = format;
 }