AbstractCircuitBreaker.java 2.03 KB
package org.apache.commons.lang3.concurrent;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.concurrent.atomic.AtomicReference;

public abstract class AbstractCircuitBreaker<T>
  implements CircuitBreaker<T>
{
  public static final String PROPERTY_NAME = "open";
  private final PropertyChangeSupport a = new PropertyChangeSupport(this);
  protected final AtomicReference<State> state = new AtomicReference(State.CLOSED);
  
  protected static boolean isOpen(State paramState)
  {
    return paramState == State.OPEN;
  }
  
  public void addChangeListener(PropertyChangeListener paramPropertyChangeListener)
  {
    this.a.addPropertyChangeListener(paramPropertyChangeListener);
  }
  
  protected void changeState(State paramState)
  {
    PropertyChangeSupport localPropertyChangeSupport;
    if (this.state.compareAndSet(paramState.oppositeState(), paramState))
    {
      localPropertyChangeSupport = this.a;
      if (isOpen(paramState)) {
        break label41;
      }
    }
    label41:
    for (boolean bool = true;; bool = false)
    {
      localPropertyChangeSupport.firePropertyChange("open", bool, isOpen(paramState));
      return;
    }
  }
  
  public abstract boolean checkState();
  
  public void close()
  {
    changeState(State.CLOSED);
  }
  
  public abstract boolean incrementAndCheckState(T paramT);
  
  public boolean isClosed()
  {
    return !isOpen();
  }
  
  public boolean isOpen()
  {
    return isOpen((State)this.state.get());
  }
  
  public void open()
  {
    changeState(State.OPEN);
  }
  
  public void removeChangeListener(PropertyChangeListener paramPropertyChangeListener)
  {
    this.a.removePropertyChangeListener(paramPropertyChangeListener);
  }
  
  public static abstract enum State
  {
    private State() {}
    
    public abstract State oppositeState();
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/org/apache/commons/lang3/concurrent/AbstractCircuitBreaker.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */