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