package com.github.shansun.sparrow.retryer;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
/**
* @author lanbo <br>
* @version 1.0 <br>
* @date 2012-8-28
*/
public class RetryerImpl implements Retryer {
private static final long DEFAULT_INTERVAL = 0;
private static final int DEFAULT_RETRY_TIMES = 3;
/**
* 重试时间间隔,单位为毫秒,默认为0
*/
private long interval = DEFAULT_INTERVAL;
/**
* 重试次数,默认为3
*/
private long times = DEFAULT_RETRY_TIMES;
/**
* 异常捕获条件
*/
private Predicate<Throwable> throwCondition = Predicates.alwaysFalse();
/**
* 返回值捕获条件
*/
private Predicate<Object> returnCondition = Predicates.alwaysFalse();
@Override
public <T> T executeWithRetry(Retryable<T> retryableTask) throws Throwable {
return new RetryableTask<T>(retryableTask, this).execute();
}
public long getInterval() {
return interval;
}
public void setInterval(long interval) {
Preconditions.checkArgument(interval >= 0);
this.interval = interval;
}
public long getTimes() {
return times;
}
public void setTimes(long times) {
Preconditions.checkArgument(times >= 0);
this.times = times;
}
public Predicate<Throwable> getThrowCondition() {
return throwCondition;
}
public void setThrowCondition(Predicate<Throwable> throwCondition) {
Preconditions.checkNotNull(throwCondition);
this.throwCondition = throwCondition;
}
public Predicate<Object> getReturnCondition() {
return returnCondition;
}
public void setReturnCondition(Predicate<Object> returnCondition) {
Preconditions.checkNotNull(returnCondition);
this.returnCondition = returnCondition;
}
}