Package org.apache.poi.ddf
Class EscherRecord
- java.lang.Object
-
- org.apache.poi.ddf.EscherRecord
-
- All Implemented Interfaces:
java.lang.Cloneable
- Direct Known Subclasses:
AbstractEscherOptRecord
,EscherBlipRecord
,EscherBSERecord
,EscherChildAnchorRecord
,EscherClientAnchorRecord
,EscherClientDataRecord
,EscherContainerRecord
,EscherDggRecord
,EscherDgRecord
,EscherPlaceholder
,EscherSpgrRecord
,EscherSplitMenuColorsRecord
,EscherSpRecord
,EscherTextboxRecord
,UnknownEscherRecord
public abstract class EscherRecord extends java.lang.Object implements java.lang.Cloneable
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.
-
-
Constructor Summary
Constructors Constructor Description EscherRecord()
Create a new instance
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description EscherRecord
clone()
Escher records may need to be clonable in the future.void
display(java.io.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.EscherRecord
getChild(int index)
Returns the indexed child record.java.util.List<EscherRecord>
getChildRecords()
short
getInstance()
Returns the instance part of the option record.short
getOptions()
Note thatoptions
is an internal field.short
getRecordId()
Return the current record id.abstract java.lang.String
getRecordName()
Subclasses should return the short name for this escher record.abstract int
getRecordSize()
Subclasses should effeciently return the number of bytes required to serialize the record.short
getVersion()
Returns the version part of the option record.boolean
isContainerRecord()
Determine whether this is a container record by inspecting the option field.byte[]
serialize()
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(java.util.List<EscherRecord> childRecords)
Sets the child records for this record.void
setInstance(short value)
Sets the instance part of recordvoid
setOptions(short options)
Set the options this this record.void
setRecordId(short recordId)
Sets the record id for this record.void
setVersion(short value)
Sets the version part of recordjava.lang.String
toString()
java.lang.String
toXml()
java.lang.String
toXml(java.lang.String tab)
-
-
-
Method Detail
-
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.
-
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
@Internal public short getOptions()
Note thatoptions
is an internal field. UsesetInstance(short)
()} andsetVersion(short)
()} to set the actual fields.- Returns:
- The options field for this record. All records have one.
-
setOptions
@Internal public void setOptions(short options)
Set the options this this record. Container records should have the last nibble set to 0xF.Note that
options
is an internal field. UsegetInstance()
andgetVersion()
to access actual fields.- Parameters:
options
- the record options
-
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(int, byte[])
-
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(int, byte[], org.apache.poi.ddf.EscherSerializationListener)
-
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 arraydata
- the data array to serialize tolistener
- 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.- Parameters:
recordId
- the record id
-
getChildRecords
public java.util.List<EscherRecord> 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:
EscherContainerRecord
-
setChildRecords
public void setChildRecords(java.util.List<EscherRecord> 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 EscherRecord clone() throws java.lang.CloneNotSupportedException
Escher records may need to be clonable in the future.- Returns:
- the cloned object
- Throws:
java.lang.CloneNotSupportedException
- if the subclass hasn't implementedCloneable
-
getChild
public EscherRecord getChild(int index)
Returns the indexed child record.- Parameters:
index
- the index of the child within the child records- Returns:
- the indexed child record
-
display
public void display(java.io.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 java.lang.String getRecordName()
Subclasses should return the short name for this escher record.- Returns:
- 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
-
setInstance
public void setInstance(short value)
Sets the instance part of record- Parameters:
value
- instance part value
-
getVersion
public short getVersion()
Returns the version part of the option record.- Returns:
- The version part of the option record
-
setVersion
public void setVersion(short value)
Sets the version part of record- Parameters:
value
- version part value
-
toXml
public java.lang.String toXml()
-
toXml
public final java.lang.String toXml(java.lang.String tab)
- Parameters:
tab
- - each children must be indented right relative to its parent- Returns:
- xml representation of this record
-
toString
public final java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-