Class WrapperObservableMap<K,V>
- java.lang.Object
-
- com.tangosol.util.Base
-
- com.tangosol.util.AbstractKeyBasedMap<K,V>
-
- com.tangosol.util.AbstractKeySetBasedMap<K,V>
-
- com.tangosol.util.WrapperObservableMap<K,V>
-
- All Implemented Interfaces:
ObservableMap<K,V>
,Map<K,V>
- Direct Known Subclasses:
ObservableSplittingBackingMap
,WrapperConcurrentMap
public class WrapperObservableMap<K,V> extends AbstractKeySetBasedMap<K,V> implements ObservableMap<K,V>
A simple implementation of ObservableMap interface built as a wrapper around any Map implementation. It also provides an implementation of CacheStatistics interface.Note: as of Coherence 3.0 the CacheStatistics implementation has to be turned on explicitly by calling the
setCollectStats(boolean)
method.Note: if the underlying (wrapped) Map is an ObservableMap by itself, as of Coherence 3.2 the WrapperObservableMap implementation does not translate events generated the wrapped map by default. The translation can be turned on explicitly by calling the
setTranslateEvents(boolean)
method.- Since:
- Coherence 2.3
- Author:
- gg 2003.10.01
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
WrapperObservableMap.InternalListener
An internal MapListener that listens to the wrapped map.-
Nested classes/interfaces inherited from class com.tangosol.util.AbstractKeySetBasedMap
AbstractKeySetBasedMap.EntrySet, AbstractKeySetBasedMap.KeyIterator, AbstractKeySetBasedMap.KeySet, AbstractKeySetBasedMap.ValuesCollection
-
Nested classes/interfaces inherited from class com.tangosol.util.AbstractKeyBasedMap
AbstractKeyBasedMap.DeferredCacheEvent<K,V>
-
Nested classes/interfaces inherited from class com.tangosol.util.Base
Base.LoggingWriter
-
-
Field Summary
Fields Modifier and Type Field Description protected boolean
m_fDeferredEvent
Specifies whether or not fabricated events could be deferred.protected boolean
m_fTranslateEvents
Specifies whether or not events are translated by this wrapper.protected MapListener<K,V>
m_listenerInternal
The MapListener used to listen to the wrapped ObservableMap.protected MapListenerSupport
m_listenerSupport
The event listeners.protected Map<K,V>
m_map
The (wrapped) map containing all the resources.protected SimpleCacheStatistics
m_stats
The CacheStatistics object maintained by this wrapper.
-
Constructor Summary
Constructors Constructor Description WrapperObservableMap(Map<K,V> map)
Construct an ObservableMap wrapper based on the specified map.WrapperObservableMap(Map<K,V> map, boolean fDeferredEvent)
Construct an ObservableMap wrapper based on the specified map.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addMapListener(MapListener<? super K,? super V> listener)
Add a standard map listener that will receive all events (inserts, updates, deletes) that occur against the map, with the key, old-value and new-value included.void
addMapListener(MapListener<? super K,? super V> listener, Filter filter, boolean fLite)
Add a map listener that receives events based on a filter evaluation.void
addMapListener(MapListener<? super K,? super V> listener, K oKey, boolean fLite)
Add a map listener for a specific key.void
clear()
Clear all key/value mappings.boolean
containsValue(Object oValue)
Returns true if this Map maps one or more keys to the specified value.protected void
dispatchEvent(MapEvent<? extends K,? extends V> evt)
Dispatch the passed event.protected void
dispatchPendingEvent(K oKey, int nId, V oNewValue, boolean fSynthetic)
Dispatch an event that has not yet occurred, allowing the cache to potentially avoid reading of the "original value" information.protected MapListener<K,V>
ensureInternalListener()
Obtain the internal MapListener, creating one if necessary.protected MapListenerSupport
ensureMapListenerSupport()
Obtain the MapListenerSupport, creating it if necessary.boolean
equals(Object o)
Compares the specified object with this map for equality.V
get(Object oKey)
Returns the value to which this map maps the specified key.CacheStatistics
getCacheStatistics()
Return the CacheStatistics for this cache.protected String
getDescription()
Assemble a human-readable description.protected Set<K>
getInternalKeySet()
Obtain a set of keys that are represented by this Map.Map<K,V>
getMap()
Get the Map that is wrapped by this wrapper.protected MapListenerSupport
getMapListenerSupport()
Accessor for the MapListenerSupport for sub-classes.int
hashCode()
Returns the hash code value for this Map.protected boolean
hasListeners()
Determine if the OverflowMap has any listeners at all.protected MapListener<K,V>
instantiateInternalListener()
Instantiate a MapListener to listen to the wrapped map.boolean
isCollectStats()
Check whether or not statistics are collected by the wrapper.protected boolean
isEventFabricator()
Determine if this ObservableMap has to fabricate events itself.protected boolean
isInternalKeySetIteratorMutable()
Determine if this Iterator should remove an iterated item by calling remove on the internal key Set Iterator, or by calling removeBlind on the map itself.protected static <K,V>
booleanisSynthetic(MapEvent<K,V> evt)
Helper method to determine if an event is synthetic.boolean
isTranslateEvents()
Check whether or not an event source has to be translated by the wrapper.V
put(K oKey, V oValue)
Associates the specified value with the specified key in this map.void
putAll(Map<? extends K,? extends V> map)
Copies all of the mappings from the specified map to this map.V
remove(Object oKey)
Removes the mapping for this key from this map if present.protected boolean
removeBlind(Object oKey)
Removes the mapping for this key from this map if present.void
removeMapListener(MapListener<? super K,? super V> listener)
Remove a standard map listener that previously signed up for all events.void
removeMapListener(MapListener<? super K,? super V> listener, Filter filter)
Remove a map listener that previously signed up for events based on a filter evaluation.void
removeMapListener(MapListener<? super K,? super V> listener, K oKey)
Remove a map listener that previously signed up for events about a specific key.void
setCollectStats(boolean fCollectStats)
Specify whether or not statistics are to be collected by the wrapper.void
setTranslateEvents(boolean fTranslate)
Specify whether or not an event source has to be translated by the wrapper.String
toString()
Returns a string representation of this Map.-
Methods inherited from class com.tangosol.util.AbstractKeySetBasedMap
containsKey, instantiateEntrySet, instantiateKeyIterator, instantiateKeySet, instantiateValues, isEmpty, iterateKeys, size
-
Methods inherited from class com.tangosol.util.AbstractKeyBasedMap
clone, entrySet, getAll, keySet, values
-
Methods inherited from class com.tangosol.util.Base
azzert, azzert, azzert, azzertFailed, breakLines, breakLines, capitalize, checkNotEmpty, checkNotNull, checkRange, computeSafeWaitTime, decimalValue, dup, dup, ensureBigDecimal, ensureClassLoader, ensureRuntimeException, ensureRuntimeException, equals, equalsDeep, err, err, err, err, err, escape, formatDateTime, getCallerStackFrame, getCommonMonitor, getCommonMonitor, getCommonMonitor, getContextClassLoader, getContextClassLoader, getDeepMessage, getErr, getLastSafeTimeMillis, getLog, getMaxDecDigits, getMaxHexDigits, getOriginalException, getOut, getProcessRandom, getRandom, getRandomBinary, getRandomBinary, getRandomString, getSafeTimeMillis, getStackFrame, getStackFrames, getStackTrace, getStackTrace, getStackTrace, getThreadFactory, getTimeZone, getUpTimeMillis, hashCode, hexValue, indentString, indentString, isDecimal, isHex, isLogEcho, isOctal, log, log, log, log, log, makeInteger, makeLong, makeThread, mergeArray, mergeBooleanArray, mergeByteArray, mergeCharArray, mergeDoubleArray, mergeFloatArray, mergeIntArray, mergeLongArray, mod, mod, octalValue, out, out, out, out, out, pad, parseBandwidth, parseBandwidth, parseDelimitedString, parseHex, parseHex, parseMemorySize, parseMemorySize, parsePercentage, parseTime, parseTime, parseTimeNanos, parseTimeNanos, printStackTrace, randomize, randomize, randomize, randomize, read, read, read, read, read, read, read, replace, setErr, setLog, setLogEcho, setOut, sleep, toBandwidthString, toBandwidthString, toCharEscape, toCrc, toCrc, toCrc, toCrc, toCrc, toDecString, toDelimitedString, toDelimitedString, toDelimitedString, toDelimitedString, toHex, toHex, toHexDump, toHexEscape, toHexEscape, toHexEscape, toHexEscape, toHexString, toMemorySizeString, toMemorySizeString, toQuotedCharEscape, toQuotedStringEscape, toSqlString, toString, toString, toStringEscape, toUnicodeEscape, trace, trace, trace, trace, trace, trace, trace, trace, trace, truncateString, truncateString, wait
-
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.util.Map
compute, computeIfAbsent, computeIfPresent, containsKey, entrySet, forEach, getOrDefault, isEmpty, keySet, merge, putIfAbsent, remove, replace, replace, replaceAll, size, values
-
-
-
-
Field Detail
-
m_listenerSupport
protected MapListenerSupport m_listenerSupport
The event listeners.
-
m_listenerInternal
protected MapListener<K,V> m_listenerInternal
The MapListener used to listen to the wrapped ObservableMap.
-
m_stats
protected SimpleCacheStatistics m_stats
The CacheStatistics object maintained by this wrapper.
-
m_fTranslateEvents
protected boolean m_fTranslateEvents
Specifies whether or not events are translated by this wrapper.
-
m_fDeferredEvent
protected boolean m_fDeferredEvent
Specifies whether or not fabricated events could be deferred.
-
-
Constructor Detail
-
WrapperObservableMap
public WrapperObservableMap(Map<K,V> map)
Construct an ObservableMap wrapper based on the specified map.Note: it is assumed that while the WrapperObservableMap exists, the contents of the underlying wrapped map are not directly manipulated.
- Parameters:
map
- the Map that will be wrapped by this WrapperObservableMap
-
WrapperObservableMap
public WrapperObservableMap(Map<K,V> map, boolean fDeferredEvent)
Construct an ObservableMap wrapper based on the specified map.Note: it is assumed that while the WrapperObservableMap exists, the contents of the underlying wrapped map are not directly manipulated.
- Parameters:
map
- the Map that will be wrapped by this WrapperObservableMapfDeferredEvent
- true iff if the value contained in the fabricated cache events could be lazily populated. Deferred events should only be raised to listeners that will process events synchronously
-
-
Method Detail
-
clear
public void clear()
Clear all key/value mappings.
-
containsValue
public boolean containsValue(Object oValue)
Returns true if this Map maps one or more keys to the specified value.- Specified by:
containsValue
in interfaceMap<K,V>
- Overrides:
containsValue
in classAbstractKeyBasedMap<K,V>
- Returns:
- true if this Map maps one or more keys to the specified value, false otherwise
-
put
public V put(K oKey, V oValue)
Associates the specified value with the specified key in this map.- Specified by:
put
in interfaceMap<K,V>
- Overrides:
put
in classAbstractKeyBasedMap<K,V>
- Parameters:
oKey
- key with which the specified value is to be associatedoValue
- value to be associated with the specified key- Returns:
- previous value associated with specified key, or null if there was no mapping for key
-
putAll
public void putAll(Map<? extends K,? extends V> map)
Copies all of the mappings from the specified map to this map. The effect of this call is equivalent to that of callingAbstractKeyBasedMap.put(K, V)
on this map once for each mapping in the passed map. The behavior of this operation is unspecified if the passed map is modified while the operation is in progress.
-
remove
public V remove(Object oKey)
Removes the mapping for this key from this map if present. Expensive: updates both the underlying cache and the local cache.- Specified by:
remove
in interfaceMap<K,V>
- Overrides:
remove
in classAbstractKeyBasedMap<K,V>
- Parameters:
oKey
- key whose mapping is to be removed from the map- Returns:
- previous value associated with specified key, or null if there was no mapping for key. A null return can also indicate that the map previously associated null with the specified key, if the implementation supports null values.
-
getInternalKeySet
protected Set<K> getInternalKeySet()
Obtain a set of keys that are represented by this Map.The AbstractKeySetBasedMap only utilizes the internal key set as a read-only resource.
- Specified by:
getInternalKeySet
in classAbstractKeySetBasedMap<K,V>
- Returns:
- an internal Set of keys that are contained by this Map
-
isInternalKeySetIteratorMutable
protected boolean isInternalKeySetIteratorMutable()
Determine if this Iterator should remove an iterated item by calling remove on the internal key Set Iterator, or by calling removeBlind on the map itself.- Overrides:
isInternalKeySetIteratorMutable
in classAbstractKeySetBasedMap<K,V>
- Returns:
- true to remove using the internal key Set Iterator or false to
use the
AbstractKeyBasedMap.removeBlind(Object)
method
-
removeBlind
protected boolean removeBlind(Object oKey)
Removes the mapping for this key from this map if present. This method exists to allow sub-classes to optimize remove functionality for situations in which the original value is not required.- Overrides:
removeBlind
in classAbstractKeyBasedMap<K,V>
- Parameters:
oKey
- key whose mapping is to be removed from the map- Returns:
- true iff the Map changed as the result of this operation
-
addMapListener
public void addMapListener(MapListener<? super K,? super V> listener)
Add a standard map listener that will receive all events (inserts, updates, deletes) that occur against the map, with the key, old-value and new-value included. This has the same result as the following call:addMapListener(listener, (Filter) null, false);
- Specified by:
addMapListener
in interfaceObservableMap<K,V>
- Parameters:
listener
- theMapEvent
listener to add
-
removeMapListener
public void removeMapListener(MapListener<? super K,? super V> listener)
Remove a standard map listener that previously signed up for all events. This has the same result as the following call:removeMapListener(listener, (Filter) null);
- Specified by:
removeMapListener
in interfaceObservableMap<K,V>
- Parameters:
listener
- the listener to remove
-
addMapListener
public void addMapListener(MapListener<? super K,? super V> listener, K oKey, boolean fLite)
Add a map listener for a specific key.The listeners will receive MapEvent objects, but if fLite is passed as true, they might not contain the OldValue and NewValue properties.
To unregister the MapListener, use the
ObservableMap.removeMapListener(MapListener, Object)
method.- Specified by:
addMapListener
in interfaceObservableMap<K,V>
- Parameters:
listener
- theMapEvent
listener to addoKey
- the key that identifies the entry for which to raise eventsfLite
- true to indicate that theMapEvent
objects do not have to include the OldValue and NewValue property values in order to allow optimizations
-
removeMapListener
public void removeMapListener(MapListener<? super K,? super V> listener, K oKey)
Remove a map listener that previously signed up for events about a specific key.- Specified by:
removeMapListener
in interfaceObservableMap<K,V>
- Parameters:
listener
- the listener to removeoKey
- the key that identifies the entry for which to raise events
-
addMapListener
public void addMapListener(MapListener<? super K,? super V> listener, Filter filter, boolean fLite)
Add a map listener that receives events based on a filter evaluation.The listeners will receive MapEvent objects, but if fLite is passed as true, they might not contain the OldValue and NewValue properties.
To unregister the MapListener, use the
ObservableMap.removeMapListener(MapListener, Filter)
method.- Specified by:
addMapListener
in interfaceObservableMap<K,V>
- Parameters:
listener
- theMapEvent
listener to addfilter
- a filter that will be passed MapEvent objects to select from; a MapEvent will be delivered to the listener only if the filter evaluates to true for that MapEvent (seeMapEventFilter
); null is equivalent to a filter that alway returns truefLite
- true to indicate that theMapEvent
objects do not have to include the OldValue and NewValue property values in order to allow optimizations
-
removeMapListener
public void removeMapListener(MapListener<? super K,? super V> listener, Filter filter)
Remove a map listener that previously signed up for events based on a filter evaluation.- Specified by:
removeMapListener
in interfaceObservableMap<K,V>
- Parameters:
listener
- the listener to removefilter
- the filter that was passed into the corresponding addMapListener() call
-
getMap
public Map<K,V> getMap()
Get the Map that is wrapped by this wrapper.Note: direct modifications of the returned map may cause an unpredictable behavior of the wrapper map.
- Returns:
- the wrapped Map
-
getCacheStatistics
public CacheStatistics getCacheStatistics()
Return the CacheStatistics for this cache.- Returns:
- a CacheStatistics object
-
isCollectStats
public boolean isCollectStats()
Check whether or not statistics are collected by the wrapper.- Returns:
- true if this wrapper collects cache statistics; false otherwise
- Since:
- Coherence 3.0
-
setCollectStats
public void setCollectStats(boolean fCollectStats)
Specify whether or not statistics are to be collected by the wrapper.- Parameters:
fCollectStats
- true if this wrapper should collect cache statistics; false otherwise- Since:
- Coherence 3.0
-
isTranslateEvents
public boolean isTranslateEvents()
Check whether or not an event source has to be translated by the wrapper.Note: this setting is only meaningful if the underlying map is an ObservableMap itself.
- Returns:
- true if this wrapper translates an event source; false otherwise
- Since:
- Coherence 3.3
-
setTranslateEvents
public void setTranslateEvents(boolean fTranslate)
Specify whether or not an event source has to be translated by the wrapper.Note: this setting is only meaningful if the underlying map is an ObservableMap itself.
- Parameters:
fTranslate
- true if this wrapper should translate an event source; false otherwise- Since:
- Coherence 3.3
-
getDescription
protected String getDescription()
Assemble a human-readable description.- Returns:
- a description of this Map
-
toString
public String toString()
Returns a string representation of this Map. The string representation consists of a list of key-value mappings in the order returned by the Map's entrySet view's iterator, enclosed in braces ("{}"). Adjacent mappings are separated by the characters ", " (comma and space). Each key-value mapping is rendered as the key followed by an equals sign ("=") followed by the associated value. Keys and values are converted to strings as by String.valueOf(Object).- Overrides:
toString
in classAbstractKeyBasedMap<K,V>
- Returns:
- a String representation of this Map
-
getMapListenerSupport
protected MapListenerSupport getMapListenerSupport()
Accessor for the MapListenerSupport for sub-classes.- Returns:
- the MapListenerSupport, or null if there are no listeners
-
ensureMapListenerSupport
protected MapListenerSupport ensureMapListenerSupport()
Obtain the MapListenerSupport, creating it if necessary.- Returns:
- the MapListenerSupport; never null
-
hasListeners
protected boolean hasListeners()
Determine if the OverflowMap has any listeners at all.- Returns:
- true iff this OverflowMap has at least one MapListener
-
isEventFabricator
protected boolean isEventFabricator()
Determine if this ObservableMap has to fabricate events itself.- Returns:
- true if events are expected, but the wrapped Map does not generate any events itself
-
isSynthetic
protected static <K,V> boolean isSynthetic(MapEvent<K,V> evt)
Helper method to determine if an event is synthetic.- Type Parameters:
K
- the key typeV
- the value type- Parameters:
evt
- a Map Event- Returns:
- true if the event is a synthetic cache event
-
dispatchPendingEvent
protected void dispatchPendingEvent(K oKey, int nId, V oNewValue, boolean fSynthetic)
Dispatch an event that has not yet occurred, allowing the cache to potentially avoid reading of the "original value" information.- Parameters:
oKey
- the key which the event is related tonId
- the event IDoNewValue
- the new valuefSynthetic
- true if the event is synthetic
-
dispatchEvent
protected void dispatchEvent(MapEvent<? extends K,? extends V> evt)
Dispatch the passed event.- Parameters:
evt
- a CacheEvent object
-
hashCode
public int hashCode()
Description copied from class:AbstractKeyBasedMap
Returns the hash code value for this Map. The hash code of a Map is defined to be the sum of the hash codes of each entry in the Map's entrySet() view. This ensures that t1.equals(t2) implies that t1.hashCode()==t2.hashCode() for any two maps t1 and t2, as required by the general contract of Object.hashCode.
-
equals
public boolean equals(Object o)
Description copied from class:AbstractKeyBasedMap
Compares the specified object with this map for equality. Returns true if the given object is also a map and the two maps represent the same mappings. More formally, two maps t1 and t2 represent the same mappings if t1.keySet().equals(t2.keySet()) and for every key k in t1.keySet(), (t1.get(k)==null ? t2.get(k)==null : t1.get(k).equals(t2.get(k))) . This ensures that the equals method works properly across different implementations of the map interface.
-
ensureInternalListener
protected MapListener<K,V> ensureInternalListener()
Obtain the internal MapListener, creating one if necessary.- Returns:
- an instance of MapListener; never null
-
instantiateInternalListener
protected MapListener<K,V> instantiateInternalListener()
Instantiate a MapListener to listen to the wrapped map.- Returns:
- an instance of MapListener
-
-