org.apache.poi.ddf

## Class EscherContainerRecord

- java.lang.Object
- - org.apache.poi.ddf.EscherRecord
  - - org.apache.poi.ddf.EscherContainerRecord

- All Implemented Interfaces:
    java.lang.Iterable<EscherRecord>, Duplicatable, GenericRecord

      public final class EscherContainerRecord
      extends EscherRecord
      implements java.lang.Iterable<EscherRecord>

  Escher container records store other escher records as children. The container records themselves never store any information beyond the standard header used by all escher records. This one record is used to represent many different types of records.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static short` | `BSTORE_CONTAINER`
    `static short` | `DG_CONTAINER`
    `static short` | `DGG_CONTAINER`
    `static short` | `SOLVER_CONTAINER`
    `static short` | `SP_CONTAINER`
    `static short` | `SPGR_CONTAINER`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `EscherContainerRecord()`
    `EscherContainerRecord(EscherContainerRecord other)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addChildBefore(EscherRecord record, int insertBeforeRecordId)` Add a child record before the record with given recordId
    `void` | `addChildRecord(EscherRecord record)` Append a child record
    `EscherContainerRecord` | `copy()`
    `void` | `display(java.io.PrintWriter w, int indent)` The display methods allows escher variables to print the record names according to their hierarchy.
    `int` | `fillFields(byte[] data, int pOffset, EscherRecordFactory recordFactory)` The contract of this method is to deserialize an escher record including it's children.
    `EscherRecord` | `getChild(int index)` Returns the indexed child record.
    `<T extends EscherRecord> T` | `getChildById(short recordId)`
    `java.util.List<EscherContainerRecord>` | `getChildContainers()` Returns all of our children which are also EscherContainers (may be 0, 1, or vary rarely 2 or 3)
    `java.util.List<EscherRecord>` | `getChildRecords()`
    `java.util.Map<java.lang.String,java.util.function.Supplier<?>>` | `getGenericProperties()`
    `java.lang.Enum` | `getGenericRecordType()`
    `java.lang.String` | `getRecordName()` Subclasses should return the short name for this escher record.
    `void` | `getRecordsById(short recordId, java.util.List<EscherRecord> out)` Recursively find records with the specified record ID
    `int` | `getRecordSize()` Subclasses should effeciently return the number of bytes required to serialize the record.
    `boolean` | `hasChildOfType(short recordId)` Do any of our (top level) children have the given recordId?
    `java.util.Iterator<EscherRecord>` | `iterator()`
    `boolean` | `removeChildRecord(EscherRecord toBeRemoved)` Removes the given escher record from the child list
    `int` | `serialize(int offset, byte[] data, EscherSerializationListener listener)` Serializes the record to an existing byte array.
    `void` | `setChildRecords(java.util.List<EscherRecord> childRecords)` replaces the internal child list with the contents of the supplied `childRecords`

    - ### Methods inherited from class org.apache.poi.ddf.EscherRecord

      `clone, fillFields, getGenericChildren, getInstance, getOptions, getRecordId, getVersion, isContainerRecord, readHeader, readInstance, serialize, serialize, setInstance, setOptions, setRecordId, setVersion, toString, toXml, toXml`

    - ### Methods inherited from class java.lang.Object

      `equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface java.lang.Iterable

      `forEach, spliterator`

