View Javadoc

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   * @since v1.5
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  }