package org.limewire.jmx;
import java.util.concurrent.atomic.AtomicInteger;
import javax.management.MXBean;
/**
* A JMX Bean for {@link AtomicInteger}s
*/
@MXBean
public interface AtomicIntegerBean {
/**
* Returns the current value
*/
public int getValue();
/**
* Sets the current value
*/
public void setValue(int value);
/**
* Returns true if this {@link AtomicInteger} is a read-only value
*/
public boolean isReadOnly();
/**
* The default implementation of {@link AtomicIntegerBean}
*/
public static class Impl implements AtomicIntegerBean {
private final AtomicInteger atomic;
private final boolean readOnly;
/**
* Creates an {@link AtomicIntegerBean}
*/
public Impl(AtomicInteger atomic) {
this(atomic, false);
}
/**
* Creates an {@link AtomicIntegerBean}
*/
public Impl(AtomicInteger atomic, boolean readOnly) {
this.atomic = atomic;
this.readOnly = readOnly;
}
@Override
public int getValue() {
return atomic.get();
}
@Override
public boolean isReadOnly() {
return readOnly;
}
@Override
public void setValue(int value) {
if (readOnly) {
throw new IllegalStateException();
}
atomic.set(value);
}
}
}