FileDocCategorySizeDatePackage
EscherOptRecord.javaAPI DocApache Poi 3.0.16605Mon Jan 01 12:39:40 GMT 2007org.apache.poi.ddf

EscherOptRecord

public class EscherOptRecord extends EscherRecord
The opt record is used to store property values for a shape. It is the key to determining the attributes of a shape. Properties can be of two types: simple or complex. Simple types are fixed length. Complex properties are variable length.
author
Glen Stampoultzis

Fields Summary
public static final short
RECORD_ID
public static final String
RECORD_DESCRIPTION
private List
properties
Constructors Summary
Methods Summary
public voidaddEscherProperty(org.apache.poi.ddf.EscherProperty prop)
Add a property to this record.

        properties.add( prop );
    
public intfillFields(byte[] data, int offset, org.apache.poi.ddf.EscherRecordFactory recordFactory)
This method deserializes the record from a byte array.

param
data The byte array containing the escher record information
param
offset The starting offset into data.
param
recordFactory May be null since this is not a container record.
return
The number of bytes read from the byte array.


                                                                         
             
    
        int bytesRemaining = readHeader( data, offset );
        int pos = offset + 8;

        EscherPropertyFactory f = new EscherPropertyFactory();
        properties = f.createProperties( data, pos, getInstance() );
        return bytesRemaining + 8;
    
public java.util.ListgetEscherProperties()
The list of properties stored by this record.

        return properties;
    
public org.apache.poi.ddf.EscherPropertygetEscherProperty(int index)
The list of properties stored by this record.

        return (EscherProperty) properties.get( index );
    
public shortgetOptions()
Automatically recalculate the correct option

        setOptions( (short) ( ( properties.size() << 4 ) | 0x3 ) );
        return super.getOptions();
    
private intgetPropertiesSize()

        int totalSize = 0;
        for ( Iterator iterator = properties.iterator(); iterator.hasNext(); )
        {
            EscherProperty escherProperty = (EscherProperty) iterator.next();
            totalSize += escherProperty.getPropertySize();
        }
        return totalSize;
    
public java.lang.StringgetRecordName()
The short name for this record

        return "Opt";
    
public intgetRecordSize()
Returns the number of bytes that are required to serialize this record.

return
Number of bytes

        return 8 + getPropertiesSize();
    
public intserialize(int offset, byte[] data, org.apache.poi.ddf.EscherSerializationListener listener)
This method serializes this escher record into a byte array.

param
offset The offset into data to start writing the record data to.
param
data The byte array to serialize to.
param
listener A listener to retrieve start and end callbacks. Use a NullEscherSerailizationListener to ignore these events.
return
The number of bytes written.
see
NullEscherSerializationListener

        listener.beforeRecordSerialize( offset, getRecordId(), this );

        LittleEndian.putShort( data, offset, getOptions() );
        LittleEndian.putShort( data, offset + 2, getRecordId() );
        LittleEndian.putInt( data, offset + 4, getPropertiesSize() );
        int pos = offset + 8;
        for ( Iterator iterator = properties.iterator(); iterator.hasNext(); )
        {
            EscherProperty escherProperty = (EscherProperty) iterator.next();
            pos += escherProperty.serializeSimplePart( data, pos );
        }
        for ( Iterator iterator = properties.iterator(); iterator.hasNext(); )
        {
            EscherProperty escherProperty = (EscherProperty) iterator.next();
            pos += escherProperty.serializeComplexPart( data, pos );
        }
        listener.afterRecordSerialize( pos, getRecordId(), pos - offset, this );
        return pos - offset;
    
public voidsortProperties()
Records should be sorted by property number before being stored.

        Collections.sort( properties, new Comparator()
        {
            public int compare( Object o1, Object o2 )
            {
                EscherProperty p1 = (EscherProperty) o1;
                EscherProperty p2 = (EscherProperty) o2;
                return new Short( p1.getPropertyNumber() ).compareTo( new Short( p2.getPropertyNumber() ) );
            }
        } );
    
public java.lang.StringtoString()
Retrieve the string representation of this record.

        String nl = System.getProperty( "line.separator" );
        StringBuffer propertiesBuf = new StringBuffer();
        for ( Iterator iterator = properties.iterator(); iterator.hasNext(); )
            propertiesBuf.append( "    "
                    + iterator.next().toString()
                    + nl );

        return "org.apache.poi.ddf.EscherOptRecord:" + nl +
                "  isContainer: " + isContainerRecord() + nl +
                "  options: 0x" + HexDump.toHex( getOptions() ) + nl +
                "  recordId: 0x" + HexDump.toHex( getRecordId() ) + nl +
                "  numchildren: " + getChildRecords().size() + nl +
                "  properties:" + nl +
                propertiesBuf.toString();