You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ab...@apache.org on 2018/08/26 21:33:16 UTC
svn commit: r1839259 [1/2] - in /poi/trunk: ./
src/ooxml/java/org/apache/poi/xslf/usermodel/
src/ooxml/java/org/apache/poi/xssf/usermodel/
src/ooxml/testcases/org/apache/poi/xddf/usermodel/text/
src/ooxml/testcases/org/apache/poi/xslf/usermodel/ src/oo...
Author: abearez
Date: Sun Aug 26 21:33:16 2018
New Revision: 1839259
URL: http://svn.apache.org/viewvc?rev=1839259&view=rev
Log:
test integration of XDDF text entities
Added:
poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/text/
poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/text/TestXDDFTextBodyProperties.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/text/TestXDDFTextRun.java
Modified:
poi/trunk/build.xml
poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java
poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableCell.java
poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextBox.java
poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFShapeGroup.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSimpleShape.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSimpleShape.java
Modified: poi/trunk/build.xml
URL: http://svn.apache.org/viewvc/poi/trunk/build.xml?rev=1839259&r1=1839258&r2=1839259&view=diff
==============================================================================
--- poi/trunk/build.xml (original)
+++ poi/trunk/build.xml Sun Aug 26 21:33:16 2018
@@ -1152,10 +1152,8 @@ under the License.
<target name="retest-ooxml" depends="jar">
<delete dir="${ooxml.reports.test}"/>
- <delete dir="${ooxml.output.test}"/>
<delete dir="${ooxml.output.test.dir}"/>
<mkdir dir="${ooxml.reports.test}"/>
- <mkdir dir="${ooxml.output.test}"/>
<mkdir dir="${ooxml.output.test.dir}"/>
<!-- compile the sources -->
<javac target="${jdk.version.class}"
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java?rev=1839259&r1=1839258&r2=1839259&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java Sun Aug 26 21:33:16 2018
@@ -21,34 +21,28 @@ package org.apache.poi.xslf.usermodel;
import org.apache.poi.sl.usermodel.AutoShape;
import org.apache.poi.util.Beta;
+import org.apache.poi.xddf.usermodel.text.XDDFTextBody;
import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;
import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetGeometry2D;
import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBodyProperties;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharacterProperties;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph;
import org.openxmlformats.schemas.drawingml.x2006.main.STShapeType;
-import org.openxmlformats.schemas.drawingml.x2006.main.STTextAlignType;
-import org.openxmlformats.schemas.drawingml.x2006.main.STTextAnchoringType;
import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;
import org.openxmlformats.schemas.presentationml.x2006.main.CTShapeNonVisual;
-
/**
* Represents a shape with a preset geometry.
*
* @author Yegor Kozlov
*/
@Beta
-public class XSLFAutoShape extends XSLFTextShape
- implements AutoShape<XSLFShape,XSLFTextParagraph> {
+public class XSLFAutoShape extends XSLFTextShape implements AutoShape<XSLFShape, XSLFTextParagraph> {
- /*package*/ XSLFAutoShape(CTShape shape, XSLFSheet sheet) {
+ /* package */ XSLFAutoShape(CTShape shape, XSLFSheet sheet) {
super(shape, sheet);
}
- /*package*/
+ /* package */
static XSLFAutoShape create(CTShape shape, XSLFSheet sheet) {
if (shape.getSpPr().isSetCustGeom()) {
return new XSLFFreeformShape(shape, sheet);
@@ -60,7 +54,8 @@ public class XSLFAutoShape extends XSLFT
}
/**
- * @param shapeId 1-based shapeId
+ * @param shapeId
+ * 1-based shapeId
*/
static CTShape prototype(int shapeId) {
CTShape ct = CTShape.Factory.newInstance();
@@ -76,22 +71,10 @@ public class XSLFAutoShape extends XSLFT
prst.addNewAvLst();
return ct;
}
-
- protected static void initTextBody(CTTextBody txBody) {
- CTTextBodyProperties bodypr = txBody.addNewBodyPr();
- bodypr.setAnchor(STTextAnchoringType.T);
- bodypr.setRtlCol(false);
- CTTextParagraph p = txBody.addNewP();
- p.addNewPPr().setAlgn(STTextAlignType.L);
- CTTextCharacterProperties endPr = p.addNewEndParaRPr();
- endPr.setLang("en-US");
- endPr.setSz(1100);
- p.addNewR().setT("");
- txBody.addNewLstStyle();
- }
- protected CTTextBody getTextBody(boolean create){
- CTShape shape = (CTShape)getXmlObject();
+ @Override
+ protected CTTextBody getTextBody(boolean create) {
+ CTShape shape = (CTShape) getXmlObject();
CTTextBody txBody = shape.getTxBody();
if (txBody == null && create) {
txBody = shape.addNewTxBody();
@@ -101,7 +84,7 @@ public class XSLFAutoShape extends XSLFT
}
@Override
- public String toString(){
+ public String toString() {
return "[" + getClass().getSimpleName() + "] " + getShapeName();
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableCell.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableCell.java?rev=1839259&r1=1839258&r2=1839259&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableCell.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableCell.java Sun Aug 26 21:33:16 2018
@@ -33,6 +33,7 @@ import org.apache.poi.sl.usermodel.Strok
import org.apache.poi.sl.usermodel.TableCell;
import org.apache.poi.sl.usermodel.VerticalAlignment;
import org.apache.poi.util.Units;
+import org.apache.poi.xddf.usermodel.text.XDDFTextBody;
import org.apache.poi.xslf.usermodel.XSLFPropertiesDelegate.XSLFFillProperties;
import org.apache.poi.xslf.usermodel.XSLFTableStyle.TablePartStyle;
import org.apache.xmlbeans.XmlObject;
@@ -67,7 +68,7 @@ import org.openxmlformats.schemas.drawin
/**
* Represents a cell of a table in a .pptx presentation
*/
-public class XSLFTableCell extends XSLFTextShape implements TableCell<XSLFShape,XSLFTextParagraph> {
+public class XSLFTableCell extends XSLFTextShape implements TableCell<XSLFShape, XSLFTextParagraph> {
private CTTableCellProperties _tcPr;
private final XSLFTable table;
private int row, col;
@@ -77,18 +78,20 @@ public class XSLFTableCell extends XSLFT
*/
private Rectangle2D anchor;
- /*package*/ XSLFTableCell(CTTableCell cell, XSLFTable table){
+ /* package */ XSLFTableCell(CTTableCell cell, XSLFTable table) {
super(cell, table.getSheet());
this.table = table;
}
@Override
- protected CTTextBody getTextBody(boolean create){
+ protected CTTextBody getTextBody(boolean create) {
CTTableCell cell = getCell();
CTTextBody txBody = cell.getTxBody();
if (txBody == null && create) {
- txBody = cell.addNewTxBody();
- XSLFAutoShape.initTextBody(txBody);
+ XDDFTextBody body = new XDDFTextBody(this);
+ initTextBody(body);
+ cell.setTxBody(body.getXmlObject());
+ txBody = cell.getTxBody();
}
return txBody;
}
@@ -116,25 +119,25 @@ public class XSLFTableCell extends XSLFT
}
@Override
- public void setLeftInset(double margin){
+ public void setLeftInset(double margin) {
CTTableCellProperties pr = getCellProperties(true);
pr.setMarL(Units.toEMU(margin));
}
@Override
- public void setRightInset(double margin){
+ public void setRightInset(double margin) {
CTTableCellProperties pr = getCellProperties(true);
pr.setMarR(Units.toEMU(margin));
}
@Override
- public void setTopInset(double margin){
+ public void setTopInset(double margin) {
CTTableCellProperties pr = getCellProperties(true);
pr.setMarT(Units.toEMU(margin));
}
@Override
- public void setBottomInset(double margin){
+ public void setBottomInset(double margin) {
CTTableCellProperties pr = getCellProperties(true);
pr.setMarB(Units.toEMU(margin));
}
@@ -150,16 +153,16 @@ public class XSLFTableCell extends XSLFT
}
switch (edge) {
- case bottom:
- return (pr.isSetLnB()) ? pr.getLnB() : (create ? pr.addNewLnB() : null);
- case left:
- return (pr.isSetLnL()) ? pr.getLnL() : (create ? pr.addNewLnL() : null);
- case top:
- return (pr.isSetLnT()) ? pr.getLnT() : (create ? pr.addNewLnT() : null);
- case right:
- return (pr.isSetLnR()) ? pr.getLnR() : (create ? pr.addNewLnR() : null);
- default:
- return null;
+ case bottom:
+ return (pr.isSetLnB()) ? pr.getLnB() : (create ? pr.addNewLnB() : null);
+ case left:
+ return (pr.isSetLnL()) ? pr.getLnL() : (create ? pr.addNewLnL() : null);
+ case top:
+ return (pr.isSetLnT()) ? pr.getLnT() : (create ? pr.addNewLnT() : null);
+ case right:
+ return (pr.isSetLnR()) ? pr.getLnR() : (create ? pr.addNewLnR() : null);
+ default:
+ return null;
}
}
@@ -170,28 +173,28 @@ public class XSLFTableCell extends XSLFT
return;
}
switch (edge) {
- case bottom:
- if (pr.isSetLnB()) {
- pr.unsetLnB();
- }
- break;
- case left:
- if (pr.isSetLnL()) {
- pr.unsetLnL();
- }
- break;
- case top:
- if (pr.isSetLnT()) {
- pr.unsetLnT();
- }
- break;
- case right:
- if (pr.isSetLnR()) {
- pr.unsetLnB();
- }
- break;
- default:
- throw new IllegalArgumentException();
+ case bottom:
+ if (pr.isSetLnB()) {
+ pr.unsetLnB();
+ }
+ break;
+ case left:
+ if (pr.isSetLnL()) {
+ pr.unsetLnL();
+ }
+ break;
+ case top:
+ if (pr.isSetLnT()) {
+ pr.unsetLnT();
+ }
+ break;
+ case right:
+ if (pr.isSetLnR()) {
+ pr.unsetLnB();
+ }
+ break;
+ default:
+ throw new IllegalArgumentException();
}
}
@@ -276,7 +279,7 @@ public class XSLFTableCell extends XSLFT
ln.unsetNoFill();
}
- if(!ln.isSetPrstDash()) {
+ if (!ln.isSetPrstDash()) {
ln.addNewPrstDash().setVal(STPresetLineDashVal.SOLID);
}
if (!ln.isSetCmpd()) {
@@ -396,19 +399,19 @@ public class XSLFTableCell extends XSLFT
ln.setCap(STLineCap.Enum.forInt(cap.ooxmlId));
}
-
-
/**
- * Specifies a solid color fill. The shape is filled entirely with the specified color.
+ * Specifies a solid color fill. The shape is filled entirely with the
+ * specified color.
*
- * @param color the solid color fill.
- * The value of <code>null</code> unsets the solidFIll attribute from the underlying xml
+ * @param color
+ * the solid color fill. The value of <code>null</code> unsets
+ * the solidFIll attribute from the underlying xml
*/
@Override
public void setFillColor(Color color) {
CTTableCellProperties spPr = getCellProperties(true);
if (color == null) {
- if(spPr.isSetSolidFill()) {
+ if (spPr.isSetSolidFill()) {
spPr.unsetSolidFill();
}
} else {
@@ -423,13 +426,13 @@ public class XSLFTableCell extends XSLFT
* @return solid fill color of null if not set
*/
@Override
- public Color getFillColor(){
+ public Color getFillColor() {
PaintStyle ps = getFillPaint();
if (ps instanceof SolidPaint) {
- ColorStyle cs = ((SolidPaint)ps).getSolidColor();
+ ColorStyle cs = ((SolidPaint) ps).getSolidColor();
return DrawPaint.applyColorTransform(cs);
}
-
+
return null;
}
@@ -465,23 +468,24 @@ public class XSLFTableCell extends XSLFT
} else {
return null;
}
-
+
fp = XSLFPropertiesDelegate.getFillDelegate(props);
- if (fp != null) {
+ if (fp != null) {
PaintStyle paint = XSLFShape.selectPaint(fp, null, slideShow.getPackagePart(), theme, hasPlaceholder);
if (paint != null) {
return paint;
}
}
-
+
return null;
}
/**
* Retrieves the part style depending on the location of this cell
*
- * @param tablePartStyle the part to be returned, usually this is null
- * and only set when used as a helper method
+ * @param tablePartStyle
+ * the part to be returned, usually this is null and only set
+ * when used as a helper method
* @return the table part style
*/
private CTTablePartStyle getTablePartStyle(TablePartStyle tablePartStyle) {
@@ -503,11 +507,11 @@ public class XSLFTableCell extends XSLFT
tps = tablePartStyle;
} else if (row == 0 && firstRow) {
tps = TablePartStyle.firstRow;
- } else if (row == table.getNumberOfRows()-1 && lastRow) {
+ } else if (row == table.getNumberOfRows() - 1 && lastRow) {
tps = TablePartStyle.lastRow;
} else if (col == 0 && firstCol) {
tps = TablePartStyle.firstCol;
- } else if (col == table.getNumberOfColumns()-1 && lastCol) {
+ } else if (col == table.getNumberOfColumns() - 1 && lastCol) {
tps = TablePartStyle.lastCol;
} else {
tps = TablePartStyle.wholeTbl;
@@ -559,28 +563,28 @@ public class XSLFTableCell extends XSLFT
}
@Override
- public void setVerticalAlignment(VerticalAlignment anchor){
- CTTableCellProperties cellProps = getCellProperties(true);
- if(anchor == null) {
- if(cellProps.isSetAnchor()) {
- cellProps.unsetAnchor();
- }
- } else {
- cellProps.setAnchor(STTextAnchoringType.Enum.forInt(anchor.ordinal() + 1));
- }
+ public void setVerticalAlignment(VerticalAlignment anchor) {
+ CTTableCellProperties cellProps = getCellProperties(true);
+ if (anchor == null) {
+ if (cellProps.isSetAnchor()) {
+ cellProps.unsetAnchor();
+ }
+ } else {
+ cellProps.setAnchor(STTextAnchoringType.Enum.forInt(anchor.ordinal() + 1));
+ }
}
@Override
- public VerticalAlignment getVerticalAlignment(){
+ public VerticalAlignment getVerticalAlignment() {
CTTableCellProperties cellProps = getCellProperties(false);
VerticalAlignment align = VerticalAlignment.TOP;
- if(cellProps != null && cellProps.isSetAnchor()) {
+ if (cellProps != null && cellProps.isSetAnchor()) {
int ival = cellProps.getAnchor().intValue();
align = VerticalAlignment.values()[ival - 1];
}
return align;
- }
+ }
/**
* @since POI 3.15-beta2
@@ -588,7 +592,7 @@ public class XSLFTableCell extends XSLFT
@Override
public void setTextDirection(TextDirection orientation) {
CTTableCellProperties cellProps = getCellProperties(true);
- if(orientation == null) {
+ if (orientation == null) {
if (cellProps.isSetVert()) {
cellProps.unsetVert();
}
@@ -629,23 +633,23 @@ public class XSLFTableCell extends XSLFT
}
switch (orientation.intValue()) {
- default:
- case STTextVerticalType.INT_HORZ:
- return TextDirection.HORIZONTAL;
- case STTextVerticalType.INT_VERT:
- case STTextVerticalType.INT_EA_VERT:
- case STTextVerticalType.INT_MONGOLIAN_VERT:
- return TextDirection.VERTICAL;
- case STTextVerticalType.INT_VERT_270:
- return TextDirection.VERTICAL_270;
- case STTextVerticalType.INT_WORD_ART_VERT:
- case STTextVerticalType.INT_WORD_ART_VERT_RTL:
- return TextDirection.STACKED;
+ default:
+ case STTextVerticalType.INT_HORZ:
+ return TextDirection.HORIZONTAL;
+ case STTextVerticalType.INT_VERT:
+ case STTextVerticalType.INT_EA_VERT:
+ case STTextVerticalType.INT_MONGOLIAN_VERT:
+ return TextDirection.VERTICAL;
+ case STTextVerticalType.INT_VERT_270:
+ return TextDirection.VERTICAL_270;
+ case STTextVerticalType.INT_WORD_ART_VERT:
+ case STTextVerticalType.INT_WORD_ART_VERT_RTL:
+ return TextDirection.STACKED;
}
}
private CTTableCell getCell() {
- return (CTTableCell)getXmlObject();
+ return (CTTableCell) getXmlObject();
}
/* package */ void setRowColIndex(int row, int col) {
@@ -669,15 +673,16 @@ public class XSLFTableCell extends XSLFT
}
/**
- * There's no real anchor for table cells - this method is used to temporarily store the location
- * of the cell for a later retrieval, e.g. for rendering
+ * There's no real anchor for table cells - this method is used to
+ * temporarily store the location of the cell for a later retrieval, e.g.
+ * for rendering
*
* @since POI 3.15-beta2
*/
@Override
public void setAnchor(Rectangle2D anchor) {
if (this.anchor == null) {
- this.anchor = (Rectangle2D)anchor.clone();
+ this.anchor = (Rectangle2D) anchor.clone();
} else {
this.anchor.setRect(anchor);
}
@@ -692,7 +697,7 @@ public class XSLFTableCell extends XSLFT
table.updateCellAnchor();
}
// anchor should be set, after updateCellAnchor is through
- assert(anchor != null);
+ assert (anchor != null);
return anchor;
}
@@ -717,7 +722,7 @@ public class XSLFTableCell extends XSLFT
protected XmlObject getShapeProperties() {
return getCellProperties(false);
}
-
+
/**
* @since POI 3.15-beta2
*/
@@ -741,7 +746,7 @@ public class XSLFTableCell extends XSLFT
}
@Override
- public PaintStyle getFontColor(){
+ public PaintStyle getFontColor() {
CTTableStyleTextStyle txStyle = getTextStyle();
if (txStyle == null) {
return super.getFontColor();
@@ -752,7 +757,7 @@ public class XSLFTableCell extends XSLFT
if (fontRef != null) {
phClr = fontRef.getSchemeClr();
}
-
+
XSLFTheme theme = getSheet().getTheme();
final XSLFColor c = new XSLFColor(txStyle, theme, phClr);
return DrawPaint.createSolidPaint(c.getColorStyle());
@@ -777,7 +782,7 @@ public class XSLFTableCell extends XSLFT
return txStyle.isSetI() && txStyle.getI().intValue() == STOnOffStyleType.INT_ON;
}
}
-
+
private CTTableStyleTextStyle getTextStyle() {
CTTablePartStyle tps = getTablePartStyle(null);
if (tps == null || !tps.isSetTcTxStyle()) {
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextBox.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextBox.java?rev=1839259&r1=1839258&r2=1839259&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextBox.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextBox.java Sun Aug 26 21:33:16 2018
@@ -21,27 +21,30 @@ package org.apache.poi.xslf.usermodel;
import org.apache.poi.sl.usermodel.TextBox;
import org.apache.poi.util.Beta;
-import org.openxmlformats.schemas.drawingml.x2006.main.*;
+import org.apache.poi.xddf.usermodel.text.XDDFTextBody;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetGeometry2D;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties;
+import org.openxmlformats.schemas.drawingml.x2006.main.STShapeType;
import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;
import org.openxmlformats.schemas.presentationml.x2006.main.CTShapeNonVisual;
-
/**
* @author Yegor Kozlov
*/
@Beta
-public class XSLFTextBox extends XSLFAutoShape
- implements TextBox<XSLFShape,XSLFTextParagraph> {
+public class XSLFTextBox extends XSLFAutoShape implements TextBox<XSLFShape, XSLFTextParagraph> {
- /*package*/ XSLFTextBox(CTShape shape, XSLFSheet sheet){
+ /* package */ XSLFTextBox(CTShape shape, XSLFSheet sheet) {
super(shape, sheet);
}
/**
*
- * @param shapeId 1-based shapeId
+ * @param shapeId
+ * 1-based shapeId
*/
- static CTShape prototype(int shapeId){
+ static CTShape prototype(int shapeId) {
CTShape ct = CTShape.Factory.newInstance();
CTShapeNonVisual nvSpPr = ct.addNewNvSpPr();
CTNonVisualDrawingProps cnv = nvSpPr.addNewCNvPr();
@@ -53,9 +56,10 @@ public class XSLFTextBox extends XSLFAut
CTPresetGeometry2D prst = spPr.addNewPrstGeom();
prst.setPrst(STShapeType.RECT);
prst.addNewAvLst();
- CTTextBody txBody = ct.addNewTxBody();
- XSLFAutoShape.initTextBody(txBody);
+ XDDFTextBody body = new XDDFTextBody(null);
+ initTextBody(body);
+ ct.setTxBody(body.getXmlObject());
return ct;
}
-}
\ No newline at end of file
+}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java?rev=1839259&r1=1839258&r2=1839259&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java Sun Aug 26 21:33:16 2018
@@ -24,6 +24,8 @@ import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
import org.apache.poi.ooxml.POIXMLException;
import org.apache.poi.sl.draw.DrawFactory;
@@ -34,6 +36,9 @@ import org.apache.poi.sl.usermodel.TextS
import org.apache.poi.sl.usermodel.VerticalAlignment;
import org.apache.poi.util.Beta;
import org.apache.poi.util.Units;
+import org.apache.poi.xddf.usermodel.text.TextContainer;
+import org.apache.poi.xddf.usermodel.text.XDDFTextBody;
+import org.apache.poi.xddf.usermodel.text.XDDFTextParagraph;
import org.apache.poi.xslf.model.PropertyFetcher;
import org.apache.poi.xslf.model.TextBodyPropertyFetcher;
import org.apache.xmlbeans.XmlObject;
@@ -52,10 +57,10 @@ import org.openxmlformats.schemas.drawin
*/
@Beta
public abstract class XSLFTextShape extends XSLFSimpleShape
- implements TextShape<XSLFShape,XSLFTextParagraph> {
+ implements TextContainer, TextShape<XSLFShape, XSLFTextParagraph> {
private final List<XSLFTextParagraph> _paragraphs;
- /*package*/ XSLFTextShape(XmlObject shape, XSLFSheet sheet) {
+ /* package */ XSLFTextShape(XmlObject shape, XSLFSheet sheet) {
super(shape, sheet);
_paragraphs = new ArrayList<>();
@@ -67,8 +72,22 @@ public abstract class XSLFTextShape exte
}
}
+ protected static void initTextBody(XDDFTextBody body) {
+ XDDFTextParagraph p = body.getParagraph(0);
+ p.appendRegularRun("");
+ }
+
+ @Beta
+ public XDDFTextBody getTextBody() {
+ CTTextBody txBody = getTextBody(false);
+ if (txBody == null) {
+ return null;
+ }
+ return new XDDFTextBody(this, txBody);
+ }
+
@Override
- public Iterator<XSLFTextParagraph> iterator(){
+ public Iterator<XSLFTextParagraph> iterator() {
return getTextParagraphs().iterator();
}
@@ -87,7 +106,7 @@ public abstract class XSLFTextShape exte
/**
* unset text from this shape
*/
- public void clearText(){
+ public void clearText() {
_paragraphs.clear();
CTTextBody txBody = getTextBody(true);
txBody.setPArray(null); // remove any existing paragraphs
@@ -95,13 +114,14 @@ public abstract class XSLFTextShape exte
@Override
public XSLFTextRun setText(String text) {
- // calling clearText or setting to a new Array leads to a XmlValueDisconnectedException
+ // calling clearText or setting to a new Array leads to a
+ // XmlValueDisconnectedException
if (!_paragraphs.isEmpty()) {
CTTextBody txBody = getTextBody(false);
int cntPs = txBody.sizeOfPArray();
for (int i = cntPs; i > 1; i--) {
- txBody.removeP(i-1);
- _paragraphs.remove(i-1);
+ txBody.removeP(i - 1);
+ _paragraphs.remove(i - 1);
}
_paragraphs.get(0).clearButKeepProperties();
@@ -127,18 +147,19 @@ public abstract class XSLFTextShape exte
para = null;
} else {
firstPara = !newParagraph;
- para = _paragraphs.get(_paragraphs.size()-1);
+ para = _paragraphs.get(_paragraphs.size() - 1);
CTTextParagraph ctp = para.getXmlObject();
otherPPr = ctp.getPPr();
List<XSLFTextRun> runs = para.getTextRuns();
if (!runs.isEmpty()) {
- XSLFTextRun r0 = runs.get(runs.size()-1);
+ XSLFTextRun r0 = runs.get(runs.size() - 1);
otherRPr = r0.getRPr(false);
if (otherRPr == null) {
otherRPr = ctp.getEndParaRPr();
}
}
- // don't copy endParaRPr to the run in case there aren't any other runs
+ // don't copy endParaRPr to the run in case there aren't any other
+ // runs
// this is the case when setText() was called initially
// otherwise the master style will be overridden/ignored
}
@@ -173,7 +194,7 @@ public abstract class XSLFTextShape exte
firstPara = false;
}
- assert(run != null);
+ assert (run != null);
return run;
}
@@ -203,11 +224,11 @@ public abstract class XSLFTextShape exte
}
@Override
- public void setVerticalAlignment(VerticalAlignment anchor){
+ public void setVerticalAlignment(VerticalAlignment anchor) {
CTTextBodyProperties bodyPr = getTextBodyPr(true);
if (bodyPr != null) {
- if(anchor == null) {
- if(bodyPr.isSetAnchor()) {
+ if (anchor == null) {
+ if (bodyPr.isSetAnchor()) {
bodyPr.unsetAnchor();
}
} else {
@@ -217,11 +238,11 @@ public abstract class XSLFTextShape exte
}
@Override
- public VerticalAlignment getVerticalAlignment(){
- PropertyFetcher<VerticalAlignment> fetcher = new TextBodyPropertyFetcher<VerticalAlignment>(){
+ public VerticalAlignment getVerticalAlignment() {
+ PropertyFetcher<VerticalAlignment> fetcher = new TextBodyPropertyFetcher<VerticalAlignment>() {
@Override
- public boolean fetch(CTTextBodyProperties props){
- if(props.isSetAnchor()){
+ public boolean fetch(CTTextBodyProperties props) {
+ if (props.isSetAnchor()) {
int val = props.getAnchor().intValue();
setValue(VerticalAlignment.values()[val - 1]);
return true;
@@ -234,10 +255,10 @@ public abstract class XSLFTextShape exte
}
@Override
- public void setHorizontalCentered(Boolean isCentered){
+ public void setHorizontalCentered(Boolean isCentered) {
CTTextBodyProperties bodyPr = getTextBodyPr(true);
if (bodyPr != null) {
- if (isCentered == null) {
+ if (isCentered == null) {
if (bodyPr.isSetAnchorCtr()) {
bodyPr.unsetAnchorCtr();
}
@@ -248,11 +269,11 @@ public abstract class XSLFTextShape exte
}
@Override
- public boolean isHorizontalCentered(){
- PropertyFetcher<Boolean> fetcher = new TextBodyPropertyFetcher<Boolean>(){
+ public boolean isHorizontalCentered() {
+ PropertyFetcher<Boolean> fetcher = new TextBodyPropertyFetcher<Boolean>() {
@Override
- public boolean fetch(CTTextBodyProperties props){
- if(props.isSetAnchorCtr()){
+ public boolean fetch(CTTextBodyProperties props) {
+ if (props.isSetAnchorCtr()) {
setValue(props.getAnchorCtr());
return true;
}
@@ -264,11 +285,11 @@ public abstract class XSLFTextShape exte
}
@Override
- public void setTextDirection(TextDirection orientation){
+ public void setTextDirection(TextDirection orientation) {
CTTextBodyProperties bodyPr = getTextBodyPr(true);
if (bodyPr != null) {
- if(orientation == null) {
- if(bodyPr.isSetVert()) {
+ if (orientation == null) {
+ if (bodyPr.isSetVert()) {
bodyPr.unsetVert();
}
} else {
@@ -278,24 +299,24 @@ public abstract class XSLFTextShape exte
}
@Override
- public TextDirection getTextDirection(){
+ public TextDirection getTextDirection() {
CTTextBodyProperties bodyPr = getTextBodyPr();
if (bodyPr != null) {
STTextVerticalType.Enum val = bodyPr.getVert();
- if(val != null) {
+ if (val != null) {
switch (val.intValue()) {
- default:
- case STTextVerticalType.INT_HORZ:
- return TextDirection.HORIZONTAL;
- case STTextVerticalType.INT_EA_VERT:
- case STTextVerticalType.INT_MONGOLIAN_VERT:
- case STTextVerticalType.INT_VERT:
- return TextDirection.VERTICAL;
- case STTextVerticalType.INT_VERT_270:
- return TextDirection.VERTICAL_270;
- case STTextVerticalType.INT_WORD_ART_VERT_RTL:
- case STTextVerticalType.INT_WORD_ART_VERT:
- return TextDirection.STACKED;
+ default:
+ case STTextVerticalType.INT_HORZ:
+ return TextDirection.HORIZONTAL;
+ case STTextVerticalType.INT_EA_VERT:
+ case STTextVerticalType.INT_MONGOLIAN_VERT:
+ case STTextVerticalType.INT_VERT:
+ return TextDirection.VERTICAL;
+ case STTextVerticalType.INT_VERT_270:
+ return TextDirection.VERTICAL_270;
+ case STTextVerticalType.INT_WORD_ART_VERT_RTL:
+ case STTextVerticalType.INT_WORD_ART_VERT:
+ return TextDirection.STACKED;
}
}
}
@@ -315,22 +336,22 @@ public abstract class XSLFTextShape exte
public void setTextRotation(Double rotation) {
CTTextBodyProperties bodyPr = getTextBodyPr(true);
if (bodyPr != null) {
- bodyPr.setRot((int)(rotation * 60000.));
+ bodyPr.setRot((int) (rotation * 60000.));
}
}
-
/**
- * Returns the distance (in points) between the bottom of the text frame
- * and the bottom of the inscribed rectangle of the shape that contains the text.
+ * Returns the distance (in points) between the bottom of the text frame and
+ * the bottom of the inscribed rectangle of the shape that contains the
+ * text.
*
* @return the bottom inset in points
*/
- public double getBottomInset(){
- PropertyFetcher<Double> fetcher = new TextBodyPropertyFetcher<Double>(){
+ public double getBottomInset() {
+ PropertyFetcher<Double> fetcher = new TextBodyPropertyFetcher<Double>() {
@Override
- public boolean fetch(CTTextBodyProperties props){
- if(props.isSetBIns()){
+ public boolean fetch(CTTextBodyProperties props) {
+ if (props.isSetBIns()) {
double val = Units.toPoints(props.getBIns());
setValue(val);
return true;
@@ -344,17 +365,17 @@ public abstract class XSLFTextShape exte
}
/**
- * Returns the distance (in points) between the left edge of the text frame
- * and the left edge of the inscribed rectangle of the shape that contains
- * the text.
+ * Returns the distance (in points) between the left edge of the text frame
+ * and the left edge of the inscribed rectangle of the shape that contains
+ * the text.
*
* @return the left inset in points
*/
- public double getLeftInset(){
- PropertyFetcher<Double> fetcher = new TextBodyPropertyFetcher<Double>(){
+ public double getLeftInset() {
+ PropertyFetcher<Double> fetcher = new TextBodyPropertyFetcher<Double>() {
@Override
- public boolean fetch(CTTextBodyProperties props){
- if(props.isSetLIns()){
+ public boolean fetch(CTTextBodyProperties props) {
+ if (props.isSetLIns()) {
double val = Units.toPoints(props.getLIns());
setValue(val);
return true;
@@ -368,17 +389,17 @@ public abstract class XSLFTextShape exte
}
/**
- * Returns the distance (in points) between the right edge of the
- * text frame and the right edge of the inscribed rectangle of the shape
- * that contains the text.
+ * Returns the distance (in points) between the right edge of the text frame
+ * and the right edge of the inscribed rectangle of the shape that contains
+ * the text.
*
* @return the right inset in points
*/
- public double getRightInset(){
- PropertyFetcher<Double> fetcher = new TextBodyPropertyFetcher<Double>(){
+ public double getRightInset() {
+ PropertyFetcher<Double> fetcher = new TextBodyPropertyFetcher<Double>() {
@Override
- public boolean fetch(CTTextBodyProperties props){
- if(props.isSetRIns()){
+ public boolean fetch(CTTextBodyProperties props) {
+ if (props.isSetRIns()) {
double val = Units.toPoints(props.getRIns());
setValue(val);
return true;
@@ -392,16 +413,16 @@ public abstract class XSLFTextShape exte
}
/**
- * Returns the distance (in points) between the top of the text frame
- * and the top of the inscribed rectangle of the shape that contains the text.
+ * Returns the distance (in points) between the top of the text frame and
+ * the top of the inscribed rectangle of the shape that contains the text.
*
* @return the top inset in points
*/
- public double getTopInset(){
- PropertyFetcher<Double> fetcher = new TextBodyPropertyFetcher<Double>(){
+ public double getTopInset() {
+ PropertyFetcher<Double> fetcher = new TextBodyPropertyFetcher<Double>() {
@Override
- public boolean fetch(CTTextBodyProperties props){
- if(props.isSetTIns()){
+ public boolean fetch(CTTextBodyProperties props) {
+ if (props.isSetTIns()) {
double val = Units.toPoints(props.getTIns());
setValue(val);
return true;
@@ -416,14 +437,16 @@ public abstract class XSLFTextShape exte
/**
* Sets the bottom margin.
+ *
* @see #getBottomInset()
*
- * @param margin the bottom margin
+ * @param margin
+ * the bottom margin
*/
- public void setBottomInset(double margin){
+ public void setBottomInset(double margin) {
CTTextBodyProperties bodyPr = getTextBodyPr(true);
if (bodyPr != null) {
- if(margin == -1) {
+ if (margin == -1) {
bodyPr.unsetBIns();
} else {
bodyPr.setBIns(Units.toEMU(margin));
@@ -433,14 +456,16 @@ public abstract class XSLFTextShape exte
/**
* Sets the left margin.
+ *
* @see #getLeftInset()
*
- * @param margin the left margin
+ * @param margin
+ * the left margin
*/
- public void setLeftInset(double margin){
+ public void setLeftInset(double margin) {
CTTextBodyProperties bodyPr = getTextBodyPr(true);
if (bodyPr != null) {
- if(margin == -1) {
+ if (margin == -1) {
bodyPr.unsetLIns();
} else {
bodyPr.setLIns(Units.toEMU(margin));
@@ -450,14 +475,16 @@ public abstract class XSLFTextShape exte
/**
* Sets the right margin.
+ *
* @see #getRightInset()
*
- * @param margin the right margin
+ * @param margin
+ * the right margin
*/
- public void setRightInset(double margin){
+ public void setRightInset(double margin) {
CTTextBodyProperties bodyPr = getTextBodyPr(true);
if (bodyPr != null) {
- if(margin == -1) {
+ if (margin == -1) {
bodyPr.unsetRIns();
} else {
bodyPr.setRIns(Units.toEMU(margin));
@@ -467,14 +494,16 @@ public abstract class XSLFTextShape exte
/**
* Sets the top margin.
+ *
* @see #getTopInset()
*
- * @param margin the top margin
+ * @param margin
+ * the top margin
*/
- public void setTopInset(double margin){
+ public void setTopInset(double margin) {
CTTextBodyProperties bodyPr = getTextBodyPr(true);
if (bodyPr != null) {
- if(margin == -1) {
+ if (margin == -1) {
bodyPr.unsetTIns();
} else {
bodyPr.setTIns(Units.toEMU(margin));
@@ -496,11 +525,11 @@ public abstract class XSLFTextShape exte
}
@Override
- public boolean getWordWrap(){
- PropertyFetcher<Boolean> fetcher = new TextBodyPropertyFetcher<Boolean>(){
+ public boolean getWordWrap() {
+ PropertyFetcher<Boolean> fetcher = new TextBodyPropertyFetcher<Boolean>() {
@Override
- public boolean fetch(CTTextBodyProperties props){
- if(props.isSetWrap()){
+ public boolean fetch(CTTextBodyProperties props) {
+ if (props.isSetWrap()) {
setValue(props.getWrap() == STTextWrappingType.SQUARE);
return true;
}
@@ -512,7 +541,7 @@ public abstract class XSLFTextShape exte
}
@Override
- public void setWordWrap(boolean wrap){
+ public void setWordWrap(boolean wrap) {
CTTextBodyProperties bodyPr = getTextBodyPr(true);
if (bodyPr != null) {
bodyPr.setWrap(wrap ? STTextWrappingType.SQUARE : STTextWrappingType.NONE);
@@ -521,28 +550,36 @@ public abstract class XSLFTextShape exte
/**
*
- * Specifies that a shape should be auto-fit to fully contain the text described within it.
- * Auto-fitting is when text within a shape is scaled in order to contain all the text inside
+ * Specifies that a shape should be auto-fit to fully contain the text
+ * described within it. Auto-fitting is when text within a shape is scaled
+ * in order to contain all the text inside
*
- * @param value type of autofit
+ * @param value
+ * type of autofit
*/
- public void setTextAutofit(TextAutofit value){
+ public void setTextAutofit(TextAutofit value) {
CTTextBodyProperties bodyPr = getTextBodyPr(true);
if (bodyPr != null) {
- if(bodyPr.isSetSpAutoFit()) {
+ if (bodyPr.isSetSpAutoFit()) {
bodyPr.unsetSpAutoFit();
}
- if(bodyPr.isSetNoAutofit()) {
+ if (bodyPr.isSetNoAutofit()) {
bodyPr.unsetNoAutofit();
}
- if(bodyPr.isSetNormAutofit()) {
+ if (bodyPr.isSetNormAutofit()) {
bodyPr.unsetNormAutofit();
}
- switch(value){
- case NONE: bodyPr.addNewNoAutofit(); break;
- case NORMAL: bodyPr.addNewNormAutofit(); break;
- case SHAPE: bodyPr.addNewSpAutoFit(); break;
+ switch (value) {
+ case NONE:
+ bodyPr.addNewNoAutofit();
+ break;
+ case NORMAL:
+ bodyPr.addNewNormAutofit();
+ break;
+ case SHAPE:
+ bodyPr.addNewSpAutoFit();
+ break;
}
}
}
@@ -551,10 +588,10 @@ public abstract class XSLFTextShape exte
*
* @return type of autofit
*/
- public TextAutofit getTextAutofit(){
+ public TextAutofit getTextAutofit() {
CTTextBodyProperties bodyPr = getTextBodyPr();
if (bodyPr != null) {
- if(bodyPr.isSetNoAutofit()) {
+ if (bodyPr.isSetNoAutofit()) {
return TextAutofit.NONE;
} else if (bodyPr.isSetNormAutofit()) {
return TextAutofit.NORMAL;
@@ -565,7 +602,7 @@ public abstract class XSLFTextShape exte
return TextAutofit.NORMAL;
}
- protected CTTextBodyProperties getTextBodyPr(){
+ protected CTTextBodyProperties getTextBodyPr() {
return getTextBodyPr(false);
}
@@ -588,89 +625,88 @@ public abstract class XSLFTextShape exte
super.setPlaceholder(placeholder);
}
- public Placeholder getTextType(){
+ public Placeholder getTextType() {
return getPlaceholder();
}
@Override
- public double getTextHeight(){
+ public double getTextHeight() {
return getTextHeight(null);
}
-
+
@Override
- public double getTextHeight(Graphics2D graphics){
+ public double getTextHeight(Graphics2D graphics) {
DrawFactory drawFact = DrawFactory.getInstance(graphics);
DrawTextShape dts = drawFact.getDrawable(this);
return dts.getTextHeight(graphics);
}
@Override
- public Rectangle2D resizeToFitText(){
+ public Rectangle2D resizeToFitText() {
return resizeToFitText(null);
}
-
+
@Override
public Rectangle2D resizeToFitText(Graphics2D graphics) {
Rectangle2D anchor = getAnchor();
- if(anchor.getWidth() == 0.) {
+ if (anchor.getWidth() == 0.) {
throw new POIXMLException("Anchor of the shape was not set.");
}
double height = getTextHeight(graphics);
height += 1; // add a pixel to compensate rounding errors
Insets2D insets = getInsets();
- anchor.setRect(anchor.getX(), anchor.getY(), anchor.getWidth(), height+insets.top+insets.bottom);
+ anchor.setRect(anchor.getX(), anchor.getY(), anchor.getWidth(), height + insets.top + insets.bottom);
setAnchor(anchor);
return anchor;
}
-
@Override
- void copy(XSLFShape other){
+ void copy(XSLFShape other) {
super.copy(other);
- XSLFTextShape otherTS = (XSLFTextShape)other;
+ XSLFTextShape otherTS = (XSLFTextShape) other;
CTTextBody otherTB = otherTS.getTextBody(false);
CTTextBody thisTB = getTextBody(true);
if (otherTB == null) {
return;
}
- thisTB.setBodyPr((CTTextBodyProperties)otherTB.getBodyPr().copy());
+ thisTB.setBodyPr((CTTextBodyProperties) otherTB.getBodyPr().copy());
if (thisTB.isSetLstStyle()) {
thisTB.unsetLstStyle();
}
if (otherTB.isSetLstStyle()) {
- thisTB.setLstStyle((CTTextListStyle)otherTB.getLstStyle().copy());
+ thisTB.setLstStyle((CTTextListStyle) otherTB.getLstStyle().copy());
}
boolean srcWordWrap = otherTS.getWordWrap();
- if(srcWordWrap != getWordWrap()){
+ if (srcWordWrap != getWordWrap()) {
setWordWrap(srcWordWrap);
}
double leftInset = otherTS.getLeftInset();
- if(leftInset != getLeftInset()) {
+ if (leftInset != getLeftInset()) {
setLeftInset(leftInset);
}
double rightInset = otherTS.getRightInset();
- if(rightInset != getRightInset()) {
+ if (rightInset != getRightInset()) {
setRightInset(rightInset);
}
double topInset = otherTS.getTopInset();
- if(topInset != getTopInset()) {
+ if (topInset != getTopInset()) {
setTopInset(topInset);
}
double bottomInset = otherTS.getBottomInset();
- if(bottomInset != getBottomInset()) {
+ if (bottomInset != getBottomInset()) {
setBottomInset(bottomInset);
}
VerticalAlignment vAlign = otherTS.getVerticalAlignment();
- if(vAlign != getVerticalAlignment()) {
+ if (vAlign != getVerticalAlignment()) {
setVerticalAlignment(vAlign);
}
@@ -685,26 +721,26 @@ public abstract class XSLFTextShape exte
@Override
public void setTextPlaceholder(TextPlaceholder placeholder) {
switch (placeholder) {
- default:
- case NOTES:
- case HALF_BODY:
- case QUARTER_BODY:
- case BODY:
- setPlaceholder(Placeholder.BODY);
- break;
- case TITLE:
- setPlaceholder(Placeholder.TITLE);
- break;
- case CENTER_BODY:
- setPlaceholder(Placeholder.BODY);
- setHorizontalCentered(true);
- break;
- case CENTER_TITLE:
- setPlaceholder(Placeholder.CENTERED_TITLE);
- break;
- case OTHER:
- setPlaceholder(Placeholder.CONTENT);
- break;
+ default:
+ case NOTES:
+ case HALF_BODY:
+ case QUARTER_BODY:
+ case BODY:
+ setPlaceholder(Placeholder.BODY);
+ break;
+ case TITLE:
+ setPlaceholder(Placeholder.TITLE);
+ break;
+ case CENTER_BODY:
+ setPlaceholder(Placeholder.BODY);
+ setHorizontalCentered(true);
+ break;
+ case CENTER_TITLE:
+ setPlaceholder(Placeholder.CENTERED_TITLE);
+ break;
+ case OTHER:
+ setPlaceholder(Placeholder.CONTENT);
+ break;
}
}
@@ -715,18 +751,23 @@ public abstract class XSLFTextShape exte
return TextPlaceholder.BODY;
}
switch (ph) {
- case BODY: return TextPlaceholder.BODY;
- case TITLE: return TextPlaceholder.TITLE;
- case CENTERED_TITLE: return TextPlaceholder.CENTER_TITLE;
+ case BODY:
+ return TextPlaceholder.BODY;
+ case TITLE:
+ return TextPlaceholder.TITLE;
+ case CENTERED_TITLE:
+ return TextPlaceholder.CENTER_TITLE;
default:
- case CONTENT: return TextPlaceholder.OTHER;
+ case CONTENT:
+ return TextPlaceholder.OTHER;
}
}
/**
* Helper method to allow subclasses to provide their own text paragraph
*
- * @param p the xml reference
+ * @param p
+ * the xml reference
*
* @return a new text paragraph
*
@@ -735,4 +776,19 @@ public abstract class XSLFTextShape exte
protected XSLFTextParagraph newTextParagraph(CTTextParagraph p) {
return new XSLFTextParagraph(p, this);
}
-}
\ No newline at end of file
+
+ @Override
+ public <R> Optional<R> findDefinedParagraphProperty(Function<CTTextParagraphProperties, Boolean> isSet,
+ Function<CTTextParagraphProperties, R> getter) {
+ // TODO Auto-generated method stub
+ return Optional.empty();
+ }
+
+ @Override
+ public <R> Optional<R> findDefinedRunProperty(Function<CTTextCharacterProperties, Boolean> isSet,
+ Function<CTTextCharacterProperties, R> getter) {
+ // TODO Auto-generated method stub
+ return Optional.empty();
+ }
+
+}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java?rev=1839259&r1=1839258&r2=1839259&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java Sun Aug 26 21:33:16 2018
@@ -74,7 +74,7 @@ public final class XSSFChart extends XDD
private XSSFGraphicFrame frame;
@Deprecated
- @Removal(version="4.2")
+ @Removal(version = "4.2")
List<XSSFChartAxis> axis = new ArrayList<>();
/**
@@ -89,7 +89,8 @@ public final class XSSFChart extends XDD
* Construct a SpreadsheetML chart from a package part.
*
* @param part
- * the package part holding the chart data, the content type must be
+ * the package part holding the chart data, the content type must
+ * be
* <code>application/vnd.openxmlformats-officedocument.drawingml.chart+xml</code>
*
* @since POI 3.14-Beta1
@@ -114,7 +115,8 @@ public final class XSSFChart extends XDD
}
/**
- * Construct a new CTChartSpace bean. By default, it's just an empty placeholder for chart objects.
+ * Construct a new CTChartSpace bean. By default, it's just an empty
+ * placeholder for chart objects.
*/
private void createChart() {
CTPlotArea plotArea = getCTPlotArea();
@@ -140,12 +142,15 @@ public final class XSSFChart extends XDD
XmlOptions xmlOptions = new XmlOptions(DEFAULT_XML_OPTIONS);
/*
- * Saved chart space must have the following namespaces set: <c:chartSpace
+ * Saved chart space must have the following namespaces set:
+ * <c:chartSpace
* xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart"
- * xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r=
+ * xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
+ * xmlns:r=
* "http://schemas.openxmlformats.org/officeDocument/2006/relationships">
*/
- xmlOptions.setSaveSyntheticDocumentElement(new QName(CTChartSpace.type.getName().getNamespaceURI(), "chartSpace", "c"));
+ xmlOptions.setSaveSyntheticDocumentElement(
+ new QName(CTChartSpace.type.getName().getNamespaceURI(), "chartSpace", "c"));
PackagePart part = getPackagePart();
try (OutputStream out = part.getOutputStream()) {
@@ -171,76 +176,76 @@ public final class XSSFChart extends XDD
@Override
@Deprecated
- @Removal(version="4.2")
- public XSSFChartDataFactory getChartDataFactory() {
- return XSSFChartDataFactory.getInstance();
- }
+ @Removal(version = "4.2")
+ public XSSFChartDataFactory getChartDataFactory() {
+ return XSSFChartDataFactory.getInstance();
+ }
@Override
@Deprecated
- @Removal(version="4.2")
- public XSSFChart getChartAxisFactory() {
- return this;
- }
+ @Removal(version = "4.2")
+ public XSSFChart getChartAxisFactory() {
+ return this;
+ }
@Override
@Deprecated
- @Removal(version="4.2")
- public void plot(ChartData data, ChartAxis... chartAxis) {
- data.fillChart(this, chartAxis);
- }
+ @Removal(version = "4.2")
+ public void plot(ChartData data, ChartAxis... chartAxis) {
+ data.fillChart(this, chartAxis);
+ }
@Override
@Deprecated
- @Removal(version="4.2")
- public XSSFValueAxis createValueAxis(org.apache.poi.ss.usermodel.charts.AxisPosition pos) {
- long id = axis.size() + 1;
- XSSFValueAxis valueAxis = new XSSFValueAxis(this, id, pos);
- if (axis.size() == 1) {
- ChartAxis ax = axis.get(0);
- ax.crossAxis(valueAxis);
- valueAxis.crossAxis(ax);
- }
- axis.add(valueAxis);
- return valueAxis;
- }
+ @Removal(version = "4.2")
+ public XSSFValueAxis createValueAxis(org.apache.poi.ss.usermodel.charts.AxisPosition pos) {
+ long id = axis.size() + 1;
+ XSSFValueAxis valueAxis = new XSSFValueAxis(this, id, pos);
+ if (axis.size() == 1) {
+ ChartAxis ax = axis.get(0);
+ ax.crossAxis(valueAxis);
+ valueAxis.crossAxis(ax);
+ }
+ axis.add(valueAxis);
+ return valueAxis;
+ }
@Override
@Deprecated
- @Removal(version="4.2")
- public XSSFCategoryAxis createCategoryAxis(org.apache.poi.ss.usermodel.charts.AxisPosition pos) {
- long id = axis.size() + 1;
- XSSFCategoryAxis categoryAxis = new XSSFCategoryAxis(this, id, pos);
- if (axis.size() == 1) {
- ChartAxis ax = axis.get(0);
- ax.crossAxis(categoryAxis);
- categoryAxis.crossAxis(ax);
- }
- axis.add(categoryAxis);
- return categoryAxis;
- }
+ @Removal(version = "4.2")
+ public XSSFCategoryAxis createCategoryAxis(org.apache.poi.ss.usermodel.charts.AxisPosition pos) {
+ long id = axis.size() + 1;
+ XSSFCategoryAxis categoryAxis = new XSSFCategoryAxis(this, id, pos);
+ if (axis.size() == 1) {
+ ChartAxis ax = axis.get(0);
+ ax.crossAxis(categoryAxis);
+ categoryAxis.crossAxis(ax);
+ }
+ axis.add(categoryAxis);
+ return categoryAxis;
+ }
@Override
@Deprecated
- @Removal(version="4.2")
- public XSSFDateAxis createDateAxis(org.apache.poi.ss.usermodel.charts.AxisPosition pos) {
- long id = axis.size() + 1;
- XSSFDateAxis dateAxis = new XSSFDateAxis(this, id, pos);
- if (axis.size() == 1) {
- ChartAxis ax = axis.get(0);
- ax.crossAxis(dateAxis);
- dateAxis.crossAxis(ax);
- }
- axis.add(dateAxis);
- return dateAxis;
- }
+ @Removal(version = "4.2")
+ public XSSFDateAxis createDateAxis(org.apache.poi.ss.usermodel.charts.AxisPosition pos) {
+ long id = axis.size() + 1;
+ XSSFDateAxis dateAxis = new XSSFDateAxis(this, id, pos);
+ if (axis.size() == 1) {
+ ChartAxis ax = axis.get(0);
+ ax.crossAxis(dateAxis);
+ dateAxis.crossAxis(ax);
+ }
+ axis.add(dateAxis);
+ return dateAxis;
+ }
/**
* @deprecated use {@link #getAxes()} instead
*/
@Override
@Deprecated
- @Removal(version="4.2")
+ @Removal(version = "4.2")
public List<? extends XSSFChartAxis> getAxis() {
if (axis.isEmpty() && hasAxis()) {
parseAxis();
@@ -250,56 +255,57 @@ public final class XSSFChart extends XDD
@Override
@Deprecated
- @Removal(version="4.2")
- public XSSFManualLayout getManualLayout() {
- return new XSSFManualLayout(this);
- }
-
- /**
- * Returns the title static text, or null if none is set.
- * Note that a title formula may be set instead.
- * @return static title text, if set
- * @deprecated POI 3.16, use {@link #getTitleText()} instead.
- */
- @Deprecated
- @Removal(version="4.0")
- public XSSFRichTextString getTitle() {
- return getTitleText();
- }
-
- /**
- * Returns the title static text, or null if none is set.
- * Note that a title formula may be set instead.
- * Empty text result is for backward compatibility, and could mean the title text is empty or there is a formula instead.
- * Check for a formula first, falling back on text for cleaner logic.
- * @return static title text if set,
- * null if there is no title,
- * empty string if the title text is empty or the title uses a formula instead
- */
- public XSSFRichTextString getTitleText() {
- if(! chart.isSetTitle()) {
- return null;
- }
-
- // TODO Do properly
- CTTitle title = chart.getTitle();
-
- StringBuilder text = new StringBuilder(64);
- XmlObject[] t = title
- .selectPath("declare namespace a='"+XSSFDrawing.NAMESPACE_A+"' .//a:t");
- for (XmlObject element : t) {
- NodeList kids = element.getDomNode().getChildNodes();
- final int count = kids.getLength();
- for (int n = 0; n < count; n++) {
- Node kid = kids.item(n);
- if (kid instanceof Text) {
- text.append(kid.getNodeValue());
- }
- }
- }
+ @Removal(version = "4.2")
+ public XSSFManualLayout getManualLayout() {
+ return new XSSFManualLayout(this);
+ }
+
+ /**
+ * Returns the title static text, or null if none is set. Note that a title
+ * formula may be set instead.
+ *
+ * @return static title text, if set
+ * @deprecated POI 3.16, use {@link #getTitleText()} instead.
+ */
+ @Deprecated
+ @Removal(version = "4.0")
+ public XSSFRichTextString getTitle() {
+ return getTitleText();
+ }
- return new XSSFRichTextString(text.toString());
- }
+ /**
+ * Returns the title static text, or null if none is set. Note that a title
+ * formula may be set instead. Empty text result is for backward
+ * compatibility, and could mean the title text is empty or there is a
+ * formula instead. Check for a formula first, falling back on text for
+ * cleaner logic.
+ *
+ * @return static title text if set, null if there is no title, empty string
+ * if the title text is empty or the title uses a formula instead
+ */
+ public XSSFRichTextString getTitleText() {
+ if (!chart.isSetTitle()) {
+ return null;
+ }
+
+ // TODO Do properly
+ CTTitle title = chart.getTitle();
+
+ StringBuilder text = new StringBuilder(64);
+ XmlObject[] t = title.selectPath("declare namespace a='" + XSSFDrawing.NAMESPACE_A + "' .//a:t");
+ for (XmlObject element : t) {
+ NodeList kids = element.getDomNode().getChildNodes();
+ final int count = kids.getLength();
+ for (int n = 0; n < count; n++) {
+ Node kid = kids.item(n);
+ if (kid instanceof Text) {
+ text.append(kid.getNodeValue());
+ }
+ }
+ }
+
+ return new XSSFRichTextString(text.toString());
+ }
/**
* Sets the title text as a static string.
@@ -331,7 +337,8 @@ public final class XSSFChart extends XDD
rich = tx.getRich();
} else {
rich = tx.addNewRich();
- rich.addNewBodyPr(); // body properties must exist (but can be empty)
+ rich.addNewBodyPr(); // body properties must exist (but can be
+ // empty)
}
CTTextParagraph para;
@@ -414,21 +421,22 @@ public final class XSSFChart extends XDD
@Override
@Deprecated
- @Removal(version="4.2")
- public XSSFChartLegend getOrCreateLegend() {
- return new XSSFChartLegend(this);
- }
-
- @Deprecated
- @Removal(version="4.2")
- private boolean hasAxis() {
+ @Removal(version = "4.2")
+ public XSSFChartLegend getOrCreateLegend() {
+ return new XSSFChartLegend(this);
+ }
+
+ @Deprecated
+ @Removal(version = "4.2")
+ private boolean hasAxis() {
CTPlotArea ctPlotArea = chart.getPlotArea();
- int totalAxisCount = ctPlotArea.sizeOfValAxArray() + ctPlotArea.sizeOfCatAxArray() + ctPlotArea.sizeOfDateAxArray() + ctPlotArea.sizeOfSerAxArray();
+ int totalAxisCount = ctPlotArea.sizeOfValAxArray() + ctPlotArea.sizeOfCatAxArray() + ctPlotArea
+ .sizeOfDateAxArray() + ctPlotArea.sizeOfSerAxArray();
return totalAxisCount > 0;
- }
+ }
@Deprecated
- @Removal(version="4.2")
+ @Removal(version = "4.2")
private void parseAxis() {
// TODO: add other axis types
parseCategoryAxis();
@@ -437,7 +445,7 @@ public final class XSSFChart extends XDD
}
@Deprecated
- @Removal(version="4.2")
+ @Removal(version = "4.2")
private void parseCategoryAxis() {
for (CTCatAx catAx : chart.getPlotArea().getCatAxArray()) {
axis.add(new XSSFCategoryAxis(this, catAx));
@@ -445,7 +453,7 @@ public final class XSSFChart extends XDD
}
@Deprecated
- @Removal(version="4.2")
+ @Removal(version = "4.2")
private void parseDateAxis() {
for (CTDateAx dateAx : chart.getPlotArea().getDateAxArray()) {
axis.add(new XSSFDateAxis(this, dateAx));
@@ -453,7 +461,7 @@ public final class XSSFChart extends XDD
}
@Deprecated
- @Removal(version="4.2")
+ @Removal(version = "4.2")
private void parseValueAxis() {
for (CTValAx valAx : chart.getPlotArea().getValAxArray()) {
axis.add(new XSSFValueAxis(this, valAx));
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFShapeGroup.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFShapeGroup.java?rev=1839259&r1=1839258&r2=1839259&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFShapeGroup.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFShapeGroup.java Sun Aug 26 21:33:16 2018
@@ -103,7 +103,7 @@ public final class XSSFShapeGroup extend
XSSFTextBox shape = new XSSFTextBox(getDrawing(), ctShape);
shape.parent = this;
shape.anchor = anchor;
- shape.getCTShape().getSpPr().setXfrm(anchor.getCTTransform2D());
+ shape.setXfrm(anchor.getCTTransform2D());
return shape;
}
@@ -122,7 +122,7 @@ public final class XSSFShapeGroup extend
XSSFSimpleShape shape = new XSSFSimpleShape(getDrawing(), ctShape);
shape.parent = this;
shape.anchor = anchor;
- shape.getCTShape().getSpPr().setXfrm(anchor.getCTTransform2D());
+ shape.setXfrm(anchor.getCTTransform2D());
return shape;
}
@@ -179,9 +179,9 @@ public final class XSSFShapeGroup extend
XSSFShapeGroup shape = new XSSFShapeGroup(getDrawing(), ctShape);
shape.parent = this;
shape.anchor = anchor;
-
+
// TODO: calculate bounding rectangle on anchor and set off/ext correctly
-
+
CTGroupTransform2D xfrm = shape.getCTGroupShape().getGrpSpPr().getXfrm();
CTTransform2D t2 = anchor.getCTTransform2D();
xfrm.setOff(t2.getOff());
@@ -190,7 +190,7 @@ public final class XSSFShapeGroup extend
xfrm.setChExt(t2.getExt());
xfrm.setFlipH(t2.getFlipH());
xfrm.setFlipV(t2.getFlipV());
-
+
return shape;
}
@@ -220,6 +220,7 @@ public final class XSSFShapeGroup extend
chExt.setCy(y2);
}
+ @Override
protected CTShapeProperties getShapeProperties() {
throw new IllegalStateException("Not supported for shape group");
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org