/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.module.scheduler.cron;
import static java.lang.String.format;
import static java.util.TimeZone.getDefault;
import static java.util.TimeZone.getTimeZone;
import org.mule.runtime.api.scheduler.Scheduler;
import org.mule.runtime.core.api.source.polling.PeriodicScheduler;
import java.util.TimeZone;
import java.util.concurrent.ScheduledFuture;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Scheduler for Cron scheduled jobs.
*
* @since 3.5.0, moved from {@link org.mule.runtime.modules.schedulers.cron.CronSchedulerFactory}.
*/
public class CronScheduler extends PeriodicScheduler {
private static final Logger logger = LoggerFactory.getLogger(CronScheduler.class);
private static final String TZ_GMT_ID = "GMT";
private String expression;
private String timeZone;
@Override
protected ScheduledFuture<?> doSchedule(Scheduler executor, Runnable job) {
return executor.scheduleWithCronExpression(job, expression, resolveTimeZone(timeZone));
}
protected TimeZone resolveTimeZone(String name) {
TimeZone resolvedTimeZone = timeZone == null ? getDefault() : getTimeZone(timeZone);
if (!TZ_GMT_ID.equals(timeZone) && resolvedTimeZone.equals(getTimeZone(TZ_GMT_ID))) {
logger.warn(format("Configured timezone '%s' is invalid in scheduler '%s'. Defaulting to %s", timeZone, name, TZ_GMT_ID));
}
return resolvedTimeZone;
}
public void setExpression(String expression) {
this.expression = expression;
}
public void setTimeZone(String timeZone) {
this.timeZone = timeZone;
}
}