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