MCPcopy Index your code
hub / github.com/jmrozanec/cron-utils / parse

Method parse

src/main/java/com/cronutils/parser/CronParser.java:94–168  ·  view source on GitHub ↗

Parse string with cron expression. @param expression - cron expression, never null @return Cron instance, corresponding to cron expression received @throws java.lang.IllegalArgumentException if expression does not match cron definition

(final String expression)

Source from the content-addressed store, hash-verified

92 * @throws java.lang.IllegalArgumentException if expression does not match cron definition
93 */
94 public Cron parse(final String expression) {
95 Preconditions.checkNotNull(expression, "Expression must not be null");
96 final String replaced = expression.replaceAll("\\s+", " ").trim();
97 if (StringUtils.isEmpty(replaced)) {
98 throw new IllegalArgumentException("Empty expression!");
99 }
100
101 Set<CronNicknames> cronNicknames = cronDefinition.getCronNicknames();
102 if(expression.startsWith("@")){
103 if(cronNicknames.isEmpty()){
104 throw new IllegalArgumentException("Nicknames not supported!");
105 }
106 switch (expression){
107 case "@yearly":
108 return validateAndReturnSupportedCronNickname(expression, cronNicknames, CronNicknames.YEARLY, CronBuilder.yearly(cronDefinition));
109 case "@annually":
110 return validateAndReturnSupportedCronNickname(expression, cronNicknames, CronNicknames.ANNUALLY, CronBuilder.annually(cronDefinition));
111 case "@monthly":
112 return validateAndReturnSupportedCronNickname(expression, cronNicknames, CronNicknames.MONTHLY, CronBuilder.monthly(cronDefinition));
113 case "@weekly":
114 return validateAndReturnSupportedCronNickname(expression, cronNicknames, CronNicknames.WEEKLY, CronBuilder.weekly(cronDefinition));
115 case "@daily":
116 return validateAndReturnSupportedCronNickname(expression, cronNicknames, CronNicknames.DAILY, CronBuilder.daily(cronDefinition));
117 case "@midnight":
118 return validateAndReturnSupportedCronNickname(expression, cronNicknames, CronNicknames.MIDNIGHT, CronBuilder.midnight(cronDefinition));
119 case "@hourly":
120 return validateAndReturnSupportedCronNickname(expression, cronNicknames, CronNicknames.HOURLY, CronBuilder.hourly(cronDefinition));
121 case "@reboot":
122 return validateAndReturnSupportedCronNickname(expression, cronNicknames, CronNicknames.REBOOT, CronBuilder.reboot(cronDefinition));
123 }
124 }
125
126 if(expression.contains("||")) {
127 List<Cron> crons = Arrays.stream(expression.split("\\|\\|")).map(this::parse).collect(Collectors.toList());
128 return new CompositeCron(crons);
129 }
130 if(expression.contains("|")){
131 List<String> crons = new ArrayList<>();
132 int cronscount = Arrays.stream(expression.split("\\s+")).mapToInt(s->s.split("\\|").length).max().orElse(0);
133 for(int j=0; j<cronscount; j++){
134 StringBuilder builder = new StringBuilder();
135 for(String s : expression.split("\\s+")){
136 if(s.contains("|")){
137 builder.append(String.format("%s ", s.split("\\|")[j]));
138 }else{
139 builder.append(String.format("%s ", s));
140 }
141 }
142 crons.add(builder.toString().trim());
143 }
144 return new CompositeCron(crons.stream().map(this::parse).collect(Collectors.toList()));
145 }else{
146 final String[] expressionParts = replaced.toUpperCase().split(" ");
147 final int expressionLength = expressionParts.length;
148 String fieldWithTrailingCommas = Arrays.stream(expressionParts).filter(x -> x.endsWith(",")).findAny().orElse(null);
149 if(fieldWithTrailingCommas!=null){
150 throw new IllegalArgumentException(String.format("Invalid field value! Trailing commas not permitted! '%s'", fieldWithTrailingCommas));
151 }

Callers 15

everyMinute01TestMethod · 0.95
testInvalidWeekDayEndMethod · 0.95
testCase1Method · 0.95
testCase2Method · 0.95
testCase1Method · 0.95
testCase2Method · 0.95
testCase3Method · 0.95

Calls 15

checkNotNullMethod · 0.95
isEmptyMethod · 0.95
yearlyMethod · 0.95
annuallyMethod · 0.95
monthlyMethod · 0.95
weeklyMethod · 0.95
dailyMethod · 0.95
midnightMethod · 0.95
hourlyMethod · 0.95
rebootMethod · 0.95
getCronNicknamesMethod · 0.80

Tested by 15

everyMinute01TestMethod · 0.76
testInvalidWeekDayEndMethod · 0.76
testCase1Method · 0.76
testCase2Method · 0.76
testCase1Method · 0.76
testCase2Method · 0.76
testCase3Method · 0.76