Package loci.poi.ddf

Class EscherRecord

java.lang.Object
loci.poi.ddf.EscherRecord
Direct Known Subclasses:
EscherBlipRecord, EscherBSERecord, EscherChildAnchorRecord, EscherClientAnchorRecord, EscherClientDataRecord, EscherContainerRecord, EscherDggRecord, EscherDgRecord, EscherOptRecord, EscherSpgrRecord, EscherSplitMenuColorsRecord, EscherSpRecord, EscherTextboxRecord, UnknownEscherRecord

public abstract class EscherRecord extends Object
The base abstract record from which all escher records are defined. Subclasses will need to define methods for serialization/deserialization and for determining the record size.
Author:
Glen Stampoultzis
  • Constructor Summary

    Constructors
    Constructor
    Description
    Create a new instance
  • Method Summary

    Modifier and Type
    Method
    Description
    Escher records may need to be clonable in the future.
    void
    display(PrintWriter w, int indent)
    The display methods allows escher variables to print the record names according to their hierarchy.
    abstract int
    fillFields(byte[] data, int offset, EscherRecordFactory recordFactory)
    The contract of this method is to deserialize an escher record including it's children.
    protected int
    Delegates to fillFields(byte[], int, EscherRecordFactory)
    getChild(int index)
    Returns the indexed child record.
     
    short
    Returns the instance part of the option record.
    short
     
    short
    Return the current record id.
    abstract String
    Subclasses should return the short name for this escher record.
    abstract int
    Subclasses should effeciently return the number of bytes required to serialize the record.
    boolean
    Determine whether this is a container record by inspecting the option field.
    protected int
    readHeader(byte[] data, int offset)
    Reads the 8 byte header information and populates the options and recordId records.
    byte[]
    Serializes to a new byte array.
    int
    serialize(int offset, byte[] data)
    Serializes to an existing byte array without serialization listener.
    abstract int
    serialize(int offset, byte[] data, EscherSerializationListener listener)
    Serializes the record to an existing byte array.
    void
    setChildRecords(List childRecords)
    Sets the child records for this record.
    void
    setOptions(short options)
    Set the options this this record.
    void
    setRecordId(short recordId)
    Sets the record id for this record.

    Methods inherited from class java.lang.Object

    equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • EscherRecord

      public EscherRecord()
      Create a new instance
  • Method Details

    • fillFields

      protected int fillFields(byte[] data, EscherRecordFactory f)
      Delegates to fillFields(byte[], int, EscherRecordFactory)
      See Also:
    • fillFields

      public abstract int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory)
      The contract of this method is to deserialize an escher record including it's children.
      Parameters:
      data - The byte array containing the serialized escher records.
      offset - The offset into the byte array.
      recordFactory - A factory for creating new escher records.
      Returns:
      The number of bytes written.
    • readHeader

      protected int readHeader(byte[] data, int offset)
      Reads the 8 byte header information and populates the options and recordId records.
      Parameters:
      data - the byte array to read from
      offset - the offset to start reading from
      Returns:
      the number of bytes remaining in this record. This may include the children if this is a container.
    • isContainerRecord

      public boolean isContainerRecord()
      Determine whether this is a container record by inspecting the option field.
      Returns:
      true is this is a container field.
    • getOptions

      public short getOptions()
      Returns:
      The options field for this record. All records have one.
    • setOptions

      public void setOptions(short options)
      Set the options this this record. Container records should have the last nibble set to 0xF.
    • serialize

      public byte[] serialize()
      Serializes to a new byte array. This is done by delegating to serialize(int, byte[]);
      Returns:
      the serialized record.
      See Also:
    • serialize

      public int serialize(int offset, byte[] data)
      Serializes to an existing byte array without serialization listener. This is done by delegating to serialize(int, byte[], EscherSerializationListener).
      Parameters:
      offset - the offset within the data byte array.
      data - the data array to serialize to.
      Returns:
      The number of bytes written.
      See Also:
    • serialize

      public abstract int serialize(int offset, byte[] data, EscherSerializationListener listener)
      Serializes the record to an existing byte array.
      Parameters:
      offset - the offset within the byte array
      data - the data array to serialize to
      listener - a listener for begin and end serialization events. This is useful because the serialization is hierarchical/recursive and sometimes you need to be able break into that.
      Returns:
      the number of bytes written.
    • getRecordSize

      public abstract int getRecordSize()
      Subclasses should effeciently return the number of bytes required to serialize the record.
      Returns:
      number of bytes
    • getRecordId

      public short getRecordId()
      Return the current record id.
      Returns:
      The 16 bit record id.
    • setRecordId

      public void setRecordId(short recordId)
      Sets the record id for this record.
    • getChildRecords

      public List getChildRecords()
      Returns:
      Returns the children of this record. By default this will be an empty list. EscherCotainerRecord is the only record that may contain children.
      See Also:
    • setChildRecords

      public void setChildRecords(List childRecords)
      Sets the child records for this record. By default this will throw an exception as only EscherContainerRecords may have children.
      Parameters:
      childRecords - Not used in base implementation.
    • clone

      public Object clone()
      Escher records may need to be clonable in the future.
      Overrides:
      clone in class Object
    • getChild

      public EscherRecord getChild(int index)
      Returns the indexed child record.
    • display

      public void display(PrintWriter w, int indent)
      The display methods allows escher variables to print the record names according to their hierarchy.
      Parameters:
      w - The print writer to output to.
      indent - The current indent level.
    • getRecordName

      public abstract String getRecordName()
      Subclasses should return the short name for this escher record.
    • getInstance

      public short getInstance()
      Returns the instance part of the option record.
      Returns:
      The instance part of the record