View Javadoc
1   package org.davidmoten.kool;
2   
3   import java.util.concurrent.TimeUnit;
4   
5   import org.davidmoten.kool.function.Predicate;
6   import org.davidmoten.kool.internal.operators.stream.RetryWhen;
7   
8   public final class RetryWhenBuilderSingle<T> {
9   
10      private final Single<T> single;
11      private Stream<Long> delays;
12      private int maxRetries;
13      private Predicate<? super Throwable> predicate;
14  
15      public RetryWhenBuilderSingle(Single<T> single) {
16          this.single = single;
17      }
18  
19      public RetryWhenBuilderSingle<T> delay(long duration, TimeUnit unit) {
20          this.delays = Single.of(unit.toMillis(duration)).repeat();
21          return this;
22      }
23  
24      public RetryWhenBuilderSingle<T> maxRetries(int maxRetries) {
25          this.maxRetries = maxRetries;
26          return this;
27      }
28  
29      public RetryWhenBuilderSingle<T> delays(Stream<Long> delays, TimeUnit unit) {
30          this.delays = delays.map(x -> unit.toMillis(x));
31          return this;
32      }
33  
34      public RetryWhenBuilderSingle<T> isTrue(Predicate<? super Throwable> predicate) {
35          this.predicate = predicate;
36          return this;
37      }
38  
39      public Single<T> build() {
40          return RetryWhen.build(single.toStream(), delays, maxRetries, predicate).single();
41      }
42  
43  }