poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ye...@apache.org
Subject svn commit: r1299338 - in /poi/trunk/src: documentation/content/xdocs/status.xml ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestReadOnlySharedStringsTable.java
Date Sun, 11 Mar 2012 07:19:08 GMT
Author: yegor
Date: Sun Mar 11 07:19:07 2012
New Revision: 1299338

URL: http://svn.apache.org/viewvc?rev=1299338&view=rev
Log:
Bugzilla 52835 - Tolerate missing Count and UniqueCount attributes when parsing shared strings
table in XSSF eventusermodel

Added:
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestReadOnlySharedStringsTable.java
Modified:
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.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=1299338&r1=1299337&r2=1299338&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Sun Mar 11 07:19:07 2012
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta6" date="2012-??-??">
+           <action dev="poi-developers" type="fix">52835 - Tolerate missing Count and
UniqueCount attributes when parsing shared strings table in XSSF eventusermodel</action>
            <action dev="poi-developers" type="add">52818 - Added implementation for
RANK()</action>
            <action dev="poi-developers" type="fix">52682 - allow setting text with
trailing carriage return in HSLF</action>
            <action dev="poi-developers" type="fix">52244 - use correct text attributes
when presentation has multiple TxMasterStyleAtoms of the same type</action>

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java?rev=1299338&r1=1299337&r2=1299338&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java
(original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java
Sun Mar 11 07:19:07 2012
@@ -19,6 +19,7 @@ package org.apache.poi.xssf.eventusermod
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.List;
 
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
@@ -28,6 +29,7 @@ import org.apache.poi.openxml4j.opc.OPCP
 import org.apache.poi.openxml4j.opc.PackagePart;
 import org.apache.poi.openxml4j.opc.PackageRelationship;
 import org.apache.poi.xssf.usermodel.XSSFRelation;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -91,7 +93,7 @@ public class ReadOnlySharedStringsTable 
     /**
      * The shared strings table.
      */
-    private String[] strings;
+    private List<String> strings;
 
     /**
      * @param pkg
@@ -173,24 +175,28 @@ public class ReadOnlySharedStringsTable 
      * @return the item at the specified position in this Shared String table.
      */
     public String getEntryAt(int idx) {
-        return strings[idx];
+        return strings.get(idx);
+    }
+
+    public List<String> getItems() {
+        return strings;
     }
 
     //// ContentHandler methods ////
 
     private StringBuffer characters;
     private boolean tIsOpen;
-    private int index;
 
     public void startElement(String uri, String localName, String name,
                              Attributes attributes) throws SAXException {
         if ("sst".equals(name)) {
             String count = attributes.getValue("count");
+            if(count != null) this.count = Integer.parseInt(count);
             String uniqueCount = attributes.getValue("uniqueCount");
-            this.count = Integer.parseInt(count);
-            this.uniqueCount = Integer.parseInt(uniqueCount);
-            this.strings = new String[this.uniqueCount];
-            index = 0;
+            if(uniqueCount != null) this.uniqueCount = Integer.parseInt(uniqueCount);
+
+            this.strings = new ArrayList<String>(this.uniqueCount);
+
             characters = new StringBuffer();
         } else if ("si".equals(name)) {
             characters.setLength(0);
@@ -202,8 +208,7 @@ public class ReadOnlySharedStringsTable 
     public void endElement(String uri, String localName, String name)
             throws SAXException {
         if ("si".equals(name)) {
-            strings[index] = characters.toString();              
-            ++index;
+            strings.add(characters.toString());
         } else if ("t".equals(name)) {
            tIsOpen = false;
         }

Added: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestReadOnlySharedStringsTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestReadOnlySharedStringsTable.java?rev=1299338&view=auto
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestReadOnlySharedStringsTable.java
(added)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestReadOnlySharedStringsTable.java
Sun Mar 11 07:19:07 2012
@@ -0,0 +1,58 @@
+/*
+ *  ====================================================================
+ *    Licensed to the Apache Software Foundation (ASF) under one or more
+ *    contributor license agreements.  See the NOTICE file distributed with
+ *    this work for additional information regarding copyright ownership.
+ *    The ASF licenses this file to You under the Apache License, Version 2.0
+ *    (the "License"); you may not use this file except in compliance with
+ *    the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ * ====================================================================
+ */
+
+package org.apache.poi.xssf.eventusermodel;
+
+import junit.framework.TestCase;
+import org.apache.poi.POIDataSamples;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.openxml4j.opc.PackagePart;
+import org.apache.poi.xssf.model.SharedStringsTable;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
+
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * Tests for {@link org.apache.poi.xssf.eventusermodel.XSSFReader}
+ */
+public final class TestReadOnlySharedStringsTable extends TestCase {
+    private static POIDataSamples _ssTests = POIDataSamples.getSpreadSheetInstance();
+
+    public void testParse() throws Exception {
+		OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"));
+        List<PackagePart> parts = pkg.getPartsByName(Pattern.compile("/xl/sharedStrings.xml"));
+        assertEquals(1, parts.size());
+
+        SharedStringsTable stbl = new SharedStringsTable(parts.get(0), null);
+        ReadOnlySharedStringsTable rtbl = new ReadOnlySharedStringsTable(parts.get(0), null);
+
+        assertEquals(stbl.getCount(), rtbl.getCount());
+        assertEquals(stbl.getUniqueCount(), rtbl.getUniqueCount());
+
+        assertEquals(stbl.getItems().size(), stbl.getUniqueCount());
+        assertEquals(rtbl.getItems().size(), rtbl.getUniqueCount());
+        for(int i=0; i < stbl.getUniqueCount(); i++){
+            CTRst i1 = stbl.getEntryAt(i);
+            String i2 = rtbl.getEntryAt(i);
+            assertEquals(i1.getT(), i2);
+        }
+
+	}
+}



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


Mime
View raw message