Package org.onosproject.store.primitives
Class DefaultConsistentMap<K,V>
- java.lang.Object
-
- org.onosproject.store.service.Synchronous<AsyncConsistentMap<K,V>>
-
- org.onosproject.store.primitives.DefaultConsistentMap<K,V>
-
- Type Parameters:
K- type of key.V- type of value.
- All Implemented Interfaces:
java.lang.Iterable<java.util.Map.Entry<K,Versioned<V>>>,ConsistentMap<K,V>,DistributedPrimitive
public class DefaultConsistentMap<K,V> extends Synchronous<AsyncConsistentMap<K,V>> implements ConsistentMap<K,V>
Default implementation ofConsistentMap.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.onosproject.store.service.DistributedPrimitive
DistributedPrimitive.Status, DistributedPrimitive.Type
-
-
Field Summary
-
Fields inherited from interface org.onosproject.store.service.DistributedPrimitive
DEFAULT_OPERATION_TIMEOUT_MILLIS
-
-
Constructor Summary
Constructors Constructor Description DefaultConsistentMap(AsyncConsistentMap<K,V> asyncMap, long operationTimeoutMillis)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddListener(MapEventListener<K,V> listener, java.util.concurrent.Executor executor)Registers the specified listener to be notified whenever the map is updated.voidaddStatusChangeListener(java.util.function.Consumer<DistributedPrimitive.Status> listener)Registers a listener to be called when the primitive's status changes.java.util.Map<K,V>asJavaMap()Returns a java.util.Map instance backed by this ConsistentMap.voidclear()Removes all of the mappings from this map (optional operation).Versioned<V>compute(K key, java.util.function.BiFunction<? super K,? super V,? extends V> remappingFunction)Attempts to compute a mapping for the specified key and its current mapped value (or null if there is no current mapping).Versioned<V>computeIf(K key, java.util.function.Predicate<? super V> condition, java.util.function.BiFunction<? super K,? super V,? extends V> remappingFunction)If the value for the specified key satisfies a condition, attempts to compute a new mapping given the key and its current mapped value.Versioned<V>computeIfAbsent(K key, java.util.function.Function<? super K,? extends V> mappingFunction)If the specified key is not already associated with a value (or is mapped to null), attempts to compute its value using the given mapping function and enters it into this map unless null.Versioned<V>computeIfPresent(K key, java.util.function.BiFunction<? super K,? super V,? extends V> remappingFunction)If the value for the specified key is present and non-null, attempts to compute a new mapping given the key and its current mapped value.booleancontainsKey(K key)Returns true if this map contains a mapping for the specified key.booleancontainsValue(V value)Returns true if this map contains the specified value.java.util.Set<java.util.Map.Entry<K,Versioned<V>>>entrySet()Returns the set of entries contained in this map.Versioned<V>get(K key)Returns the value (and version) to which the specified key is mapped, or null if this map contains no mapping for the key.Versioned<V>getOrDefault(K key, V defaultValue)Returns the value (and version) to which the specified key is mapped, or the provided default value if this map contains no mapping for the key.booleanisEmpty()Returns true if the map is empty.java.util.Iterator<java.util.Map.Entry<K,Versioned<V>>>iterator()java.util.Set<K>keySet()Returns a Set view of the keys contained in this map.Versioned<V>put(K key, V value)Associates the specified value with the specified key in this map (optional operation).Versioned<V>putAndGet(K key, V value)Associates the specified value with the specified key in this map (optional operation).Versioned<V>putIfAbsent(K key, V value)If the specified key is not already associated with a value associates it with the given value and returns null, else returns the current value.Versioned<V>remove(K key)Removes the mapping for a key from this map if it is present (optional operation).booleanremove(K key, long version)Removes the entry for the specified key only if its current version in the map is equal to the specified version.booleanremove(K key, V value)Removes the entry for the specified key only if it is currently mapped to the specified value.voidremoveListener(MapEventListener<K,V> listener)Unregisters the specified listener such that it will no longer receive map change notifications.voidremoveStatusChangeListener(java.util.function.Consumer<DistributedPrimitive.Status> listener)Unregisters a previously registered listener to be called when the primitive's status changes.booleanreplace(K key, long oldVersion, V newValue)Replaces the entry for the specified key only if it is currently mapped to the specified version.Versioned<V>replace(K key, V value)Replaces the entry for the specified key only if there is any value which associated with specified key.booleanreplace(K key, V oldValue, V newValue)Replaces the entry for the specified key only if currently mapped to the specified value.intsize()Returns the number of entries in the map.java.util.Collection<java.util.function.Consumer<DistributedPrimitive.Status>>statusChangeListeners()Returns the collection of status change listeners previously registered.java.lang.StringtoString()java.util.Collection<Versioned<V>>values()Returns the collection of values (and associated versions) contained in this map.-
Methods inherited from class org.onosproject.store.service.Synchronous
destroy, name, primitiveType
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.onosproject.store.service.ConsistentMap
addListener, stream
-
Methods inherited from interface org.onosproject.store.service.DistributedPrimitive
applicationId, destroy, name, primitiveType
-
-
-
-
Constructor Detail
-
DefaultConsistentMap
public DefaultConsistentMap(AsyncConsistentMap<K,V> asyncMap, long operationTimeoutMillis)
-
-
Method Detail
-
size
public int size()
Description copied from interface:ConsistentMapReturns the number of entries in the map.- Specified by:
sizein interfaceConsistentMap<K,V>- Returns:
- map size.
-
isEmpty
public boolean isEmpty()
Description copied from interface:ConsistentMapReturns true if the map is empty.- Specified by:
isEmptyin interfaceConsistentMap<K,V>- Returns:
- true if map has no entries, false otherwise
-
containsKey
public boolean containsKey(K key)
Description copied from interface:ConsistentMapReturns true if this map contains a mapping for the specified key.- Specified by:
containsKeyin interfaceConsistentMap<K,V>- Parameters:
key- key- Returns:
- true if map contains key, false otherwise
-
containsValue
public boolean containsValue(V value)
Description copied from interface:ConsistentMapReturns true if this map contains the specified value.- Specified by:
containsValuein interfaceConsistentMap<K,V>- Parameters:
value- value- Returns:
- true if map contains value, false otherwise.
-
get
public Versioned<V> get(K key)
Description copied from interface:ConsistentMapReturns the value (and version) to which the specified key is mapped, or null if this map contains no mapping for the key.- Specified by:
getin interfaceConsistentMap<K,V>- Parameters:
key- the key whose associated value (and version) is to be returned- Returns:
- the value (and version) to which the specified key is mapped, or null if this map contains no mapping for the key
-
getOrDefault
public Versioned<V> getOrDefault(K key, V defaultValue)
Description copied from interface:ConsistentMapReturns the value (and version) to which the specified key is mapped, or the provided default value if this map contains no mapping for the key.Note: a non-null
Versionedvalue will be returned even if thedefaultValueisnull.- Specified by:
getOrDefaultin interfaceConsistentMap<K,V>- Parameters:
key- the key whose associated value (and version) is to be returneddefaultValue- the default value to return if the key is not set- Returns:
- the value (and version) to which the specified key is mapped, or null if this map contains no mapping for the key
-
computeIfAbsent
public Versioned<V> computeIfAbsent(K key, java.util.function.Function<? super K,? extends V> mappingFunction)
Description copied from interface:ConsistentMapIf the specified key is not already associated with a value (or is mapped to null), attempts to compute its value using the given mapping function and enters it into this map unless null.- Specified by:
computeIfAbsentin interfaceConsistentMap<K,V>- Parameters:
key- key with which the specified value is to be associatedmappingFunction- the function to compute a value- Returns:
- the current (existing or computed) value associated with the specified key,
or null if the computed value is null. Method throws
ConsistentMapException.ConcurrentModificationif a concurrent modification of map is detected
-
computeIfPresent
public Versioned<V> computeIfPresent(K key, java.util.function.BiFunction<? super K,? super V,? extends V> remappingFunction)
Description copied from interface:ConsistentMapIf the value for the specified key is present and non-null, attempts to compute a new mapping given the key and its current mapped value. If the computed value is null, the current mapping will be removed from the map.- Specified by:
computeIfPresentin interfaceConsistentMap<K,V>- Parameters:
key- key with which the specified value is to be associatedremappingFunction- the function to compute a value- Returns:
- the new value associated with the specified key, or null if none.
This method throws
ConsistentMapException.ConcurrentModificationif a concurrent modification of map is detected
-
compute
public Versioned<V> compute(K key, java.util.function.BiFunction<? super K,? super V,? extends V> remappingFunction)
Description copied from interface:ConsistentMapAttempts to compute a mapping for the specified key and its current mapped value (or null if there is no current mapping). If the computed value is null, the current mapping will be removed from the map.- Specified by:
computein interfaceConsistentMap<K,V>- Parameters:
key- key with which the specified value is to be associatedremappingFunction- the function to compute a value- Returns:
- the new value associated with the specified key, or null if none.
This method throws
ConsistentMapException.ConcurrentModificationif a concurrent modification of map is detected
-
computeIf
public Versioned<V> computeIf(K key, java.util.function.Predicate<? super V> condition, java.util.function.BiFunction<? super K,? super V,? extends V> remappingFunction)
Description copied from interface:ConsistentMapIf the value for the specified key satisfies a condition, attempts to compute a new mapping given the key and its current mapped value. If the computed value is null, the current mapping will be removed from the map.- Specified by:
computeIfin interfaceConsistentMap<K,V>- Parameters:
key- key with which the specified value is to be associatedcondition- condition that should evaluate to true for the computation to proceedremappingFunction- the function to compute a value- Returns:
- the new value associated with the specified key, or the old value if condition evaluates to false.
This method throws
ConsistentMapException.ConcurrentModificationif a concurrent modification of map is detected
-
put
public Versioned<V> put(K key, V value)
Description copied from interface:ConsistentMapAssociates the specified value with the specified key in this map (optional operation). If the map previously contained a mapping for the key, the old value is replaced by the specified value.- Specified by:
putin interfaceConsistentMap<K,V>- Parameters:
key- key with which the specified value is to be associatedvalue- value to be associated with the specified key- Returns:
- the previous value (and version) associated with key, or null if there was no mapping for key.
-
putAndGet
public Versioned<V> putAndGet(K key, V value)
Description copied from interface:ConsistentMapAssociates the specified value with the specified key in this map (optional operation). If the map previously contained a mapping for the key, the old value is replaced by the specified value.- Specified by:
putAndGetin interfaceConsistentMap<K,V>- Parameters:
key- key with which the specified value is to be associatedvalue- value to be associated with the specified key- Returns:
- new value.
-
remove
public Versioned<V> remove(K key)
Description copied from interface:ConsistentMapRemoves the mapping for a key from this map if it is present (optional operation).- Specified by:
removein interfaceConsistentMap<K,V>- Parameters:
key- key whose value is to be removed from the map- Returns:
- the value (and version) to which this map previously associated the key, or null if the map contained no mapping for the key.
-
clear
public void clear()
Description copied from interface:ConsistentMapRemoves all of the mappings from this map (optional operation). The map will be empty after this call returns.- Specified by:
clearin interfaceConsistentMap<K,V>
-
keySet
public java.util.Set<K> keySet()
Description copied from interface:ConsistentMapReturns a Set view of the keys contained in this map. This method differs from the behavior of java.util.Map.keySet() in that what is returned is a unmodifiable snapshot view of the keys in the ConsistentMap. Attempts to modify the returned set, whether direct or via its iterator, result in an UnsupportedOperationException.- Specified by:
keySetin interfaceConsistentMap<K,V>- Returns:
- a set of the keys contained in this map
-
values
public java.util.Collection<Versioned<V>> values()
Description copied from interface:ConsistentMapReturns the collection of values (and associated versions) contained in this map. This method differs from the behavior of java.util.Map.values() in that what is returned is a unmodifiable snapshot view of the values in the ConsistentMap. Attempts to modify the returned collection, whether direct or via its iterator, result in an UnsupportedOperationException.- Specified by:
valuesin interfaceConsistentMap<K,V>- Returns:
- a collection of the values (and associated versions) contained in this map
-
entrySet
public java.util.Set<java.util.Map.Entry<K,Versioned<V>>> entrySet()
Description copied from interface:ConsistentMapReturns the set of entries contained in this map. This method differs from the behavior of java.util.Map.entrySet() in that what is returned is a unmodifiable snapshot view of the entries in the ConsistentMap. Attempts to modify the returned set, whether direct or via its iterator, result in an UnsupportedOperationException.- Specified by:
entrySetin interfaceConsistentMap<K,V>- Returns:
- set of entries contained in this map.
-
putIfAbsent
public Versioned<V> putIfAbsent(K key, V value)
Description copied from interface:ConsistentMapIf the specified key is not already associated with a value associates it with the given value and returns null, else returns the current value.- Specified by:
putIfAbsentin interfaceConsistentMap<K,V>- Parameters:
key- key with which the specified value is to be associatedvalue- value to be associated with the specified key- Returns:
- the previous value associated with the specified key or null if key does not already mapped to a value.
-
remove
public boolean remove(K key, V value)
Description copied from interface:ConsistentMapRemoves the entry for the specified key only if it is currently mapped to the specified value.- Specified by:
removein interfaceConsistentMap<K,V>- Parameters:
key- key with which the specified value is associatedvalue- value expected to be associated with the specified key- Returns:
- true if the value was removed
-
remove
public boolean remove(K key, long version)
Description copied from interface:ConsistentMapRemoves the entry for the specified key only if its current version in the map is equal to the specified version.- Specified by:
removein interfaceConsistentMap<K,V>- Parameters:
key- key with which the specified version is associatedversion- version expected to be associated with the specified key- Returns:
- true if the value was removed
-
replace
public Versioned<V> replace(K key, V value)
Description copied from interface:ConsistentMapReplaces the entry for the specified key only if there is any value which associated with specified key.- Specified by:
replacein interfaceConsistentMap<K,V>- Parameters:
key- key with which the specified value is associatedvalue- value expected to be associated with the specified key- Returns:
- the previous value associated with the specified key or null
-
replace
public boolean replace(K key, V oldValue, V newValue)
Description copied from interface:ConsistentMapReplaces the entry for the specified key only if currently mapped to the specified value.- Specified by:
replacein interfaceConsistentMap<K,V>- Parameters:
key- key with which the specified value is associatedoldValue- value expected to be associated with the specified keynewValue- value to be associated with the specified key- Returns:
- true if the value was replaced
-
replace
public boolean replace(K key, long oldVersion, V newValue)
Description copied from interface:ConsistentMapReplaces the entry for the specified key only if it is currently mapped to the specified version.- Specified by:
replacein interfaceConsistentMap<K,V>- Parameters:
key- key key with which the specified value is associatedoldVersion- version expected to be associated with the specified keynewValue- value to be associated with the specified key- Returns:
- true if the value was replaced
-
iterator
public java.util.Iterator<java.util.Map.Entry<K,Versioned<V>>> iterator()
- Specified by:
iteratorin interfacejava.lang.Iterable<K>
-
addListener
public void addListener(MapEventListener<K,V> listener, java.util.concurrent.Executor executor)
Description copied from interface:ConsistentMapRegisters the specified listener to be notified whenever the map is updated.- Specified by:
addListenerin interfaceConsistentMap<K,V>- Parameters:
listener- listener to notify about map eventsexecutor- executor to use for handling incoming map events
-
removeListener
public void removeListener(MapEventListener<K,V> listener)
Description copied from interface:ConsistentMapUnregisters the specified listener such that it will no longer receive map change notifications.- Specified by:
removeListenerin interfaceConsistentMap<K,V>- Parameters:
listener- listener to unregister
-
addStatusChangeListener
public void addStatusChangeListener(java.util.function.Consumer<DistributedPrimitive.Status> listener)
Description copied from interface:DistributedPrimitiveRegisters a listener to be called when the primitive's status changes.- Specified by:
addStatusChangeListenerin interfaceDistributedPrimitive- Parameters:
listener- The listener to be called when the status changes.
-
removeStatusChangeListener
public void removeStatusChangeListener(java.util.function.Consumer<DistributedPrimitive.Status> listener)
Description copied from interface:DistributedPrimitiveUnregisters a previously registered listener to be called when the primitive's status changes.- Specified by:
removeStatusChangeListenerin interfaceDistributedPrimitive- Parameters:
listener- The listener to unregister
-
statusChangeListeners
public java.util.Collection<java.util.function.Consumer<DistributedPrimitive.Status>> statusChangeListeners()
Description copied from interface:DistributedPrimitiveReturns the collection of status change listeners previously registered.- Specified by:
statusChangeListenersin interfaceDistributedPrimitive- Returns:
- collection of status change listeners
-
asJavaMap
public java.util.Map<K,V> asJavaMap()
Description copied from interface:ConsistentMapReturns a java.util.Map instance backed by this ConsistentMap.- Specified by:
asJavaMapin interfaceConsistentMap<K,V>- Returns:
- java.util.Map
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-