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