You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by jh...@apache.org on 2003/09/23 02:35:16 UTC

cvs commit: jakarta-poi/src/java/org/apache/poi/hssf/record ExtSSTInfoSubRecord.java ExtSSTRecord.java LabelRecord.java SSTRecord.java SSTSerializer.java StringRecord.java

jheight     2003/09/22 17:35:16

  Modified:    src/java/org/apache/poi/hssf/record Tag: REL_2_BRANCH
                        ExtSSTInfoSubRecord.java ExtSSTRecord.java
                        LabelRecord.java SSTRecord.java SSTSerializer.java
                        StringRecord.java
  Log:
  Back patched my changes from HEAD
    - Zero length LabelRecord
    - Incorrect offset for LabelRecord
    - ExtSST serializetion (length not calculated correctly)
    - StringRecord is in value section
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.2.2.2   +0 -1      jakarta-poi/src/java/org/apache/poi/hssf/record/ExtSSTInfoSubRecord.java
  
  Index: ExtSSTInfoSubRecord.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/ExtSSTInfoSubRecord.java,v
  retrieving revision 1.2.2.1
  retrieving revision 1.2.2.2
  diff -u -r1.2.2.1 -r1.2.2.2
  --- ExtSSTInfoSubRecord.java	26 Jun 2003 12:33:35 -0000	1.2.2.1
  +++ ExtSSTInfoSubRecord.java	23 Sep 2003 00:35:16 -0000	1.2.2.2
  @@ -65,7 +65,6 @@
   /**
    * Extended SST table info subrecord<P>
    * contains the elements of "info" in the SST's array field<P>
  - * WE HAVE VERY LITTLE INFORMATION ON HOW TO IMPLEMENT THIS RECORD! (EXTSSST)<P>
    * @author Andrew C. Oliver (acoliver at apache dot org)
    * @version 2.0-pre
    * @see org.apache.poi.hssf.record.ExtSSTRecord
  
  
  
  1.3.2.2   +12 -13    jakarta-poi/src/java/org/apache/poi/hssf/record/ExtSSTRecord.java
  
  Index: ExtSSTRecord.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/ExtSSTRecord.java,v
  retrieving revision 1.3.2.1
  retrieving revision 1.3.2.2
  diff -u -r1.3.2.1 -r1.3.2.2
  --- ExtSSTRecord.java	26 Jun 2003 12:33:35 -0000	1.3.2.1
  +++ ExtSSTRecord.java	23 Sep 2003 00:35:16 -0000	1.3.2.2
  @@ -61,13 +61,13 @@
   
   /**
    * Title:        Extended Static String Table<P>
  - * Description:  I really don't understand this thing... its supposed to be "a hash
  - *               table for optimizing external copy operations"  --
  - *<P>
  - *               This sounds like a job for Marc "BitMaster" Johnson aka the
  - *               "Hawaiian Master Chef".<P>
  + * Description: This record is used for a quick lookup into the SST record. This
  + *              record breaks the SST table into a set of buckets. The offsets
  + *              to these buckets within the SST record are kept as well as the
  + *              position relative to the start of the SST record.
    * REFERENCE:  PG 313 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P>
    * @author Andrew C. Oliver (acoliver at apache dot org)
  + * @author Jason Height (jheight at apache dot org)
    * @version 2.0-pre
    * @see org.apache.poi.hssf.record.ExtSSTInfoSubRecord
    */
  @@ -75,8 +75,9 @@
   public class ExtSSTRecord
       extends Record
   {
  +    public static final int DEFAULT_BUCKET_SIZE = 8;
       public final static short sid = 0xff;
  -    private short             field_1_strings_per_bucket;
  +    private short             field_1_strings_per_bucket = DEFAULT_BUCKET_SIZE;
       private ArrayList         field_2_sst_info;
   
   
  @@ -120,12 +121,11 @@
           }
       }
   
  -    // this probably doesn't work but we don't really care at this point
       protected void fillFields(byte [] data, short size, int offset)
       {
           field_2_sst_info           = new ArrayList();
           field_1_strings_per_bucket = LittleEndian.getShort(data, 0 + offset);
  -        for (int k = 2; k < ((data.length - offset) - size); k += 8)
  +        for (int k = 2; k < (size-offset); k += 8)
           {
               byte[] tempdata = new byte[ 8 + offset ];
   
  @@ -196,16 +196,15 @@
   
           for (int k = 0; k < getNumInfoRecords(); k++)
           {
  -            System.arraycopy(getInfoRecordAt(k).serialize(), 0, data,
  -                             pos + offset, 8);
  -            pos += getInfoRecordAt(k).getRecordSize();
  +            ExtSSTInfoSubRecord rec = getInfoRecordAt(k);
  +            pos += rec.serialize(pos + offset, data);
           }
  -        return getRecordSize();
  +        return pos;
       }
   
       public int getRecordSize()
       {
  -        return 4 + 2 + field_2_sst_info.size() * 8;
  +        return 6 + 8*getNumInfoRecords();
       }
   
       public short getSid()
  
  
  
  1.6.2.1   +28 -6     jakarta-poi/src/java/org/apache/poi/hssf/record/LabelRecord.java
  
  Index: LabelRecord.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/LabelRecord.java,v
  retrieving revision 1.6
  retrieving revision 1.6.2.1
  diff -u -r1.6 -r1.6.2.1
  --- LabelRecord.java	30 Apr 2003 04:38:47 -0000	1.6
  +++ LabelRecord.java	23 Sep 2003 00:35:16 -0000	1.6.2.1
  @@ -150,15 +150,16 @@
           field_3_xf_index     = LittleEndian.getShort(data, 4 + offset);
           field_4_string_len   = LittleEndian.getShort(data, 6 + offset);
           field_5_unicode_flag = data[ 8 + offset ];
  -        if (isUnCompressedUnicode())
  -        {
  -            field_6_value = StringUtil.getFromUnicode(data, 8 + offset,
  +        if (field_4_string_len > 0) {
  +          if (isUnCompressedUnicode()) {
  +            field_6_value = StringUtil.getFromUnicode(data, 9 + offset,
                                                         field_4_string_len);
           }
  -        else
  -        {
  -            field_6_value = StringUtil.getFromCompressedUnicode(data, 9 + offset, getStringLength());
  +          else {
  +            field_6_value = StringUtil.getFromCompressedUnicode(data, 9 + offset,
  +                getStringLength());
           }
  +        } else field_6_value = null;
       }
   
   /* READ ONLY ACCESS... THIS IS FOR COMPATIBILITY ONLY...USE LABELSST!
  @@ -236,6 +237,27 @@
       {
           return this.sid;
       }
  +
  +    public String toString()
  +    {
  +        StringBuffer buffer = new StringBuffer();
  +        buffer.append("[LABEL]\n");
  +        buffer.append("    .row            = ")
  +            .append(Integer.toHexString(getRow())).append("\n");
  +        buffer.append("    .column         = ")
  +            .append(Integer.toHexString(getColumn())).append("\n");
  +        buffer.append("    .xfindex        = ")
  +            .append(Integer.toHexString(getXFIndex())).append("\n");
  +        buffer.append("    .string_len       = ")
  +            .append(Integer.toHexString(field_4_string_len)).append("\n");
  +        buffer.append("    .unicode_flag       = ")
  +            .append(Integer.toHexString(field_5_unicode_flag)).append("\n");
  +        buffer.append("    .value       = ")
  +            .append(getValue()).append("\n");
  +        buffer.append("[/LABEL]\n");
  +        return buffer.toString();
  +    }
  +
   
       public boolean isBefore(CellValueRecordInterface i)
       {
  
  
  
  1.7.2.2   +4 -1      jakarta-poi/src/java/org/apache/poi/hssf/record/SSTRecord.java
  
  Index: SSTRecord.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/SSTRecord.java,v
  retrieving revision 1.7.2.1
  retrieving revision 1.7.2.2
  diff -u -r1.7.2.1 -r1.7.2.2
  --- SSTRecord.java	26 Jun 2003 12:33:35 -0000	1.7.2.1
  +++ SSTRecord.java	23 Sep 2003 00:35:16 -0000	1.7.2.2
  @@ -586,7 +586,10 @@
        */
       public int calcExtSSTRecordSize()
       {
  -        return 4 + 2 + ((field_3_strings.size() / SSTSerializer.DEFAULT_BUCKET_SIZE) + 1) * 8;
  +        int infoRecs = (field_3_strings.size() / SSTSerializer.DEFAULT_BUCKET_SIZE);
  +        if ((field_3_strings.size() % SSTSerializer.DEFAULT_BUCKET_SIZE) != 0)
  +          infoRecs ++;
  +        return 4 + 2 + (infoRecs * 8);
       }
   }
   
  
  
  
  1.6.2.2   +5 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/SSTSerializer.java
  
  Index: SSTSerializer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/SSTSerializer.java,v
  retrieving revision 1.6.2.1
  retrieving revision 1.6.2.2
  diff -u -r1.6.2.1 -r1.6.2.2
  --- SSTSerializer.java	26 Jun 2003 12:33:35 -0000	1.6.2.1
  +++ SSTSerializer.java	23 Sep 2003 00:35:16 -0000	1.6.2.2
  @@ -93,8 +93,11 @@
           this.numUniqueStrings = numUniqueStrings;
           this.sstRecordHeader = new SSTRecordHeader( numStrings, numUniqueStrings );
   
  -        this.bucketAbsoluteOffsets = new int[strings.size()/DEFAULT_BUCKET_SIZE+1];
  -        this.bucketRelativeOffsets = new int[strings.size()/DEFAULT_BUCKET_SIZE+1];
  +        int infoRecs = (strings.size() / SSTSerializer.DEFAULT_BUCKET_SIZE);
  +        if ((strings.size() % SSTSerializer.DEFAULT_BUCKET_SIZE) != 0)
  +          infoRecs ++;
  +        this.bucketAbsoluteOffsets = new int[infoRecs];
  +        this.bucketRelativeOffsets = new int[infoRecs];
       }
   
       /**
  
  
  
  1.5.2.1   +5 -0      jakarta-poi/src/java/org/apache/poi/hssf/record/StringRecord.java
  
  Index: StringRecord.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/StringRecord.java,v
  retrieving revision 1.5
  retrieving revision 1.5.2.1
  diff -u -r1.5 -r1.5.2.1
  --- StringRecord.java	30 Apr 2003 04:38:48 -0000	1.5
  +++ StringRecord.java	23 Sep 2003 00:35:16 -0000	1.5.2.1
  @@ -138,6 +138,11 @@
           }
       }
   
  +    public boolean isInValueSection()
  +    {
  +        return true;
  +    }
  +
       private int getStringLength()
       {
           return field_1_string_length;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: poi-dev-help@jakarta.apache.org