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