package com.revolsys.util;
import com.revolsys.datatype.DataType;
import com.revolsys.value.ValueHolder;
public final class ThreadValue<T> implements ValueHolder<T> {
private final ThreadLocal<T> threadValue = new ThreadLocal<>();
private T defaultValue = null;
public ThreadValue() {
}
public ThreadValue(final T defaultValue) {
this.defaultValue = defaultValue;
}
@Override
public T getValue() {
final T value = this.threadValue.get();
if (value == null) {
return this.defaultValue;
} else {
return value;
}
}
@Override
public T setValue(final T value) {
final T oldValue = getValue();
if (DataType.equal(this.defaultValue, value)) {
this.threadValue.set(null);
} else {
this.threadValue.set(value);
}
return oldValue;
}
@Override
public String toString() {
final T value = getValue();
return value.toString();
}
}