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:
Iterable<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 void
addListener(MapEventListener<K,V> listener, Executor executor)
Registers the specified listener to be notified whenever the map is updated.void
addStatusChangeListener(Consumer<DistributedPrimitive.Status> listener)
Registers a listener to be called when the primitive's status changes.Map<K,V>
asJavaMap()
Returns a java.util.Map instance backed by this ConsistentMap.void
clear()
Removes all of the mappings from this map (optional operation).Versioned<V>
compute(K key, 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, Predicate<? super V> condition, 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, 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, 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.boolean
containsKey(K key)
Returns true if this map contains a mapping for the specified key.boolean
containsValue(V value)
Returns true if this map contains the specified value.Set<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.boolean
isEmpty()
Returns true if the map is empty.Iterator<Map.Entry<K,Versioned<V>>>
iterator()
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).boolean
remove(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.boolean
remove(K key, V value)
Removes the entry for the specified key only if it is currently mapped to the specified value.void
removeListener(MapEventListener<K,V> listener)
Unregisters the specified listener such that it will no longer receive map change notifications.void
removeStatusChangeListener(Consumer<DistributedPrimitive.Status> listener)
Unregisters a previously registered listener to be called when the primitive's status changes.boolean
replace(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.boolean
replace(K key, V oldValue, V newValue)
Replaces the entry for the specified key only if currently mapped to the specified value.int
size()
Returns the number of entries in the map.Collection<Consumer<DistributedPrimitive.Status>>
statusChangeListeners()
Returns the collection of status change listeners previously registered.String
toString()
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
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
-
-
-
Constructor Detail
-
DefaultConsistentMap
public DefaultConsistentMap(AsyncConsistentMap<K,V> asyncMap, long operationTimeoutMillis)
-
-
Method Detail
-
size
public int size()
Description copied from interface:ConsistentMap
Returns the number of entries in the map.- Specified by:
size
in interfaceConsistentMap<K,V>
- Returns:
- map size.
-
isEmpty
public boolean isEmpty()
Description copied from interface:ConsistentMap
Returns true if the map is empty.- Specified by:
isEmpty
in interfaceConsistentMap<K,V>
- Returns:
- true if map has no entries, false otherwise
-
containsKey
public boolean containsKey(K key)
Description copied from interface:ConsistentMap
Returns true if this map contains a mapping for the specified key.- Specified by:
containsKey
in interfaceConsistentMap<K,V>
- Parameters:
key
- key- Returns:
- true if map contains key, false otherwise
-
containsValue
public boolean containsValue(V value)
Description copied from interface:ConsistentMap
Returns true if this map contains the specified value.- Specified by:
containsValue
in 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:ConsistentMap
Returns the value (and version) to which the specified key is mapped, or null if this map contains no mapping for the key.- Specified by:
get
in 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:ConsistentMap
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.Note: a non-null
Versioned
value will be returned even if thedefaultValue
isnull
.- Specified by:
getOrDefault
in 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, Function<? super K,? extends V> mappingFunction)
Description copied from interface:ConsistentMap
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.- Specified by:
computeIfAbsent
in 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.ConcurrentModification
if a concurrent modification of map is detected
-
computeIfPresent
public Versioned<V> computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
Description copied from interface:ConsistentMap
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. If the computed value is null, the current mapping will be removed from the map.- Specified by:
computeIfPresent
in 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.ConcurrentModification
if a concurrent modification of map is detected
-
compute
public Versioned<V> compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
Description copied from interface:ConsistentMap
Attempts 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:
compute
in 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.ConcurrentModification
if a concurrent modification of map is detected
-
computeIf
public Versioned<V> computeIf(K key, Predicate<? super V> condition, BiFunction<? super K,? super V,? extends V> remappingFunction)
Description copied from interface:ConsistentMap
If 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:
computeIf
in 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.ConcurrentModification
if a concurrent modification of map is detected
-
put
public Versioned<V> put(K key, V value)
Description copied from interface:ConsistentMap
Associates 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:
put
in 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:ConsistentMap
Associates 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:
putAndGet
in 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:ConsistentMap
Removes the mapping for a key from this map if it is present (optional operation).- Specified by:
remove
in 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:ConsistentMap
Removes all of the mappings from this map (optional operation). The map will be empty after this call returns.- Specified by:
clear
in interfaceConsistentMap<K,V>
-
keySet
public Set<K> keySet()
Description copied from interface:ConsistentMap
Returns 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:
keySet
in interfaceConsistentMap<K,V>
- Returns:
- a set of the keys contained in this map
-
values
public Collection<Versioned<V>> values()
Description copied from interface:ConsistentMap
Returns 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:
values
in interfaceConsistentMap<K,V>
- Returns:
- a collection of the values (and associated versions) contained in this map
-
entrySet
public Set<Map.Entry<K,Versioned<V>>> entrySet()
Description copied from interface:ConsistentMap
Returns 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:
entrySet
in interfaceConsistentMap<K,V>
- Returns:
- set of entries contained in this map.
-
putIfAbsent
public Versioned<V> putIfAbsent(K key, V value)
Description copied from interface:ConsistentMap
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.- Specified by:
putIfAbsent
in 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:ConsistentMap
Removes the entry for the specified key only if it is currently mapped to the specified value.- Specified by:
remove
in 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:ConsistentMap
Removes the entry for the specified key only if its current version in the map is equal to the specified version.- Specified by:
remove
in 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:ConsistentMap
Replaces the entry for the specified key only if there is any value which associated with specified key.- Specified by:
replace
in 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:ConsistentMap
Replaces the entry for the specified key only if currently mapped to the specified value.- Specified by:
replace
in 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:ConsistentMap
Replaces the entry for the specified key only if it is currently mapped to the specified version.- Specified by:
replace
in 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
-
addListener
public void addListener(MapEventListener<K,V> listener, Executor executor)
Description copied from interface:ConsistentMap
Registers the specified listener to be notified whenever the map is updated.- Specified by:
addListener
in 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:ConsistentMap
Unregisters the specified listener such that it will no longer receive map change notifications.- Specified by:
removeListener
in interfaceConsistentMap<K,V>
- Parameters:
listener
- listener to unregister
-
addStatusChangeListener
public void addStatusChangeListener(Consumer<DistributedPrimitive.Status> listener)
Description copied from interface:DistributedPrimitive
Registers a listener to be called when the primitive's status changes.- Specified by:
addStatusChangeListener
in interfaceDistributedPrimitive
- Parameters:
listener
- The listener to be called when the status changes.
-
removeStatusChangeListener
public void removeStatusChangeListener(Consumer<DistributedPrimitive.Status> listener)
Description copied from interface:DistributedPrimitive
Unregisters a previously registered listener to be called when the primitive's status changes.- Specified by:
removeStatusChangeListener
in interfaceDistributedPrimitive
- Parameters:
listener
- The listener to unregister
-
statusChangeListeners
public Collection<Consumer<DistributedPrimitive.Status>> statusChangeListeners()
Description copied from interface:DistributedPrimitive
Returns the collection of status change listeners previously registered.- Specified by:
statusChangeListeners
in interfaceDistributedPrimitive
- Returns:
- collection of status change listeners
-
asJavaMap
public Map<K,V> asJavaMap()
Description copied from interface:ConsistentMap
Returns a java.util.Map instance backed by this ConsistentMap.- Specified by:
asJavaMap
in interfaceConsistentMap<K,V>
- Returns:
- java.util.Map
-
-