/*
* Copyright Terracotta, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.ehcache.impl.internal.store.basic;
import org.ehcache.Cache;
import org.ehcache.core.CacheConfigurationChangeListener;
import org.ehcache.core.spi.function.BiFunction;
import org.ehcache.core.spi.function.Function;
import org.ehcache.core.spi.function.NullaryFunction;
import org.ehcache.core.spi.store.StoreAccessException;
import org.ehcache.core.spi.store.events.StoreEventFilter;
import org.ehcache.core.spi.store.events.StoreEventListener;
import org.ehcache.core.spi.store.events.StoreEventSource;
import org.ehcache.core.spi.store.tiering.AuthoritativeTier;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* A store that doesn't store anything.
*
* @author Henri Tremblay
*/
public class NopStore<K, V> implements AuthoritativeTier<K, V> {
@Override
public List<CacheConfigurationChangeListener> getConfigurationChangeListeners() {
return Collections.emptyList();
}
@Override
public ValueHolder<V> getAndFault(K key) throws StoreAccessException {
return null;
}
@Override
public ValueHolder<V> computeIfAbsentAndFault(K key, Function<? super K, ? extends V> mappingFunction) throws StoreAccessException {
return null;
}
@Override
public boolean flush(K key, ValueHolder<V> valueHolder) {
return false;
}
@Override
public void setInvalidationValve(InvalidationValve valve) {
}
@Override
public ValueHolder<V> get(K key) throws StoreAccessException {
return null;
}
@Override
public boolean containsKey(K key) throws StoreAccessException {
return false;
}
@Override
public PutStatus put(K key, V value) throws StoreAccessException {
return PutStatus.PUT;
}
@Override
public ValueHolder<V> putIfAbsent(K key, V value) throws StoreAccessException {
return EmptyValueHolder.empty();
}
@Override
public boolean remove(K key) throws StoreAccessException {
return false;
}
@Override
public RemoveStatus remove(K key, V value) throws StoreAccessException {
return RemoveStatus.KEY_MISSING;
}
@Override
public ValueHolder<V> replace(K key, V value) throws StoreAccessException {
return null;
}
@Override
public ReplaceStatus replace(K key, V oldValue, V newValue) throws StoreAccessException {
return ReplaceStatus.MISS_NOT_PRESENT;
}
@Override
public void clear() throws StoreAccessException {
}
@Override
public StoreEventSource<K, V> getStoreEventSource() {
return new StoreEventSource<K, V>() {
@Override
public void addEventListener(StoreEventListener<K, V> eventListener) {
}
@Override
public void removeEventListener(StoreEventListener<K, V> eventListener) {
}
@Override
public void addEventFilter(StoreEventFilter<K, V> eventFilter) {
}
@Override
public void setEventOrdering(boolean ordering) {
}
@Override
public boolean isEventOrdering() {
return false;
}
};
}
@Override
public Iterator<Cache.Entry<K, ValueHolder<V>>> iterator() {
return new Iterator<Cache.Entry<K, ValueHolder<V>>>() {
@Override
public boolean hasNext() {
return false;
}
@Override
public Cache.Entry<K, ValueHolder<V>> next() throws StoreAccessException {
return null;
}
};
}
@Override
public ValueHolder<V> compute(K key, BiFunction<? super K, ? super V, ? extends V> mappingFunction) throws StoreAccessException {
return EmptyValueHolder.empty();
}
@Override
public ValueHolder<V> compute(K key, BiFunction<? super K, ? super V, ? extends V> mappingFunction, NullaryFunction<Boolean> replaceEqual) throws StoreAccessException {
return null;
}
@Override
public ValueHolder<V> computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) throws StoreAccessException {
return null;
}
@Override
public Map<K, ValueHolder<V>> bulkCompute(Set<? extends K> keys, Function<Iterable<? extends Map.Entry<? extends K, ? extends V>>, Iterable<? extends Map.Entry<? extends K, ? extends V>>> remappingFunction) throws StoreAccessException {
return bulkCompute(keys, remappingFunction, null);
}
@Override
public Map<K, ValueHolder<V>> bulkCompute(Set<? extends K> keys, Function<Iterable<? extends Map.Entry<? extends K, ? extends V>>, Iterable<? extends Map.Entry<? extends K, ? extends V>>> remappingFunction, NullaryFunction<Boolean> replaceEqual) throws StoreAccessException {
Map<K, ValueHolder<V>> map = new HashMap<K, ValueHolder<V>>(keys.size());
for(K key : keys) {
map.put(key, EmptyValueHolder.<V>empty());
}
return map;
}
@Override
public Map<K, ValueHolder<V>> bulkComputeIfAbsent(Set<? extends K> keys, Function<Iterable<? extends K>, Iterable<? extends Map.Entry<? extends K, ? extends V>>> mappingFunction) throws StoreAccessException {
Map<K, ValueHolder<V>> map = new HashMap<K, ValueHolder<V>>(keys.size());
for(K key : keys) {
map.put(key, EmptyValueHolder.<V>empty());
}
return map;
}
}