package org.infinispan.jcache.remote;
import java.util.Set;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.VersionedValue;
import org.infinispan.commons.util.CloseableIterator;
/**
* Wrapper which emulates replace and remove with oldValue.
*/
class RemoteCacheWithOldValue<K, V> extends RemoteCacheWrapper<K, V> {
public RemoteCacheWithOldValue(RemoteCache<K, V> delegate) {
super(delegate);
}
@Override
public boolean remove(Object key, Object oldValue) {
@SuppressWarnings("unchecked")
K k = (K) key;
VersionedValue<V> versioned = delegate.getVersioned(k);
if (versioned == null) {
return false;
}
if (!oldValue.equals(versioned.getValue())) {
return false;
}
return delegate.removeWithVersion(k, versioned.getVersion());
}
@Override
public boolean replace(K key, V oldValue, V newValue) {
VersionedValue<V> versioned = delegate.getVersioned(key);
if (versioned == null) {
return false;
}
if (!oldValue.equals(versioned.getValue())) {
return false;
}
return delegate.replaceWithVersion(key, newValue, versioned.getVersion());
}
@Override
public CloseableIterator<Entry<Object, Object>> retrieveEntries(String filterConverterFactory, Set<Integer> segments, int batchSize) {
return delegate.retrieveEntries(filterConverterFactory, segments, batchSize);
}
}