package de.invesdwin.util.collections.loadingcache.guava.internal;
import java.util.concurrent.ConcurrentMap;
import javax.annotation.concurrent.ThreadSafe;
import com.google.common.base.Optional;
/**
* This is a workaround to make googles ComputingMap work with null values.
*
* @see <a href="http://code.google.com/p/google-collections/issues/detail?id=166">Source</a>
*/
@ThreadSafe
public class OptionalValueWrapperConcurrentMap<K, V> extends OptionalValueWrapperMap<K, V> implements
ConcurrentMap<K, V> {
private final ConcurrentMap<K, Optional<V>> delegate;
public OptionalValueWrapperConcurrentMap(final ConcurrentMap<K, Optional<V>> delegate) {
super(delegate);
this.delegate = delegate;
}
@Override
public V putIfAbsent(final K key, final V value) {
return maybeGet(key, delegate.putIfAbsent(key, Optional.fromNullable(value)));
}
@Override
public boolean remove(final Object key, final Object value) {
return delegate.remove(key, Optional.fromNullable(value));
}
@Override
public boolean replace(final K key, final V oldValue, final V newValue) {
return delegate.replace(key, Optional.fromNullable(oldValue), Optional.fromNullable(newValue));
}
@Override
public V replace(final K key, final V value) {
return maybeGet(key, delegate.replace(key, Optional.fromNullable(value)));
}
}