62 lines
2.4 KiB
Kotlin
62 lines
2.4 KiB
Kotlin
package com.insanusmokrassar.krontab
|
|
|
|
import com.insanusmokrassar.krontab.internal.*
|
|
|
|
/**
|
|
* Parse [incoming] string and adapt according to next format: "* * * * *" where order of things:
|
|
*
|
|
* seconds
|
|
* minutes
|
|
* hours
|
|
* dayOfMonth
|
|
* month
|
|
*
|
|
* And each one have next format:
|
|
*
|
|
* {number},{number},...
|
|
*
|
|
* and {number} here is one of {int}-{int} OR {int}/{int} OR *\/{int} OR {int}.
|
|
*
|
|
* Seconds ranges can be found in [com.insanusmokrassar.krontab.internal.secondsRange].
|
|
* Minutes ranges can be found in [com.insanusmokrassar.krontab.internal.minutesRange].
|
|
* Hours ranges can be found in [com.insanusmokrassar.krontab.internal.hoursRange].
|
|
* Days of month ranges can be found in [com.insanusmokrassar.krontab.internal.dayOfMonthRange].
|
|
* Months ranges can be found in [com.insanusmokrassar.krontab.internal.monthRange].
|
|
*
|
|
* @sample "0/5 * * * *" for every five seconds triggering
|
|
* @sample "0/15 30 * * *" for every 15th seconds in a half of each hour
|
|
* @sample "1 2 3 4 5" for triggering in near first second of second minute of third hour of fourth day of may
|
|
*/
|
|
fun createSimpleScheduler(incoming: String): KronScheduler {
|
|
val (secondsSource, minutesSource, hoursSource, dayOfMonthSource, monthSource) = incoming.split(" ")
|
|
|
|
val secondsParsed = parseSeconds(secondsSource)
|
|
val minutesParsed = parseMinutes(minutesSource)
|
|
val hoursParsed = parseHours(hoursSource)
|
|
val dayOfMonthParsed = parseDaysOfMonth(dayOfMonthSource)
|
|
val monthParsed = parseMonths(monthSource)
|
|
|
|
val resultCronDateTimes = mutableListOf(CronDateTime())
|
|
|
|
secondsParsed ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte ->
|
|
previousCronDateTime.copy(seconds = currentTime)
|
|
}
|
|
|
|
minutesParsed ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte ->
|
|
previousCronDateTime.copy(minutes = currentTime)
|
|
}
|
|
|
|
hoursParsed ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte ->
|
|
previousCronDateTime.copy(hours = currentTime)
|
|
}
|
|
|
|
dayOfMonthParsed ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte ->
|
|
previousCronDateTime.copy(dayOfMonth = currentTime)
|
|
}
|
|
|
|
monthParsed ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte ->
|
|
previousCronDateTime.copy(month = currentTime)
|
|
}
|
|
|
|
return CronDateTimeScheduler(resultCronDateTimes.toList())
|
|
} |