package com.prancingdonkey.reconnect;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import org.mule.api.retry.RetryPolicy;
import org.mule.retry.PolicyStatus;
//<start id="lis_09_working-hours-aware-retry-policy"/>
public class WorkingHoursAwareRetryPolicy implements RetryPolicy
{
int companyWorkStartHour;
int companyWorkEndHour;
int intervalInWorkingHours;
int intervalInNonWorkingHours;
TimeZone timeZone;
public WorkingHoursAwareRetryPolicy(int companyWorkStartHour,
int companyWorkEndHour, TimeZone timeZone,
int intervalInWorkingHours, int intervalInNonWorkingHours)
{
this.companyWorkStartHour = companyWorkStartHour;
this.companyWorkEndHour = companyWorkEndHour;
this.intervalInWorkingHours = intervalInWorkingHours;
this.intervalInNonWorkingHours = intervalInNonWorkingHours;
this.timeZone = timeZone;
}
public PolicyStatus applyPolicy(Throwable cause)
{
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.setTimeZone(timeZone);
int hour = cal.get(Calendar.HOUR_OF_DAY);
boolean withinCompanyHours =
(hour >= companyWorkStartHour && hour < companyWorkEndHour);
try
{
Thread.sleep(withinCompanyHours ?
intervalInWorkingHours : intervalInNonWorkingHours);//<co id="lis_09_working-hours-aware-retry-policy_1"/>
} catch (InterruptedException e) {
throw new RuntimeException(e);//<co id="lis_09_working-hours-aware-retry-policy_2"/>
}
return PolicyStatus.policyOk();
}
}
//<end id="lis_09_working-hours-aware-retry-policy"/>