]> source.dussan.org Git - poi.git/commitdiff
Patch from Trejkaz from GitHub Pull 2 - HSSFWorkbook.getAllEmbeddedObjects() needs...
authorNick Burch <nick@apache.org>
Fri, 14 Jun 2013 08:53:29 +0000 (08:53 +0000)
committerNick Burch <nick@apache.org>
Fri, 14 Jun 2013 08:53:29 +0000 (08:53 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1493001 13f79535-47bb-0310-9956-ffa450edef68

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

index 9d1873b3c3b8665583c237e1d29c42da1c6fd0bf..4b2bbdb94819b425872d841594c844140bd37036 100644 (file)
@@ -1723,13 +1723,24 @@ public final class HSSFWorkbook extends POIDocument implements org.apache.poi.ss
         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);
     }
index c7d478e4f8ccc4e407a081c6649c38c5df4a3aec..fe04ebb3a138486493740024a3f107a17d2d5119 100644 (file)
@@ -24,11 +24,9 @@ import java.io.IOException;
 import java.util.List;\r
 \r
 /**\r
- * @author Evgeniy Berlog\r
- * @date 13.07.12\r
+ * Tests for the embedded object fetching support in HSSF\r
  */\r
 public class TestEmbeddedObjects extends TestCase{\r
-    \r
     public void testReadExistingObject() throws IOException {\r
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("drawings.xls");\r
         List<HSSFObjectData> list = wb.getAllEmbeddedObjects();\r
@@ -38,4 +36,27 @@ public class TestEmbeddedObjects extends TestCase{
         assertNotNull(obj.getDirectory());\r
         assertNotNull(obj.getOLE2ClassName());\r
     }\r
+    \r
+    /**\r
+     * Need to recurse into the shapes to find this one\r
+     * See https://github.com/apache/poi/pull/2\r
+     */\r
+    public void testReadNestedObject() throws IOException {\r
+        HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("WithCheckBoxes.xls");\r
+        List<HSSFObjectData> list = wb.getAllEmbeddedObjects();\r
+        assertEquals(list.size(), 1);\r
+        HSSFObjectData obj = list.get(0);\r
+        assertNotNull(obj.getObjectData());\r
+        assertNotNull(obj.getOLE2ClassName());\r
+    }\r
+    \r
+    /**\r
+     * One with large numbers of recursivly embedded resources\r
+     * See https://github.com/apache/poi/pull/2\r
+     */\r
+    public void testReadManyNestedObjects() throws IOException {\r
+        HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("45538_form_Header.xls");\r
+        List<HSSFObjectData> list = wb.getAllEmbeddedObjects();\r
+        assertEquals(list.size(), 40);\r
+    }\r
 }\r