package com.revolsys.value; import com.revolsys.io.BaseCloseable; public final class ThreadBooleanValue implements BooleanValue { private final ThreadLocal<Boolean> threadValue = new ThreadLocal<>(); private boolean defaultValue = true; private final BaseCloseable closeTrue = () -> { setValue(Boolean.TRUE); }; private final BaseCloseable closeFalse = () -> { setValue(Boolean.FALSE); }; public ThreadBooleanValue(final boolean defaultValue) { this.defaultValue = defaultValue; } @Override public BaseCloseable closeable(final Boolean value) { if (setValue(value)) { return this.closeTrue; } else { return this.closeFalse; } } @Override public Boolean getValue() { final Boolean value = this.threadValue.get(); if (value == null) { return this.defaultValue; } else { return value; } } @Override public Boolean setValue(final Boolean value) { final boolean oldValue = getValue(); final boolean booleanValue = value == Boolean.TRUE; if (booleanValue == this.defaultValue) { this.threadValue.set(null); } else { this.threadValue.set(booleanValue); } return oldValue; } @Override public String toString() { final Boolean value = getValue(); return value.toString(); } }