public abstract class AbstractExtractor<T,E> extends ExternalizableHelper implements ValueExtractor<T,E>, QueryMapComparator, Serializable
Starting with Coherence 3.5, when used to extract information that is coming
from a Map, subclasses have the additional ability to operate against the
Map.Entry instead of just the value. In other words, like the
EntryExtractor
class, this allows an extractor implementation to
extract a desired value using all available information on the corresponding
Map.Entry object and is intended to be used in advanced custom scenarios, when
application code needs to look at both key and value at the same time or can
make some very specific assumptions regarding to the implementation details of
the underlying Entry object. To maintain full backwards compatibility, the
default behavior remains to extract from the Value property of the Map.Entry.
Note: subclasses are responsible for initialization and POF and/or
Lite serialization of the m_nTarget
field.
ExternalizableHelper.DecoratedMultiBufferReadBuffer, ExternalizableHelper.DefaultObjectStreamFactory, ExternalizableHelper.FormatAwareCompressor, ExternalizableHelper.IntDecoratedObject, ExternalizableHelper.Shielded, ExternalizableHelper.ShieldedDataOutputStream, ExternalizableHelper.ShieldedInputStream, ExternalizableHelper.ShieldedObjectOutputStream, ExternalizableHelper.ShieldedOutputStream, ExternalizableHelper.SimpleXmlBeanClassCache, ExternalizableHelper.Stats, ExternalizableHelper.XmlBeanClassCache
Base.LoggingWriter, Base.StackFrame
Modifier and Type | Field and Description |
---|---|
static int |
KEY
Indicates that the
extractFromEntry(java.util.Map.Entry) operation should use the
Entry's key. |
protected int |
m_nTarget
Specifies which part of the entry should be used by the
extractFromEntry(java.util.Map.Entry) operation. |
protected String |
m_sNameCanon
Canonical name for this extractor.
|
static int |
VALUE
Indicates that the
extractFromEntry(java.util.Map.Entry) operation should use the
Entry's value. |
CONVERTER_FROM_BINARY, CONVERTER_STRIP_INTDECO, CONVERTER_TO_BINARY, DECO_APP_1, DECO_APP_2, DECO_APP_3, DECO_CUSTOM, DECO_EXPIRY, DECO_ID_MAX, DECO_ID_MIN, DECO_JCACHE, DECO_JCACHE_SYNTHETIC, DECO_MEMCACHED, DECO_PUSHREP, DECO_QUEUE_METADATA, DECO_RSVD_1, DECO_RSVD_2, DECO_STORE, DECO_TX, DECO_VALUE, DECO_WLS, EMPTY_BINARY_ARRAY, FMT_B_ARRAY, FMT_BIN_DECO, FMT_BIN_EXT_DECO, FMT_BINARY, FMT_BOOLEAN, FMT_BYTE, FMT_DECIMAL, FMT_DOUBLE, FMT_EXT, FMT_FLOAT, FMT_IDO, FMT_INT, FMT_INTEGER, FMT_LONG, FMT_NONE, FMT_NULL, FMT_OBJ_EXT, FMT_OBJ_SER, FMT_OPT, FMT_OPT_DOUBLE, FMT_OPT_INT, FMT_OPT_LONG, FMT_SHORT, FMT_STRING, FMT_UNKNOWN, FMT_XML_BEAN, FMT_XML_SER, FORCE_RESOLVING_STREAMS, MAX_DECO_HEADER_BYTES, PROPERTY_CONFIG, s_streamfactory, TRINT_DOMAIN_SPAN, TRINT_MAX_VALUE, TRINT_MAX_VARIANCE, USE_POF_STREAMS, USE_XMLBEAN_CLASS_CACHE, XMLBEAN_CLASS_CACHE
Constructor and Description |
---|
AbstractExtractor() |
Modifier and Type | Method and Description |
---|---|
int |
compare(Object o1,
Object o2)
Compares its two arguments for order.
|
int |
compareEntries(QueryMap.Entry entry1,
QueryMap.Entry entry2)
Compare two entries based on the rules specified by
Comparator . |
boolean |
equals(Object o)
Equivalence by canonical name and target.
|
E |
extract(T oTarget)
Extract the value from the passed object.
|
E |
extractFromEntry(Map.Entry entry)
Extract the value from the passed Entry object.
|
E |
extractOriginalFromEntry(MapTrigger.Entry entry)
Extract the value from the "original value" of the passed Entry object
or the key (if targeted).
|
String |
getCanonicalName()
Return the canonical name for this extractor.
|
int |
getTarget()
Return
VALUE . |
int |
hashCode()
HashCode value is hashCode of non-null
canonical name ;
otherwise, it is the identity hashCode value. |
protected boolean |
isCanonicallyEquatable(Object oValue)
Return true if either this or
oValue have a non-null
canonical name . |
asBinary, calculatePackedLength, calculatePackedLength, checkObjectInputFilter, convertUTF, decodeExpiry, decorate, decorate, decorate, decorate, decorate, decorateBinary, encodeExpiry, ensureSerializer, extractIntDecoration, fromBinary, fromBinary, fromBinary, fromBinary, fromBinary, fromBinary, fromByteArray, fromByteArray, getClass, getDecoration, getDecoration, getDecorations, getDeltaCompressor, getInputStream, getNewObjectInput, getObjectInput, getObjectOutput, getObjectStreamFactory, getOutputStream, getShieldedOutputStream, getStreamFormat, getUndecorated, getUndecorated, isDecorated, isDecorated, isIntDecorated, isIntDecorated, isResolving, isSerializable, isSerializerCompatible, isVersionCompatible, isVersionCompatible, loadClass, loadResource, main, makeTrint, readBigDecimal, readBigInteger, readBooleanArray, readByteArray, readCollection, readDate, readDoubleArray, readExternalizableLite, readExternalizableLite, readFloatArray, readInt, readInt, readIntArray2d, readLong, readLong, readMap, readMap, readObject, readObject, readSafeUTF, readSafeUTF, readSerializable, readSerializable, readStringArray, readTime, readTimestamp, readTrint, readUnsignedTrint, readUTF, readXmlBean, readXmlSerializable, readXmlSerializable, realize, removeIntDecoration, removeIntDecoration, replace, reportIncompatibleSerializers, setObjectStreamFactory, toBinary, toBinary, toByteArray, toByteArray, toByteArray, toLiteBinary, toLong, undecorate, undecorate, validateBufferSize, writeBigDecimal, writeBigInteger, writeBooleanArray, writeByteArray, writeCollection, writeDate, writeDoubleArray, writeExternalizableLite, writeFloatArray, writeInt, writeInt, writeIntArray2d, writeLong, writeLong, writeMap, writeObject, writeSafeUTF, writeSafeUTF, writeSerializable, writeStringArray, writeTime, writeTimestamp, writeTrint, writeTrint, writeUTF, writeXmlBean, writeXmlSerializable
countBits, countBits, countBits, indexOfLSB, indexOfLSB, indexOfLSB, indexOfMSB, indexOfMSB, indexOfMSB, rotateLeft, rotateLeft, rotateLeft, rotateRight, rotateRight, rotateRight, toBitString, toBitString, toBitString, toBytes, toBytes, toBytes, toBytes, toInt, toInt, toLong
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, getThreadFactory, getTimeZone, getUpTimeMillis, hashCode, hexValue, indentString, indentString, isDecimal, isHex, isLogEcho, isOctal, log, log, log, log, log, makeInteger, makeLong, makeThread, 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
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
andThen, apply, applyAsDouble, applyAsInt, applyAsLong, compose, fromKey, identity, identityCast, of
andThen, compose
comparing, comparing, comparingDouble, comparingInt, comparingLong, naturalOrder, nullsFirst, nullsLast, reversed, reverseOrder, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
public static final int VALUE
extractFromEntry(java.util.Map.Entry)
operation should use the
Entry's value.public static final int KEY
extractFromEntry(java.util.Map.Entry)
operation should use the
Entry's key.protected int m_nTarget
extractFromEntry(java.util.Map.Entry)
operation. Legal values are VALUE
(default) or KEY
.
Note: subclasses are responsible for initialization and POF and/or Lite serialization of this field.
protected transient String m_sNameCanon
Note: subclasses are responsible for initialization and POF and/or Lite serialization of this field.
public E extract(T oTarget)
ValueExtractor
extract
in interface ValueExtractor<T,E>
oTarget
- the object to extract the value frompublic int getTarget()
ValueExtractor
VALUE
.getTarget
in interface ValueExtractor<T,E>
VALUE
public String getCanonicalName()
ValueExtractor
A canonical name uniquely identifies what is to be extracted, but not how it is to be extracted. Thus two different extractor implementations with the same non-null canonical name are considered to be equal, and should reflect this in their implementations of hashCode and equals.
Canonical names for properties are designated by their property name in camel case,
for instance a Java Bean with method getFooBar
would have a property named fooBar
,
and would have fooBar
as its canonical name.
Canonical names for zero-arg method invocations are the method name followed by ().
Dots in a canonical name delimit one or more property/method accesses represented by a chaining
ValueExtractor such as ChainedExtractor
or
PofExtractor(Class, PofNavigator, String)
.
There is currently no canonical name format for methods which take parameters and
as such they must return a canonical name of null
.
getCanonicalName
in interface com.oracle.coherence.common.base.CanonicallyNamed
getCanonicalName
in interface ValueExtractor<T,E>
null
public boolean equals(Object o)
When precondition isCanonicallyEquatable(Object)
is false,
fall back to implementation specific equals implementation.
equals
in interface ValueExtractor<T,E>
equals
in interface Comparator
equals
in class Object
o
- the reference object with which to comparetrue
if canonical name match and no target mismatchpublic int hashCode()
canonical name
;
otherwise, it is the identity hashCode value.
Subclass computes hashCode when canonical name is null
.
public int compare(Object o1, Object o2)
compare
in interface Comparator
o1
- the first object to be comparedo2
- the second object to be comparedClassCastException
- if the arguments' types prevent them from
being compared by this Comparator.public int compareEntries(QueryMap.Entry entry1, QueryMap.Entry entry2)
Comparator
.
If possible, use the extract
method to optimize the value extraction process.
This method is expected to be implemented by Comparator wrappers,
such as ChainedComparator
and InverseComparator
,
which simply pass on this invocation to the wrapped Comparator objects
if they too implement this interface, or to invoke their default
compare method passing the actual objects (not the extracted values)
obtained from the extractor using the passed entries.
This interface is also expected to be implemented by ValueExtractor implementations that implement the Comparator interface. It is expected that in most cases, the Comparator wrappers will eventually terminate at (i.e. delegate to) ValueExtractors that also implement this interface.
compareEntries
in interface QueryMapComparator
entry1
- the first entry to compare values from; read-onlyentry2
- the second entry to compare values from; read-onlypublic E extractFromEntry(Map.Entry entry)
extract(T)
method. By
overriding this method, an extractor implementation is able to extract a
desired value using all available information on the corresponding
Map.Entry object and is intended to be used in advanced custom scenarios,
when application code needs to look at both key and value at the same time
or can make some very specific assumptions regarding to the implementation
details of the underlying Entry object.entry
- an Entry object to extract a desired value frompublic E extractOriginalFromEntry(MapTrigger.Entry entry)
extractFromEntry(java.util.Map.Entry)
method.entry
- an Entry object whose original value should be used to
extract the desired value fromprotected boolean isCanonicallyEquatable(Object oValue)
oValue
have a non-null
canonical name
.
This is a precondition for solely relying on equals(Object)
to compute equivalence in subclass implementations. Since hashCode()
is computed differently when canonical name exists,
implementation specific equivalence can only be used when both
instances have a null canonical name; otherwise,
the object equals(Object)
/hashCode()
contract would be violated.
oValue
- an objecttrue
if either this or oValue
have a non-null
canonical name
.