1 package com.atlassian.scheduler.quartz2;
2
3 import com.atlassian.scheduler.core.tests.CronFactory;
4 import org.joda.time.DateTimeZone;
5 import org.quartz.CronExpression;
6
7 import javax.annotation.Nullable;
8 import java.text.ParseException;
9 import java.util.Date;
10
11
12
13
14 public class Quartz2CronFactory implements CronFactory {
15 @Override
16 public void parseAndDiscard(String cronExpression) {
17 parseInternal(cronExpression);
18 }
19
20 @Override
21 public CronExpressionAdapter parse(final String cronExpression) {
22 return parse(cronExpression, DateTimeZone.getDefault());
23 }
24
25 @Override
26 public CronExpressionAdapter parse(final String cronExpression, final DateTimeZone zone) {
27 final CronExpression parsed = parseInternal(cronExpression);
28 parsed.setTimeZone(zone.toTimeZone());
29
30 return new CronExpressionAdapter() {
31 @Override
32 public boolean isSatisfiedBy(Date date) {
33 return parsed.isSatisfiedBy(date);
34 }
35
36 @Nullable
37 @Override
38 public Date nextRunTime(Date prevRunTime) {
39 return parsed.getNextValidTimeAfter(prevRunTime);
40 }
41
42 @Override
43 public String toString() {
44 return cronExpression;
45 }
46 };
47 }
48
49 private static CronExpression parseInternal(final String cronExpression) {
50 try {
51 return new CronExpression(cronExpression);
52 } catch (ParseException pe) {
53 final AssertionError err = new AssertionError("Unable to parse cron expression '" + cronExpression + '\'');
54 err.initCause(pe);
55 throw err;
56 }
57 }
58 }