package org.netbeans.gradle.project.properties; import java.util.concurrent.atomic.AtomicInteger; import org.jtrim.concurrent.TaskExecutor; import org.jtrim.event.ListenerRef; import org.jtrim.property.MutableProperty; import org.netbeans.gradle.project.event.ChangeListenerManager; import org.netbeans.gradle.project.event.GenericChangeListenerManager; public final class AtomicIntProperty implements MutableProperty<Integer> { private final AtomicInteger value; private final ChangeListenerManager listeners; public AtomicIntProperty(TaskExecutor eventExecutor) { this.value = new AtomicInteger(0); this.listeners = new GenericChangeListenerManager(eventExecutor); } private void fireChangeEvent() { listeners.fireEventually(); } public int getAndIncrement() { int result = value.getAndIncrement(); fireChangeEvent(); return result; } public int getAndDecrement() { int result = value.getAndDecrement(); fireChangeEvent(); return result; } public int getIntValue() { return value.get(); } public void setIntValue(int value) { this.value.set(value); fireChangeEvent(); } @Override public void setValue(Integer value) { setIntValue(value); } @Override public Integer getValue() { return getIntValue(); } @Override public ListenerRef addChangeListener(Runnable listener) { return listeners.registerListener(listener); } }