aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java3
-rw-r--r--src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java77
-rw-r--r--src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFGroupShape.java10
-rw-r--r--src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java2
4 files changed, 44 insertions, 48 deletions
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java
index c2fb36f885..9115f0edd2 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java
@@ -144,8 +144,7 @@ public class XSLFGroupShape extends XSLFShape implements XSLFShapeContainer, Gro
}
/**
- *
- * @return child shapes contained witin this group
+ * @return child shapes contained within this group
*/
@Override
public List<XSLFShape> getShapes(){
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java
index fb6ea5446c..62ef3b7ec7 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java
@@ -25,7 +25,6 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-
import javax.xml.namespace.QName;
import org.apache.poi.POIXMLDocumentPart;
@@ -126,57 +125,70 @@ public abstract class XSLFSheet extends POIXMLDocumentPart implements XSLFShapeC
}
private XSLFDrawing getDrawing(){
- if(_drawing == null) {
- _drawing = new XSLFDrawing(this, getSpTree());
- }
+ initDrawingAndShapes();
return _drawing;
}
- private List<XSLFShape> getShapeList(){
- if(_shapes == null){
- _shapes = buildShapes(getSpTree());
- }
+ /**
+ * Returns an array containing all of the shapes in this sheet
+ *
+ * @return an array of all shapes in this sheet
+ */
+ @Override
+ public List<XSLFShape> getShapes(){
+ initDrawingAndShapes();
return _shapes;
}
+
+ /**
+ * Helper method for initializing drawing and shapes in one go.
+ * If they are initialized separately, there's a risk that shapes
+ * get added twice, e.g. a shape is added to the drawing, then
+ * buildShapes is called and at last the shape is added to shape list
+ */
+ private void initDrawingAndShapes() {
+ CTGroupShape cgs = getSpTree();
+ if(_drawing == null) {
+ _drawing = new XSLFDrawing(this, cgs);
+ }
+ if (_shapes == null) {
+ _shapes = buildShapes(cgs);
+ }
+ }
// shape factory methods
public XSLFAutoShape createAutoShape(){
- List<XSLFShape> shapes = getShapeList();
XSLFAutoShape sh = getDrawing().createAutoShape();
- shapes.add(sh);
+ getShapes().add(sh);
sh.setParent(this);
return sh;
}
public XSLFFreeformShape createFreeform(){
- List<XSLFShape> shapes = getShapeList();
XSLFFreeformShape sh = getDrawing().createFreeform();
- shapes.add(sh);
+ getShapes().add(sh);
sh.setParent(this);
return sh;
}
public XSLFTextBox createTextBox(){
- List<XSLFShape> shapes = getShapeList();
XSLFTextBox sh = getDrawing().createTextBox();
- shapes.add(sh);
+ getShapes().add(sh);
sh.setParent(this);
return sh;
}
public XSLFConnectorShape createConnector(){
- List<XSLFShape> shapes = getShapeList();
XSLFConnectorShape sh = getDrawing().createConnector();
- shapes.add(sh);
+ getShapes().add(sh);
sh.setParent(this);
return sh;
}
public XSLFGroupShape createGroup(){
- List<XSLFShape> shapes = getShapeList();
XSLFGroupShape sh = getDrawing().createGroup();
- shapes.add(sh);
+ getShapes().add(sh);
sh.setParent(this);
return sh;
}
@@ -190,36 +202,25 @@ public abstract class XSLFSheet extends POIXMLDocumentPart implements XSLFShapeC
XSLFPictureShape sh = getDrawing().createPicture(rel.getId());
sh.resize();
-
- getShapeList().add(sh);
+ getShapes().add(sh);
sh.setParent(this);
return sh;
}
public XSLFTable createTable(){
- List<XSLFShape> shapes = getShapeList();
XSLFTable sh = getDrawing().createTable();
- shapes.add(sh);
+ getShapes().add(sh);
sh.setParent(this);
return sh;
}
/**
- * Returns an array containing all of the shapes in this sheet
- *
- * @return an array of all shapes in this sheet
- */
- public List<XSLFShape> getShapes(){
- return getShapeList();
- }
-
- /**
* Returns an iterator over the shapes in this sheet
*
* @return an iterator over the shapes in this sheet
*/
public Iterator<XSLFShape> iterator(){
- return getShapeList().iterator();
+ return getShapes().iterator();
}
public void addShape(XSLFShape shape) {
@@ -250,7 +251,7 @@ public abstract class XSLFSheet extends POIXMLDocumentPart implements XSLFShapeC
} else {
throw new IllegalArgumentException("Unsupported shape: " + xShape);
}
- return getShapeList().remove(xShape);
+ return getShapes().remove(xShape);
}
/**
@@ -319,8 +320,8 @@ public abstract class XSLFSheet extends POIXMLDocumentPart implements XSLFShapeC
getSpTree().set(src.getSpTree());
// recursively update each shape
- List<XSLFShape> tgtShapes = getShapeList();
- List<XSLFShape> srcShapes = src.getShapeList();
+ List<XSLFShape> tgtShapes = getShapes();
+ List<XSLFShape> srcShapes = src.getShapes();
for(int i = 0; i < tgtShapes.size(); i++){
XSLFShape s1 = srcShapes.get(i);
XSLFShape s2 = tgtShapes.get(i);
@@ -338,7 +339,7 @@ public abstract class XSLFSheet extends POIXMLDocumentPart implements XSLFShapeC
*/
public XSLFSheet appendContent(XSLFSheet src){
CTGroupShape spTree = getSpTree();
- int numShapes = getShapeList().size();
+ int numShapes = getShapes().size();
CTGroupShape srcTree = src.getSpTree();
for(XmlObject ch : srcTree.selectPath("*")){
@@ -362,8 +363,8 @@ public abstract class XSLFSheet extends POIXMLDocumentPart implements XSLFShapeC
_placeholders = null;
// recursively update each shape
- List<XSLFShape> tgtShapes = getShapeList();
- List<XSLFShape> srcShapes = src.getShapeList();
+ List<XSLFShape> tgtShapes = getShapes();
+ List<XSLFShape> srcShapes = src.getShapes();
for(int i = 0; i < srcShapes.size(); i++){
XSLFShape s1 = srcShapes.get(i);
XSLFShape s2 = tgtShapes.get(numShapes + i);
diff --git a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFGroupShape.java b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFGroupShape.java
index 12c0167ad9..41c08fdaa3 100644
--- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFGroupShape.java
+++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFGroupShape.java
@@ -52,11 +52,6 @@ public class HSLFGroupShape extends HSLFShape implements GroupShape<HSLFShape> {
super(escherRecord, parent);
}
- @Override
- public List<HSLFShape> getShapes() {
- return getShapeList();
- }
-
/**
* Sets the anchor (the bounding box rectangle) of this shape.
* All coordinates should be expressed in Master units (576 dpi).
@@ -238,7 +233,7 @@ public class HSLFGroupShape extends HSLFShape implements GroupShape<HSLFShape> {
}
public Iterator<HSLFShape> iterator() {
- return getShapeList().iterator();
+ return getShapes().iterator();
}
public boolean removeShape(HSLFShape shape) {
@@ -249,7 +244,8 @@ public class HSLFGroupShape extends HSLFShape implements GroupShape<HSLFShape> {
/**
* @return the shapes contained in this group container
*/
- protected List<HSLFShape> getShapeList() {
+ @Override
+ public List<HSLFShape> getShapes() {
// Out escher container record should contain several
// SpContainers, the first of which is the group shape itself
Iterator<EscherRecord> iter = _escherContainer.getChildIterator();
diff --git a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java
index cad0dcd3d2..5cb5698a4f 100644
--- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java
+++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java
@@ -162,7 +162,7 @@ public final class HSLFTable extends HSLFGroupShape implements TableShape {
}
protected void initTable(){
- List<HSLFShape> shapeList = getShapeList();
+ List<HSLFShape> shapeList = getShapes();
Iterator<HSLFShape> shapeIter = shapeList.iterator();
while (shapeIter.hasNext()) {