Class PofExtractor<T,E>

All Implemented Interfaces:
CanonicallyNamed, PortableObject, QueryMapComparator, Remote.Function<T,E>, Remote.ToDoubleFunction<T>, Remote.ToIntFunction<T>, Remote.ToLongFunction<T>, ValueExtractor<T,E>, Serializable, Comparator, Function<T,E>, ToDoubleFunction<T>, ToIntFunction<T>, ToLongFunction<T>

public class PofExtractor<T,E> extends AbstractExtractor<T,E> implements PortableObject
POF-based ValueExtractor implementation. PofExtractor takes advantage of POF's indexed state to extract part of an object without needing to deserialize the entire object.

POF uses a compact form in the serialized value when possible. For example, some numeric values are represented as special POF intrinsic types in which the type implies the value. As a result, POF requires the receiver of a value to have implicit knowledge of the type. PofExtractor uses the class supplied in the constructor as the source of the type information. If the class is null, PofExtractor will infer the type from the serialized state.

Example where extracted value is double:

     PofExtractor extractor = new PofExtractor(double.class, 3);
 
Example where extracted value should be inferred:
     PofExtractor extractor = new PofExtractor(null, 4);
 
Since:
Coherence 3.5
Author:
as 2009.02.14
See Also:
  • Constructor Details

    • PofExtractor

      public PofExtractor()
      Default constructor (necessary for the PortableObject interface).
    • PofExtractor

      public PofExtractor(Class<E> clz, int iProp)
      Constructs a PofExtractor based on a property index.

      This constructor is equivalent to:

         PofExtractor extractor =
             new PofExtractor(clz, new SimplePofPath(iProp), VALUE);
       
      Parameters:
      clz - the required class of the extracted value or null if the class is to be inferred from the serialized state
      iProp - property index
    • PofExtractor

      public PofExtractor(Class<E> clz, int iProp, String sNameCanon)
      Constructs a PofExtractor based on a property index while providing the property's canonical name. Providing an appropriate canonical name enables equivalence with other ValueExtractor instances with same canonical name. See ValueExtractor.equals(Object) and ValueExtractor.getCanonicalName().
      Parameters:
      clz - the required class of the extracted value or null if the class is to be inferred from the serialized state
      iProp - property index
      sNameCanon - the canonical name for this extractor
      Since:
      12.2.1.4
    • PofExtractor

      public PofExtractor(Class<E> clz, PofNavigator navigator)
      Constructs a PofExtractor based on a POF navigator.

      This constructor is equivalent to:

         PofExtractor extractor =
             new PofExtractor(clz, navigator, VALUE);
       
      Parameters:
      clz - the required class of the extracted value or null if the class is to be inferred from the serialized state
      navigator - POF navigator
    • PofExtractor

      public PofExtractor(Class<E> clz, PofNavigator navigator, int nTarget)
      Constructs a PofExtractor based on a POF navigator and the entry extraction target.
      Parameters:
      clz - the required class of the extracted value or null if the class is to be inferred from the serialized state
      navigator - POF navigator
      nTarget - one of the AbstractExtractor.VALUE or AbstractExtractor.KEY values
    • PofExtractor

      public PofExtractor(Class<E> clz, PofNavigator navigator, int nTarget, String sNameCanon)
      Constructs a PofExtractor based on a POF navigator while providing its canonical name.
      Parameters:
      clz - the required class of the extracted value or null if the class is to be inferred from the serialized state
      navigator - POF navigator
      nTarget - one of the AbstractExtractor.VALUE or AbstractExtractor.KEY values
      sNameCanon - canonical name for this extractor
      Since:
      12.2.1.4
    • PofExtractor

      public PofExtractor(Class<E> clz, PofNavigator navigator, String sNameCanon)
      Constructs a VALUE PofExtractor based on a POF navigator while providing its canonical name.
      Parameters:
      clz - the required class of the extracted value or null if the class is to be inferred from the serialized state
      navigator - POF navigator
      sNameCanon - canonical name for this extractor
      Since:
      12.2.1.4
  • Method Details

    • extractFromEntry

      public E extractFromEntry(Map.Entry entry)
      Extracts the value from the passed Entry object.

      It is expected that this extractor will only be used against POF-encoded entries implementing BinaryEntry interface.

      Overrides:
      extractFromEntry in class AbstractExtractor<T,E>
      Parameters:
      entry - an Entry object to extract a value from
      Returns:
      the extracted value
      Throws:
      UnsupportedOperationException - if the specified Entry is not a POF-encoded BinaryEntry or the serializer is not a PofContext
      ClassCastException - if the extracted value is incompatible with the specified class
    • extractOriginalFromEntry

      public E extractOriginalFromEntry(MapTrigger.Entry entry)
      Description copied from class: AbstractExtractor
      Extract the value from the "original value" of the passed Entry object or the key (if targeted). This method's conventions are exactly the same as for the AbstractExtractor.extractFromEntry(java.util.Map.Entry) method.
      Overrides:
      extractOriginalFromEntry in class AbstractExtractor<T,E>
      Parameters:
      entry - an Entry object whose original value should be used to extract the desired value from
      Returns:
      the extracted value or null if the original value is not present
    • getNavigator

      public PofNavigator getNavigator()
      Obtain the POF navigator for this extractor.
      Returns:
      the POF navigator
    • getClassExtracted

      public Class<E> getClassExtracted()
      Obtain the Class of the extracted value.
      Returns:
      the expected Class
    • equals

      public boolean equals(Object o)
      Compare the PofExtractor with another object to determine equality.

      AbstractExtractor.equals(Object) contract takes precedence when applicable, falling back to implementation specific equals when this and o have non-null canonical name.

      Two PofExtractor objects are considered equal iff their navigators are equal and they have the same target (key or value).

      Specified by:
      equals in interface Comparator<T>
      Specified by:
      equals in interface ValueExtractor<T,E>
      Overrides:
      equals in class AbstractExtractor<T,E>
      Parameters:
      o - the reference object with which to compare
      Returns:
      true iff this PofExtractor and the passed object are equivalent
    • hashCode

      public int hashCode()
      Return the hashCode of a non-null canonical name; otherwise, the hash code is PofNavigator.hashCode() implementation.
      Specified by:
      hashCode in interface ValueExtractor<T,E>
      Overrides:
      hashCode in class AbstractExtractor<T,E>
      Returns:
      an integer hash value for this PofExtractor object
      See Also:
    • toString

      public String toString()
      Return a human-readable description for this PofExtractor.
      Overrides:
      toString in class Object
      Returns:
      a String description of the PofExtractor
    • readExternal

      public void readExternal(PofReader in) throws IOException
      Restore the contents of a user type instance by reading its state using the specified PofReader object.
      Specified by:
      readExternal in interface PortableObject
      Parameters:
      in - the PofReader from which to read the object's state
      Throws:
      IOException - if an I/O error occurs
    • writeExternal

      public void writeExternal(PofWriter out) throws IOException
      Save the contents of a POF user type instance by writing its state using the specified PofWriter object.
      Specified by:
      writeExternal in interface PortableObject
      Parameters:
      out - the PofWriter to which to write the object's state
      Throws:
      IOException - if an I/O error occurs
    • getPofTypeId

      protected int getPofTypeId(PofContext ctx)
      compute the expected pof type id based on the class.
      Parameters:
      ctx - pof context
      Returns:
      pof type id or T_UNKNOWN if the class is null.