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 920cf8bea..2ad699b40 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java @@ -25,7 +25,6 @@ import org.apache.poi.openxml4j.opc.TargetMode; import org.apache.poi.util.Beta; import org.apache.poi.util.Units; import org.apache.xmlbeans.XmlObject; -import org.openxmlformats.schemas.drawingml.x2006.main.CTBlip; import org.openxmlformats.schemas.drawingml.x2006.main.CTGroupShapeProperties; import org.openxmlformats.schemas.drawingml.x2006.main.CTGroupTransform2D; import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps; @@ -34,12 +33,12 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D; import org.openxmlformats.schemas.presentationml.x2006.main.CTConnector; import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape; import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShapeNonVisual; -import org.openxmlformats.schemas.presentationml.x2006.main.CTPicture; import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; +import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; @@ -49,7 +48,7 @@ import java.util.regex.Pattern; * @author Yegor Kozlov */ @Beta -public class XSLFGroupShape extends XSLFShape { +public class XSLFGroupShape extends XSLFShape implements XSLFShapeContainer { private final CTGroupShape _shape; private final XSLFSheet _sheet; private final List _shapes; @@ -145,6 +144,15 @@ public class XSLFGroupShape extends XSLFShape { return _shapes.toArray(new XSLFShape[_shapes.size()]); } + /** + * Returns an iterator over the shapes in this sheet + * + * @return an iterator over the shapes in this sheet + */ + public Iterator iterator(){ + return _shapes.iterator(); + } + /** * Remove the specified shape from this group */ @@ -325,4 +333,14 @@ public class XSLFGroupShape extends XSLFShape { } } + /** + * Removes all of the elements from this container (optional operation). + * The container will be empty after this call returns. + */ + public void clear() { + for(XSLFShape shape : getShapes()){ + removeShape(shape); + } + } + } \ No newline at end of file diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShapeContainer.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShapeContainer.java new file mode 100644 index 000000000..bcb6afbc7 --- /dev/null +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShapeContainer.java @@ -0,0 +1,87 @@ +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ==================================================================== + */ + +package org.apache.poi.xslf.usermodel; + +/** + * Common interface for shape containers, e.g. sheets or groups of shapes + */ +public interface XSLFShapeContainer extends Iterable { + + /** + * create a new shape with a predefined geometry and add it to this shape container + */ + XSLFAutoShape createAutoShape(); + + /** + * create a new shape with a custom geometry + */ + XSLFFreeformShape createFreeform(); + + /** + * create a text box + */ + XSLFTextBox createTextBox(); + + /** + * + * create a connector + */ + XSLFConnectorShape createConnector(); + + /** + * create a group of shapes belonging to this container + */ + XSLFGroupShape createGroup(); + + /** + * create a picture belonging to this container + * + * @param pictureIndex + * @return + */ + XSLFPictureShape createPicture(int pictureIndex); + + /** + * Returns an array containing all of the elements in this container in proper + * sequence (from first to last element). + * + * @return an array containing all of the elements in this container in proper + * sequence + */ + XSLFShape[] getShapes(); + + /** + * Removes the specified shape from this sheet, if it is present + * (optional operation). If this sheet does not contain the element, + * it is unchanged. + * + * @param xShape shape to be removed from this sheet, if present + * @return true if this sheet contained the specified element + * @throws IllegalArgumentException if the type of the specified shape + * is incompatible with this sheet (optional) + */ + boolean removeShape(XSLFShape xShape) ; + + /** + * Removes all of the elements from this container (optional operation). + * The container will be empty after this call returns. + */ + void clear(); +} 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 0c64947b9..63d3e8f37 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java @@ -48,7 +48,7 @@ import java.util.Map; import java.util.regex.Pattern; @Beta -public abstract class XSLFSheet extends POIXMLDocumentPart implements Iterable { +public abstract class XSLFSheet extends POIXMLDocumentPart implements XSLFShapeContainer { private XSLFCommonSlideData _commonSlideData; private XSLFDrawing _drawing; private List _shapes; @@ -241,6 +241,16 @@ public abstract class XSLFSheet extends POIXMLDocumentPart implements Iterable