View Javadoc
1   package net.secodo.jcircuitbreaker.breaker.builder.impl;
2   
3   import net.secodo.jcircuitbreaker.breaker.builder.BuilderValidationException;
4   import net.secodo.jcircuitbreaker.breaker.impl.ReusableCircuitBreaker;
5   import net.secodo.jcircuitbreaker.breakhandler.BreakHandler;
6   import net.secodo.jcircuitbreaker.breakstrategy.BreakStrategy;
7   
8   
9   /**
10   * A builder class for {@link ReusableCircuitBreaker}. Allows to create instance of {@link ReusableCircuitBreaker}
11   * using fluent interface.
12   *
13   * @param <R> see {@link net.secodo.jcircuitbreaker.breaker.CircuitBreaker}
14   */
15  public class ReusableCircuitBreakerBuilder<R> {
16    private BreakStrategy<R> breakStrategy;
17    private BreakHandler<R> breakHandler;
18  
19    public ReusableCircuitBreakerBuilder() {
20    }
21  
22    public ReusableCircuitBreakerBuilder<R> withBreakStrategy(BreakStrategy<R> breakStrategy) {
23      this.breakStrategy = breakStrategy;
24      return this;
25    }
26  
27    public ReusableCircuitBreakerBuilder<R> withBreakHandler(BreakHandler<R> breakHandler) {
28      this.breakHandler = breakHandler;
29      return this;
30    }
31  
32    /**
33     * Creates new instance of the breaker.
34     *
35     * @return newly build circuit breaker
36     * @throws BuilderValidationException in case important properties were not set for the circuit breaker that is
37     *                                    being created
38     */
39    public ReusableCircuitBreaker<R> build() throws BuilderValidationException {
40      validate();
41  
42      return new ReusableCircuitBreaker<R>(breakStrategy, breakHandler);
43    }
44  
45    private void validate() throws BuilderValidationException {
46      if (breakStrategy == null) {
47        throw new BuilderValidationException("Break strategy must be set but was null");
48      }
49  
50      if (breakHandler == null) {
51        throw new BuilderValidationException("Break handler must be set but was null");
52      }
53  
54    }
55  
56  }