ReturnStaticValueHandler.java

package net.secodo.jcircuitbreaker.breakhandler.impl;

import java.util.concurrent.Callable;

import net.secodo.jcircuitbreaker.breaker.ContextAwareCircuitBreaker;
import net.secodo.jcircuitbreaker.breaker.execution.ExecutionContext;
import net.secodo.jcircuitbreaker.breakhandler.BreakHandler;
import net.secodo.jcircuitbreaker.breakhandler.BreakHandlerFactory;
import net.secodo.jcircuitbreaker.breakstrategy.BreakStrategy;
import net.secodo.jcircuitbreaker.task.Task;


/**
 * An implementation of {@link BreakHandler} that always returns the value given as a parameter.
 *
 * <p>This implementation can be shared between different executions of circuit breaker and therefore does not require
 * factory method implementing {@link BreakHandlerFactory} to be reusable.
 *
 * @param <R> the return type of actual method
 */
public class ReturnStaticValueHandler<R> implements BreakHandler<R> {
  private final R returnValue;

  public ReturnStaticValueHandler(R returnValue) {
    this.returnValue = returnValue;
  }

  @Override
  public R onBreak(ContextAwareCircuitBreaker<R> circuitBreaker, Task<R> task, BreakStrategy<R> breakStrategy,
                   ExecutionContext<R> executionContext) {
    return returnValue;
  }
}