- - ### Field Detail

    - #### DGG_CONTAINER

          public static final short DGG_CONTAINER

    - #### BSTORE_CONTAINER

          public static final short BSTORE_CONTAINER

    - #### DG_CONTAINER

          public static final short DG_CONTAINER

    - #### SPGR_CONTAINER

          public static final short SPGR_CONTAINER

    - #### SP_CONTAINER

          public static final short SP_CONTAINER

    - #### SOLVER_CONTAINER

          public static final short SOLVER_CONTAINER

  - ### Constructor Detail

    - #### EscherContainerRecord

          public EscherContainerRecord()

    - #### EscherContainerRecord

          public EscherContainerRecord(EscherContainerRecord other)

  - ### Method Detail

    - #### fillFields

          public int fillFields(byte[] data,
                                int pOffset,
                                EscherRecordFactory recordFactory)

      Description copied from class: `EscherRecord`
      The contract of this method is to deserialize an escher record including it's children.
      Specified by:
        `fillFields` in class `EscherRecord`
      Parameters:
        `data` - The byte array containing the serialized escher records.
        `pOffset` - The offset into the byte array.
        `recordFactory` - A factory for creating new escher records.
      Returns:
        The number of bytes written.

    - #### serialize

          public int serialize(int offset,
                               byte[] data,
                               EscherSerializationListener listener)

      Description copied from class: `EscherRecord`
      Serializes the record to an existing byte array.
      Specified by:
        `serialize` in class `EscherRecord`
      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 int getRecordSize()

      Description copied from class: `EscherRecord`
      Subclasses should effeciently return the number of bytes required to serialize the record.
      Specified by:
        `getRecordSize` in class `EscherRecord`
      Returns:
        number of bytes

    - #### hasChildOfType

          public boolean hasChildOfType(short recordId)

      Do any of our (top level) children have the given recordId?
      Parameters:
        `recordId` - the recordId of the child
      Returns:
        true, if any child has the given recordId

    - #### getChild

          public EscherRecord getChild(int index)

      Description copied from class: `EscherRecord`
      Returns the indexed child record.
      Overrides:
        `getChild` in class `EscherRecord`
      Parameters:
        `index` - the index of the child within the child records
      Returns:
        the indexed child record

    - #### getChildRecords

          public java.util.List<EscherRecord> getChildRecords()

      Overrides:
        `getChildRecords` in class `EscherRecord`
      Returns:
        a copy of the list of all the child records of the container.
      See Also:
        `EscherContainerRecord`

    - #### iterator

          public java.util.Iterator<EscherRecord> iterator()

      Specified by:
        `iterator` in interface `java.lang.Iterable<EscherRecord>`
      Returns:
        an iterator over the child records

    - #### setChildRecords

          public void setChildRecords(java.util.List<EscherRecord> childRecords)

      replaces the internal child list with the contents of the supplied `childRecords`
      Overrides:
        `setChildRecords` in class `EscherRecord`
      Parameters:
        `childRecords` - Not used in base implementation.

    - #### removeChildRecord

          public boolean removeChildRecord(EscherRecord toBeRemoved)

      Removes the given escher record from the child list
      Parameters:
        `toBeRemoved` - the escher record to be removed
      Returns:
        true, if the record was found and removed

    - #### getChildContainers

          public java.util.List<EscherContainerRecord> getChildContainers()

      Returns all of our children which are also EscherContainers (may be 0, 1, or vary rarely 2 or 3)
      Returns:
        EscherContainer children

    - #### getRecordName

          public java.lang.String getRecordName()

      Description copied from class: `EscherRecord`
      Subclasses should return the short name for this escher record.
      Specified by:
        `getRecordName` in class `EscherRecord`
      Returns:
        the short name for this escher record

    - #### display

          public void display(java.io.PrintWriter w,
                              int indent)

      Description copied from class: `EscherRecord`
      The display methods allows escher variables to print the record names according to their hierarchy.
      Overrides:
        `display` in class `EscherRecord`
      Parameters:
        `w` - The print writer to output to.
        `indent` - The current indent level.

    - #### addChildRecord

          public void addChildRecord(EscherRecord record)

      Append a child record
      Parameters:
        `record` - the record to be added

    - #### addChildBefore

          public void addChildBefore(EscherRecord record,
                                     int insertBeforeRecordId)

      Add a child record before the record with given recordId
      Parameters:
        `record` - the record to be added
        `insertBeforeRecordId` - the recordId of the next sibling

    - #### getChildById

          public <T extends EscherRecord> T getChildById(short recordId)

    - #### getRecordsById

          public void getRecordsById(short recordId,
                                     java.util.List<EscherRecord> out)

      Recursively find records with the specified record ID
      Parameters:
        `recordId` - the recordId to be searched for
        `out` - - list to store found records

    - #### getGenericProperties

          public java.util.Map<java.lang.String,java.util.function.Supplier<?>> getGenericProperties()

      Specified by:
        `getGenericProperties` in interface `GenericRecord`
      Overrides:
        `getGenericProperties` in class `EscherRecord`

    - #### getGenericRecordType

          public java.lang.Enum getGenericRecordType()

      Specified by:
        `getGenericRecordType` in interface `GenericRecord`

    - #### copy

          public EscherContainerRecord copy()

      Specified by:
        `copy` in interface `Duplicatable`
      Specified by:
        `copy` in class `EscherRecord`
      Returns:
        a deep copy of the implementing class / instance

Copyright 2020 The Apache Software Foundation or its licensors, as applicable.