You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2011/03/27 12:05:43 UTC
svn commit: r1085900 [1/2] - in /poi/trunk/src:
documentation/content/xdocs/status.xml
java/org/apache/poi/hssf/record/ExtSSTRecord.java
java/org/apache/poi/hssf/record/common/UnicodeString.java
testcases/org/apache/poi/hssf/record/TestExtSSTRecord.java
Author: yegor
Date: Sun Mar 27 10:05:42 2011
New Revision: 1085900
URL: http://svn.apache.org/viewvc?rev=1085900&view=rev
Log:
Support for continued ExtSSTRecords, see Bugzilla 50967
Added:
poi/trunk/src/testcases/org/apache/poi/hssf/record/TestExtSSTRecord.java
- copied, changed from r1085778, poi/trunk/src/testcases/org/apache/poi/hssf/record/TestSSTRecord.java
Modified:
poi/trunk/src/documentation/content/xdocs/status.xml
poi/trunk/src/java/org/apache/poi/hssf/record/ExtSSTRecord.java
poi/trunk/src/java/org/apache/poi/hssf/record/common/UnicodeString.java
Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=1085900&r1=1085899&r2=1085900&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Sun Mar 27 10:05:42 2011
@@ -34,6 +34,7 @@
<changes>
<release version="3.8-beta2" date="2011-??-??">
+ <action dev="poi-developers" type="add">50967 - Support for continued ExtSSTRecords</action>
<action dev="poi-developers" type="add">48968 - Support for HOUR, MINUTE and SECOND date formulas</action>
<action dev="poi-developers" type="add">Added NPOIFS constructors to most POIDocument classes and their extractors, and more widely deprecated the Document(DirectoryNode, POIFSFileSystem) constructor in favour of the more general Document(DirectoryNode) one</action>
<action dev="poi-developers" type="fix">Fixed NPOIFS handling of new and empty Document Nodes</action>
Modified: poi/trunk/src/java/org/apache/poi/hssf/record/ExtSSTRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/ExtSSTRecord.java?rev=1085900&r1=1085899&r2=1085900&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/ExtSSTRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/ExtSSTRecord.java Sun Mar 27 10:05:42 2011
@@ -17,8 +17,12 @@
package org.apache.poi.hssf.record;
+import org.apache.poi.hssf.record.cont.ContinuableRecord;
+import org.apache.poi.hssf.record.cont.ContinuableRecordOutput;
import org.apache.poi.util.LittleEndianOutput;
+import java.util.ArrayList;
+
/**
* Title: Extended Static String Table (0x00FF)<p/>
* Description: This record is used for a quick lookup into the SST record. This
@@ -29,7 +33,7 @@ import org.apache.poi.util.LittleEndianO
* @author Andrew C. Oliver (acoliver at apache dot org)
* @author Jason Height (jheight at apache dot org)
*/
-public final class ExtSSTRecord extends StandardRecord {
+public final class ExtSSTRecord extends ContinuableRecord {
public final static short sid = 0x00FF;
public static final int DEFAULT_BUCKET_SIZE = 8;
//Can't seem to find this documented but from the biffviewer it is clear that
@@ -37,7 +41,7 @@ public final class ExtSSTRecord extends
public static final int MAX_BUCKETS = 128;
- private static final class InfoSubRecord {
+ public static final class InfoSubRecord {
public static final int ENCODED_SIZE = 8;
private int field_1_stream_pos; // stream pointer to the SST record
private int field_2_bucket_sst_offset; // don't really understand this yet.
@@ -85,11 +89,19 @@ public final class ExtSSTRecord extends
public ExtSSTRecord(RecordInputStream in) {
_stringsPerBucket = in.readShort();
+
int nInfos = in.remaining() / InfoSubRecord.ENCODED_SIZE;
- _sstInfos = new InfoSubRecord[nInfos];
- for (int i = 0; i < _sstInfos.length; i++) {
- _sstInfos[i] = new InfoSubRecord(in);
+ ArrayList<InfoSubRecord> lst = new ArrayList<InfoSubRecord>(nInfos);
+
+ while (in.available() > 0) {
+ InfoSubRecord info = new InfoSubRecord(in);
+ lst.add(info);
+
+ if(in.available() == 0 && in.hasNextRecord() && in.getNextSid() == ContinueRecord.sid) {
+ in.nextRecord();
+ }
}
+ _sstInfos = lst.toArray(new InfoSubRecord[lst.size()]);
}
public void setNumStringsPerBucket(short numStrings) {
@@ -120,7 +132,7 @@ public final class ExtSSTRecord extends
return buffer.toString();
}
- public void serialize(LittleEndianOutput out) {
+ public void serialize(ContinuableRecordOutput out) {
out.writeShort(_stringsPerBucket);
for (int k = 0; k < _sstInfos.length; k++) {
_sstInfos[k].serialize(out);
@@ -130,6 +142,10 @@ public final class ExtSSTRecord extends
return 2 + InfoSubRecord.ENCODED_SIZE*_sstInfos.length;
}
+ protected InfoSubRecord[] getInfoSubRecords() {
+ return _sstInfos;
+ }
+
public static final int getNumberOfInfoRecsForStrings(int numStrings) {
int infoRecs = (numStrings / DEFAULT_BUCKET_SIZE);
if ((numStrings % DEFAULT_BUCKET_SIZE) != 0)
Modified: poi/trunk/src/java/org/apache/poi/hssf/record/common/UnicodeString.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/common/UnicodeString.java?rev=1085900&r1=1085899&r2=1085900&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/common/UnicodeString.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/common/UnicodeString.java Sun Mar 27 10:05:42 2011
@@ -147,7 +147,7 @@ public class UnicodeString implements Co
populateEmpty();
return;
}
-
+
// Carry on reading in as normal
short stringDataSize = in.readShort();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org