You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2013/06/14 10:53:29 UTC

svn commit: r1493001 - in /poi/trunk/src: java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java testcases/org/apache/poi/hssf/usermodel/TestEmbeddedObjects.java

Author: nick
Date: Fri Jun 14 08:53:29 2013
New Revision: 1493001

URL: http://svn.apache.org/r1493001
Log:
Patch from Trejkaz from GitHub Pull 2 - HSSFWorkbook.getAllEmbeddedObjects() needs to recurse into container Shapes (with new unit test)

Modified:
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
    poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestEmbeddedObjects.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java?rev=1493001&r1=1493000&r2=1493001&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java Fri Jun 14 08:53:29 2013
@@ -1723,13 +1723,24 @@ public final class HSSFWorkbook extends 
         if (null == patriarch){
             return;
         }
-        for (HSSFShape shape: patriarch.getChildren()){
-            if (shape instanceof HSSFObjectData){
+        getAllEmbeddedObjects(patriarch, objects);
+    }
+    /**
+     * Recursively iterates a shape container to get all embedded objects.
+     * 
+     * @param parent the parent.
+     * @param objects the list of embedded objects to populate.
+     */
+    private void getAllEmbeddedObjects(HSSFShapeContainer parent, List<HSSFObjectData> objects)
+    {
+        for (HSSFShape shape : parent.getChildren()) {
+            if (shape instanceof HSSFObjectData) {
                 objects.add((HSSFObjectData) shape);
+            } else if (shape instanceof HSSFShapeContainer) {
+                getAllEmbeddedObjects((HSSFShapeContainer) shape, objects);
             }
         }
     }
-
     public HSSFCreationHelper getCreationHelper() {
         return new HSSFCreationHelper(this);
     }

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestEmbeddedObjects.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestEmbeddedObjects.java?rev=1493001&r1=1493000&r2=1493001&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestEmbeddedObjects.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestEmbeddedObjects.java Fri Jun 14 08:53:29 2013
@@ -24,11 +24,9 @@ import java.io.IOException;
 import java.util.List;
 
 /**
- * @author Evgeniy Berlog
- * @date 13.07.12
+ * Tests for the embedded object fetching support in HSSF
  */
 public class TestEmbeddedObjects extends TestCase{
-    
     public void testReadExistingObject() throws IOException {
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("drawings.xls");
         List<HSSFObjectData> list = wb.getAllEmbeddedObjects();
@@ -38,4 +36,27 @@ public class TestEmbeddedObjects extends
         assertNotNull(obj.getDirectory());
         assertNotNull(obj.getOLE2ClassName());
     }
+    
+    /**
+     * Need to recurse into the shapes to find this one
+     * See https://github.com/apache/poi/pull/2
+     */
+    public void testReadNestedObject() throws IOException {
+        HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("WithCheckBoxes.xls");
+        List<HSSFObjectData> list = wb.getAllEmbeddedObjects();
+        assertEquals(list.size(), 1);
+        HSSFObjectData obj = list.get(0);
+        assertNotNull(obj.getObjectData());
+        assertNotNull(obj.getOLE2ClassName());
+    }
+    
+    /**
+     * One with large numbers of recursivly embedded resources
+     * See https://github.com/apache/poi/pull/2
+     */
+    public void testReadManyNestedObjects() throws IOException {
+        HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("45538_form_Header.xls");
+        List<HSSFObjectData> list = wb.getAllEmbeddedObjects();
+        assertEquals(list.size(), 40);
+    }
 }



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