FileDocCategorySizeDatePackage
FooterRecord.javaAPI DocApache Poi 3.0.16400Mon Jan 01 12:39:40 GMT 2007org.apache.poi.hssf.record

FooterRecord

public class FooterRecord extends Record
Title: Footer Record

Description: Specifies the footer for a sheet

REFERENCE: PG 317 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)

author
Andrew C. Oliver (acoliver at apache dot org)
author
Shawn Laubach (slaubach at apache dot org) Modified 3/14/02
author
Jason Height (jheight at chariot dot net dot au)
version
2.0-pre

Fields Summary
public static final short
sid
private byte
field_1_footer_len
private byte
field_2_reserved
private byte
field_3_unicode_flag
private String
field_4_footer
Constructors Summary
public FooterRecord()


     
    
    
public FooterRecord(RecordInputStream in)
Constructs a FooterRecord record and sets its fields appropriately.

param
id id must be 0x15 or an exception will be throw upon validation
param
size the size of the data area of the record
param
data data of the record (should not contain sid/len)

        super(in);
    
Methods Summary
public java.lang.Objectclone()

      FooterRecord rec = new FooterRecord();
      rec.field_1_footer_len = field_1_footer_len;
      rec.field_2_reserved = field_2_reserved;
      rec.field_3_unicode_flag = field_3_unicode_flag;
      rec.field_4_footer = field_4_footer;
      return rec;
    
protected voidfillFields(org.apache.poi.hssf.record.RecordInputStream in)

        if (in.remaining() > 0)
        {
            field_1_footer_len = in.readByte();
            /** These two fields are a bit odd. They are not documented*/
            field_2_reserved = in.readByte();
            field_3_unicode_flag = in.readByte();						// unicode
    
                         if(isMultibyte())
                         {
                field_4_footer = in.readUnicodeLEString(LittleEndian.ubyteToInt( field_1_footer_len));
                         }
                         else
                         {
                field_4_footer = in.readCompressedUnicode(LittleEndian.ubyteToInt( field_1_footer_len));
                         }
        }
    
public java.lang.StringgetFooter()
get the footer string

return
footer string to display
see
#getFooterLength()

        return field_4_footer;
    
public shortgetFooterLength()
get the length of the footer string

return
length of the footer string
see
#getFooter()

        return (short)(0xFF & field_1_footer_len); // [Shawn] Fixed needing unsigned byte
    
public intgetRecordSize()

        int retval = 4;

        if (getFooterLength() > 0)
        {
            retval+=3; // [Shawn] Fixed for two null bytes in the length
        }
        return (isMultibyte() ? 
            (retval + getFooterLength()*2) : (retval + getFooterLength()));
    
public shortgetSid()

        return sid;
    
public booleanisMultibyte()
see the unicode flag

return
boolean flag true:footer string has at least one multibyte character

         return ((field_3_unicode_flag & 0xFF) == 1);
    
public intserialize(int offset, byte[] data)

        int len = 4;

        if (getFooterLength() > 0)
        {
            len+=3; // [Shawn] Fixed for two null bytes in the length
        }
        short bytelen = (short)(isMultibyte() ?
            getFooterLength()*2 : getFooterLength() );
        LittleEndian.putShort(data, 0 + offset, sid);
        LittleEndian.putShort(data, 2 + offset,
                              ( short ) ((len - 4) + bytelen ));
        if (getFooterLength() > 0)
        {
            data[ 4 + offset ] = (byte)getFooterLength();
            data[ 6 + offset ] = field_3_unicode_flag;
            if(isMultibyte())
            {
                StringUtil.putUnicodeLE(getFooter(), data, 7 + offset);
            }
            else
            {
                StringUtil.putCompressedUnicode(getFooter(), data, 7 + offset); // [Shawn] Place the string in the correct offset
            }
        }
        return getRecordSize();
    
public voidsetFooter(java.lang.String footer)
set the footer string

param
footer string to display
see
#setFooterLength(byte)

        field_4_footer = footer;
        field_3_unicode_flag = 
            (byte) (StringUtil.hasMultibyte(field_4_footer) ? 1 : 0);
    
public voidsetFooterLength(byte len)
set the length of the footer string

param
len length of the footer string
see
#setFooter(String)

        field_1_footer_len = len;
    
public java.lang.StringtoString()

        StringBuffer buffer = new StringBuffer();

        buffer.append("[FOOTER]\n");
        buffer.append("    .footerlen      = ")
            .append(Integer.toHexString(getFooterLength())).append("\n");
        buffer.append("    .footer         = ").append(getFooter())
            .append("\n");
        buffer.append("[/FOOTER]\n");
        return buffer.toString();
    
protected voidvalidateSid(short id)

        if (id != sid)
        {
            throw new RecordFormatException("NOT A FooterRECORD");
        }