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