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