Package com.tangosol.util
Class ConditionalIndex
- java.lang.Object
-
- com.tangosol.util.Base
-
- com.tangosol.util.SimpleMapIndex
-
- com.tangosol.util.ConditionalIndex
-
- All Implemented Interfaces:
MapIndex
public class ConditionalIndex extends SimpleMapIndex
ConditionalIndex is aMapIndex
implementation that uses an associated filter to evaluate whether or not an entry should be indexed. An entry's extracted value is only added to the index if the filter evaluates to true.- Since:
- Coherence 3.6
- Author:
- tb 2010.02.08
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.tangosol.util.SimpleMapIndex
SimpleMapIndex.IndexCalculator
-
Nested classes/interfaces inherited from class com.tangosol.util.Base
Base.LoggingWriter
-
-
Field Summary
-
Fields inherited from class com.tangosol.util.SimpleMapIndex
m_calculator, m_cLogMissingIdx, m_comparator, m_ctx, m_cUnits, m_extractor, m_fForwardIndex, m_fImmutableValues, m_fOrdered, m_fSplitCollection, m_ldtLogMissingIdx, m_mapForward, m_mapInverse, m_setKeyExcluded
-
-
Constructor Summary
Constructors Constructor Description ConditionalIndex(Filter filter, ValueExtractor extractor, boolean fOrdered, Comparator comparator, boolean fForwardIndex, BackingMapContext ctx)
Construct a ConditionalIndex.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
deleteInternal(Map.Entry entry)
Update this index in response to a remove operation on a cache.boolean
equals(Object o)
Compares the specified object with this index for equality.protected boolean
evaluateEntry(Map.Entry entry)
Evaluate the given entry using this index's filter.Object
get(Object oKey)
Using the index information if possible, get the value associated with the specified key.Filter
getFilter()
Get the associated filter.protected Map.Entry
getForwardEntry(Object oKey)
Get the forward index entry associated with the specified key.protected void
insertInternal(Map.Entry entry)
Update this index in response to a insert operation on a cache.protected Map
instantiateForwardIndex()
Instantiate the forward index.boolean
isPartial()
Determine if indexed information for any entry in the indexed Map has been excluded from this index.protected void
removeForwardEntry(Object oKey)
Remove the forward index entry for the specified key.String
toString()
Returns a string representation of this ConditionalIndex.void
update(Map.Entry entry)
Update this index in response to an update operation on a cache.protected void
updateInternal(Map.Entry entry)
Update this index in response to an update operation on a cache.-
Methods inherited from class com.tangosol.util.SimpleMapIndex
addForwardEntry, addInverseCollectionMapping, addInverseMapping, addInverseMapping, collectRemoved, delete, ensureCollection, extractNewValue, extractOldValue, getCalculator, getComparator, getIndexContents, getUnits, getValueExtractor, hashCode, initialize, insert, instantiateCalculator, instantiateInverseIndex, instantiateSet, isForwardIndexSupported, isKeyExcluded, isOptimizeMV, isOrdered, logMissingIdx, onMappingAdded, onMappingAdded, onMappingRemoved, onMappingRemoved, removeInverseMapping, removeInverseMapping, removeInverseMapping, setOptimizeMV, setUnits, toString, updateExcludedKeys
-
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
-
-
-
-
Constructor Detail
-
ConditionalIndex
public ConditionalIndex(Filter filter, ValueExtractor extractor, boolean fOrdered, Comparator comparator, boolean fForwardIndex, BackingMapContext ctx)
Construct a ConditionalIndex.- Parameters:
filter
- the filter that is used to evaluate the entries of the resource map that is being indexedextractor
- theValueExtractor
that is used to extract an indexed value from a resource map entryfOrdered
- true iff the contents of the indexed information should be ordered; false otherwisecomparator
- the Comparator object which imposes an ordering on entries in the index map; or null if the entries' values natural ordering should be usedfForwardIndex
- specifies whether or not this index supports a forward mapctx
- thecontext
associated with this index
-
-
Method Detail
-
get
public Object get(Object oKey)
Using the index information if possible, get the value associated with the specified key. This is expected to be more efficient than using the ValueExtractor against an object containing the value, because the index should already have the necessary information at hand.- Specified by:
get
in interfaceMapIndex
- Overrides:
get
in classSimpleMapIndex
- Parameters:
oKey
- the key that specifies the object to extract the value from- Returns:
- the value that would be extracted by this MapIndex's ValueExtractor from the object specified by the passed key; NO_VALUE if the index does not have the necessary information
-
getForwardEntry
protected Map.Entry getForwardEntry(Object oKey)
Get the forward index entry associated with the specified key.- Overrides:
getForwardEntry
in classSimpleMapIndex
- Parameters:
oKey
- the key- Returns:
- the entry associated with the given key
-
removeForwardEntry
protected void removeForwardEntry(Object oKey)
Remove the forward index entry for the specified key.- Overrides:
removeForwardEntry
in classSimpleMapIndex
- Parameters:
oKey
- the key to remove the forward index entry for
-
instantiateForwardIndex
protected Map instantiateForwardIndex()
Instantiate the forward index.Note: To optimize the memory footprint of the forward index, any subclasses of the SimpleMapIndex that override this method must also implement the
SimpleMapIndex.getForwardEntry(Object)
method accordingly.- Overrides:
instantiateForwardIndex
in classSimpleMapIndex
- Returns:
- the forward index
-
isPartial
public boolean isPartial()
Determine if indexed information for any entry in the indexed Map has been excluded from this index. This information is used forIndexAwareFilter
implementations to determine the most optimal way to apply the index.Note: Queries that use a partial index are allowed not to return entries that are not indexed even though they would match the corresponding filter were they evaluated during the full scan (if there were no index). However, it's not allowable for a query to return entries that do not match the corresponding filter, regardless of their presence in the index.
- Specified by:
isPartial
in interfaceMapIndex
- Overrides:
isPartial
in classSimpleMapIndex
- Returns:
- true if any entry of the indexed Map has been excluded from the index, false otherwise
-
getFilter
public Filter getFilter()
Get the associated filter.- Returns:
- the filter
-
evaluateEntry
protected boolean evaluateEntry(Map.Entry entry)
Evaluate the given entry using this index's filter. If the entry does not pass the filter then it should be excluded from this index, making this a partial index.- Parameters:
entry
- the entry to evaluate- Returns:
- true if the entry passes the filter, false otherwise
-
update
public void update(Map.Entry entry)
Update this index in response to an update operation on a cache.- Specified by:
update
in interfaceMapIndex
- Overrides:
update
in classSimpleMapIndex
- Parameters:
entry
- the entry representing the object being updated
-
insertInternal
protected void insertInternal(Map.Entry entry)
Update this index in response to a insert operation on a cache.- Overrides:
insertInternal
in classSimpleMapIndex
- Parameters:
entry
- the entry representing the object being inserted
-
updateInternal
protected void updateInternal(Map.Entry entry)
Update this index in response to an update operation on a cache.- Overrides:
updateInternal
in classSimpleMapIndex
- Parameters:
entry
- the entry representing the object being updated
-
deleteInternal
protected void deleteInternal(Map.Entry entry)
Update this index in response to a remove operation on a cache.- Overrides:
deleteInternal
in classSimpleMapIndex
- Parameters:
entry
- the entry representing the object being removed
-
toString
public String toString()
Returns a string representation of this ConditionalIndex. The string representation consists of the SimpleMapIndex representation concatenated by the Filter and the ForwardIndexSupported flag.- Overrides:
toString
in classSimpleMapIndex
- Returns:
- a String representation of this ConditionalIndex
-
equals
public boolean equals(Object o)
Compares the specified object with this index for equality. Returns true if the given object is also a SimpleMapIndex and the two represent the same index.- Overrides:
equals
in classSimpleMapIndex
- Parameters:
o
- object to be compared for equality with this MapIndex- Returns:
- true if the specified object is equal to this index
-
-