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

HeaderRecord

public class HeaderRecord extends Record
Title: Header Record

Description: Specifies a header for a sheet

REFERENCE: PG 321 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_header_len
private byte
field_2_reserved
private byte
field_3_unicode_flag
private String
field_4_header
Constructors Summary
public HeaderRecord()


     
    
    
public HeaderRecord(RecordInputStream in)
Constructs an Header record and sets its fields appropriately.

param
id id must be 0x14 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()

      HeaderRecord rec = new HeaderRecord();
      rec.field_1_header_len = field_1_header_len;
      rec.field_2_reserved = field_2_reserved;
      rec.field_3_unicode_flag = field_3_unicode_flag;
      rec.field_4_header = field_4_header;
      return rec;
    
protected voidfillFields(org.apache.poi.hssf.record.RecordInputStream in)

        if (in.remaining() > 0)
        {
            field_1_header_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_header = in.readUnicodeLEString(LittleEndian.ubyteToInt( field_1_header_len));
                         }
                         else
                         {
                field_4_header = in.readCompressedUnicode(LittleEndian.ubyteToInt( field_1_header_len));
                         }
        }
    
public java.lang.StringgetHeader()
get the header string

return
header string to display
see
#getHeaderLength()

        return field_4_header;
    
public shortgetHeaderLength()
get the length of the header string

return
length of the header string
see
#getHeader()

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

        int retval = 4;

        if (getHeaderLength() != 0)
        {
            retval+=3; // [Shawn] Fixed for two null bytes in the length
        }
       return (isMultibyte() ? 
            (retval + getHeaderLength()*2) : (retval + getHeaderLength()));
    
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 (getHeaderLength() != 0)
        {
            len+=3; // [Shawn] Fixed for two null bytes in the length
        }
        short bytelen = (short)(isMultibyte() ?
            getHeaderLength()*2 : getHeaderLength() );
        LittleEndian.putShort(data, 0 + offset, sid);
        LittleEndian.putShort(data, 2 + offset,
                              ( short ) ((len - 4) + bytelen));

        if (getHeaderLength() > 0)
        {
            data[ 4 + offset ] = (byte)getHeaderLength();
            data[ 6 + offset ] = field_3_unicode_flag;
            if(isMultibyte())
            {
                StringUtil.putUnicodeLE(getHeader(), data, 7 + offset);
            }
            else
            {
                StringUtil.putCompressedUnicode(getHeader(), data, 7 + offset); // [Shawn] Place the string in the correct offset
            }
        }
        return getRecordSize();
    
public voidsetHeader(java.lang.String header)
set the header string

param
header string to display
see
#setHeaderLength(byte)

        field_4_header = header;
        field_3_unicode_flag = 
            (byte) (StringUtil.hasMultibyte(field_4_header) ? 1 : 0);
    
public voidsetHeaderLength(byte len)
set the length of the header string

param
len length of the header string
see
#setHeader(String)

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

        StringBuffer buffer = new StringBuffer();

        buffer.append("[HEADER]\n");
        buffer.append("    .length         = ").append(getHeaderLength())
            .append("\n");
        buffer.append("    .header         = ").append(getHeader())
            .append("\n");
        buffer.append("[/HEADER]\n");
        return buffer.toString();
    
protected voidvalidateSid(short id)

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