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-unsubscr...@poi.apache.org For additional commands, e-mail: commits-h...@poi.apache.org