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

IndexRecord

public class IndexRecord extends Record
Title: Index Record

Description: Occurs right after BOF, tells you where the DBCELL records are for a sheet Important for locating cells

NOT USED IN THIS RELEASE REFERENCE: PG 323 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)

author
Andrew C. Oliver (acoliver at apache dot org)
author
Jason Height (jheight at chariot dot net dot au)
version
2.0-pre

Fields Summary
public static final short
sid
public static final int
DBCELL_CAPACITY
public int
field_1_zero
public int
field_2_first_row
public int
field_3_last_row_add1
public int
field_4_zero
public IntList
field_5_dbcells
Constructors Summary
public IndexRecord()

         // array of offsets to DBCELL records

     
    
    
public IndexRecord(RecordInputStream in)
Constructs an Index record and sets its fields appropriately.

param
id id must be 0x208 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 voidaddDbcell(int cell)

        if (field_5_dbcells == null)
        {
            field_5_dbcells = new IntList();
        }
        field_5_dbcells.add(cell);
    
public java.lang.Objectclone()

      IndexRecord rec = new IndexRecord();
      rec.field_1_zero = field_1_zero;
      rec.field_2_first_row = field_2_first_row;
      rec.field_3_last_row_add1 = field_3_last_row_add1;
      rec.field_4_zero = field_4_zero;
      rec.field_5_dbcells = new IntList();
      rec.field_5_dbcells.addAll(field_5_dbcells);
      return rec;
    
protected voidfillFields(org.apache.poi.hssf.record.RecordInputStream in)

        field_5_dbcells       =
            new IntList(DBCELL_CAPACITY);   // initial capacity of 30
        field_1_zero          = in.readInt();
        field_2_first_row     = in.readInt();
        field_3_last_row_add1 = in.readInt();
        field_4_zero          = in.readInt();
        while(in.remaining() > 0)
        {

            // System.out.println("getting " + k);
            field_5_dbcells.add(in.readInt());
        }
    
public intgetDbcellAt(int cellnum)

        return field_5_dbcells.get(cellnum);
    
public intgetFirstRow()

        return field_2_first_row;
    
public intgetLastRowAdd1()

        return field_3_last_row_add1;
    
public intgetNumDbcells()

        if (field_5_dbcells == null)
        {
            return 0;
        }
        return field_5_dbcells.size();
    
public intgetRecordSize()

        return 20 + (getNumDbcells() * 4);
    
public static intgetRecordSizeForBlockCount(int blockCount)
Returns the size of an INdexRecord when it needs to index the specified number of blocks

       return 20 + (4 * blockCount);
     
public shortgetSid()

        return sid;
    
public intserialize(int offset, byte[] data)

        LittleEndian.putShort(data, 0 + offset, sid);
        LittleEndian.putShort(data, 2 + offset,
                              ( short ) (16 + (getNumDbcells() * 4)));
        LittleEndian.putInt(data, 4 + offset, 0);
        LittleEndian.putInt(data, 8 + offset, getFirstRow());
        LittleEndian.putInt(data, 12 + offset, getLastRowAdd1());
        LittleEndian.putInt(data, 16 + offset, 0);
        for (int k = 0; k < getNumDbcells(); k++)
        {
            LittleEndian.putInt(data, (k * 4) + 20 + offset, getDbcellAt(k));
        }
        return getRecordSize();
    
public voidsetDbcell(int cell, int value)

        field_5_dbcells.set(cell, value);
    
public voidsetFirstRow(int row)

        field_2_first_row = row;
    
public voidsetLastRowAdd1(int row)

        field_3_last_row_add1 = row;
    
public java.lang.StringtoString()

        StringBuffer buffer = new StringBuffer();

        buffer.append("[INDEX]\n");
        buffer.append("    .firstrow       = ")
            .append(Integer.toHexString(getFirstRow())).append("\n");
        buffer.append("    .lastrowadd1    = ")
            .append(Integer.toHexString(getLastRowAdd1())).append("\n");
        for (int k = 0; k < getNumDbcells(); k++)
        {
            buffer.append("    .dbcell_" + k + "       = ")
                .append(Integer.toHexString(getDbcellAt(k))).append("\n");
        }
        buffer.append("[/INDEX]\n");
        return buffer.toString();
    
protected voidvalidateSid(short id)

        if (id != sid)
        {
            throw new RecordFormatException("NOT An Index RECORD");
        }