aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build.gradle1
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFAdjustPoint.java66
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFAdjustValue.java32
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFArcTo.java75
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFConnectionSite.java71
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFCurveTo.java79
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFCustomGeometry.java89
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFGuide.java55
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFLineTo.java52
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFMoveTo.java52
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFPath.java178
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFPolarAdjustHandle.java36
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFQuadTo.java56
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFXYAdjustHandle.java35
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFBackground.java1
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java20
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java21
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTable.java11
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xslf/util/PPTX2PNG.java8
-rw-r--r--poi-ooxml/src/main/java9/module-info.classbin3689 -> 3732 bytes
-rw-r--r--poi-ooxml/src/main/java9/module-info.java1
-rw-r--r--poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java11
-rw-r--r--poi-ooxml/src/test/java9/module-info.classbin5076 -> 5119 bytes
-rw-r--r--poi-ooxml/src/test/java9/module-info.java1
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/DrawSimpleShape.java28
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustPoint.java41
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustPointIf.java44
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustValue.java8
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustValueIf.java32
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/ArcToCommand.java57
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/ArcToCommandIf.java72
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/ClosePathCommand.java2
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/ClosePathCommandIf.java23
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/ConnectionSite.java41
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/ConnectionSiteIf.java44
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/Context.java12
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/CurveToCommand.java37
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/CurveToCommandIf.java50
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/CustomGeometry.java20
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/Guide.java88
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/GuideIf.java120
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/IAdjustableShape.java2
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/LineToCommand.java14
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/LineToCommandIf.java35
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/MoveToCommand.java15
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/MoveToCommandIf.java35
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/Outline.java8
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/Path.java15
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/PathIf.java55
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/PresetGeometries.java20
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/QuadToCommand.java28
-rw-r--r--poi/src/main/java/org/apache/poi/sl/draw/geom/QuadToCommandIf.java42
-rw-r--r--poi/src/test/java/org/apache/poi/sl/draw/geom/TestPresetGeometries.java25
53 files changed, 1612 insertions, 352 deletions
diff --git a/build.gradle b/build.gradle
index 70c22c2f15..81230377d4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -136,6 +136,7 @@ subprojects {
resolutionStrategy {
force "commons-io:commons-io:${commonsIoVersion}"
force 'org.slf4j:slf4j-api:1.7.32'
+ force 'com.fasterxml.woodstox:woodstox-core:6.2.6'
}
}
}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFAdjustPoint.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFAdjustPoint.java
new file mode 100644
index 0000000000..cd1a161086
--- /dev/null
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFAdjustPoint.java
@@ -0,0 +1,66 @@
+/* ====================================================================
+ 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.draw.geom;
+
+import org.apache.poi.sl.draw.geom.AdjustPointIf;
+import org.apache.poi.util.Beta;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjPoint2D;
+
+/**
+ * Wrapper / delegate for XmlBeans custom geometry
+ */
+@Beta
+public class XSLFAdjustPoint implements AdjustPointIf {
+
+ private final CTAdjPoint2D pnt;
+
+ public XSLFAdjustPoint(CTAdjPoint2D pnt) {
+ this.pnt = pnt;
+ }
+
+ @Override
+ public String getX() {
+ return pnt.xgetX().getStringValue();
+ }
+
+ @Override
+ public void setX(String value) {
+ pnt.setX(value);
+ }
+
+ @Override
+ public boolean isSetX() {
+ return pnt.xgetX() != null;
+ }
+
+ @Override
+ public String getY() {
+ return pnt.xgetY().getStringValue();
+ }
+
+ @Override
+ public void setY(String value) {
+ pnt.setY(value);
+ }
+
+ @Override
+ public boolean isSetY() {
+ return pnt.xgetY() != null;
+
+ }
+}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFAdjustValue.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFAdjustValue.java
new file mode 100644
index 0000000000..a8d9f97c1c
--- /dev/null
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFAdjustValue.java
@@ -0,0 +1,32 @@
+/* ====================================================================
+ 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.draw.geom;
+
+import org.apache.poi.sl.draw.geom.AdjustValueIf;
+import org.apache.poi.util.Beta;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuide;
+
+/**
+ * Wrapper / delegate for XmlBeans custom geometry
+ */
+@Beta
+public class XSLFAdjustValue extends XSLFGuide implements AdjustValueIf {
+ public XSLFAdjustValue(CTGeomGuide guide) {
+ super(guide);
+ }
+}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFArcTo.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFArcTo.java
new file mode 100644
index 0000000000..887ec631f2
--- /dev/null
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFArcTo.java
@@ -0,0 +1,75 @@
+/* ====================================================================
+ 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.draw.geom;
+
+import org.apache.poi.sl.draw.geom.ArcToCommandIf;
+import org.apache.poi.util.Beta;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DArcTo;
+
+/**
+ * Wrapper / delegate for XmlBeans custom geometry
+ */
+@Beta
+public class XSLFArcTo implements ArcToCommandIf {
+ private final CTPath2DArcTo arc;
+
+ public XSLFArcTo(CTPath2DArcTo arc) {
+ this.arc = arc;
+ }
+
+ @Override
+ public String getHR() {
+ return arc.xgetHR().getStringValue();
+ }
+
+ @Override
+ public void setHR(String hr) {
+ arc.setHR(hr);
+ }
+
+ @Override
+ public String getWR() {
+ return arc.xgetHR().getStringValue();
+ }
+
+ @Override
+ public void setWR(String wr) {
+ arc.setWR(wr);
+ }
+
+ @Override
+ public String getStAng() {
+ return arc.xgetStAng().getStringValue();
+ }
+
+ @Override
+ public void setStAng(String stAng) {
+ arc.setStAng(stAng);
+ }
+
+ @Override
+ public String getSwAng() {
+ return arc.xgetSwAng().getStringValue();
+ }
+
+ @Override
+ public void setSwAng(String swAng) {
+ arc.setSwAng(swAng);
+ }
+
+}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFConnectionSite.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFConnectionSite.java
new file mode 100644
index 0000000000..e7a627414f
--- /dev/null
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFConnectionSite.java
@@ -0,0 +1,71 @@
+/* ====================================================================
+ 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.draw.geom;
+
+import org.apache.poi.sl.draw.geom.AdjustPointIf;
+import org.apache.poi.sl.draw.geom.ConnectionSiteIf;
+import org.apache.poi.util.Beta;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjPoint2D;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTConnectionSite;
+
+/**
+ * Wrapper / delegate for XmlBeans custom geometry
+ */
+@Beta
+public class XSLFConnectionSite implements ConnectionSiteIf {
+
+ final CTConnectionSite cxn;
+
+ public XSLFConnectionSite(CTConnectionSite cxn) {
+ this.cxn = cxn;
+ }
+
+ @Override
+ public AdjustPointIf getPos() {
+ return new XSLFAdjustPoint(cxn.getPos());
+ }
+
+ @Override
+ public void setPos(AdjustPointIf pos) {
+ CTAdjPoint2D p = cxn.getPos();
+ if (p == null) {
+ p = cxn.addNewPos();
+ }
+ p.setX(pos.getX());
+ p.setY(pos.getY());
+ }
+
+ @Override
+ public String getAng() {
+ return cxn.xgetAng().getStringValue();
+ }
+
+ /**
+ * Sets the value of the ang property.
+ */
+ @Override
+ public void setAng(String value) {
+ cxn.setAng(value);
+ }
+
+ @Override
+ public boolean isSetAng() {
+ return cxn.xgetAng() == null;
+ }
+
+}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFCurveTo.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFCurveTo.java
new file mode 100644
index 0000000000..0639be87ab
--- /dev/null
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFCurveTo.java
@@ -0,0 +1,79 @@
+/* ====================================================================
+ 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.draw.geom;
+
+import org.apache.poi.sl.draw.geom.AdjustPointIf;
+import org.apache.poi.sl.draw.geom.CurveToCommandIf;
+import org.apache.poi.util.Beta;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjPoint2D;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DCubicBezierTo;
+
+/**
+ * Wrapper / delegate for XmlBeans custom geometry
+ */
+@Beta
+public class XSLFCurveTo implements CurveToCommandIf {
+ private final CTPath2DCubicBezierTo bezier;
+
+ public XSLFCurveTo(CTPath2DCubicBezierTo bezier) {
+ this.bezier = bezier;
+ }
+
+ @Override
+ public XSLFAdjustPoint getPt1() {
+ return new XSLFAdjustPoint(bezier.getPtArray(0));
+ }
+
+ @Override
+ public void setPt1(AdjustPointIf pt1) {
+ CTAdjPoint2D xpt = getOrCreate(0);
+ xpt.setX(pt1.getX());
+ xpt.setY(pt1.getY());
+ }
+
+ @Override
+ public XSLFAdjustPoint getPt2() {
+ return new XSLFAdjustPoint(bezier.getPtArray(1));
+ }
+
+ @Override
+ public void setPt2(AdjustPointIf pt2) {
+ CTAdjPoint2D xpt = getOrCreate(1);
+ xpt.setX(pt2.getX());
+ xpt.setY(pt2.getY());
+ }
+
+ @Override
+ public XSLFAdjustPoint getPt3() {
+ return new XSLFAdjustPoint(bezier.getPtArray(2));
+ }
+
+ @Override
+ public void setPt3(AdjustPointIf pt3) {
+ CTAdjPoint2D xpt = getOrCreate(2);
+ xpt.setX(pt3.getX());
+ xpt.setY(pt3.getY());
+ }
+
+ private CTAdjPoint2D getOrCreate(int idx) {
+ for (int i=(idx+1)-bezier.sizeOfPtArray(); i > 0; i--) {
+ bezier.addNewPt();
+ }
+ return bezier.getPtArray(idx);
+ }
+}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFCustomGeometry.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFCustomGeometry.java
new file mode 100644
index 0000000000..0755042f47
--- /dev/null
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFCustomGeometry.java
@@ -0,0 +1,89 @@
+/* ====================================================================
+ 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.draw.geom;
+
+import org.apache.poi.sl.draw.geom.CustomGeometry;
+import org.apache.poi.util.Beta;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjustHandleList;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTConnectionSite;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTCustomGeometry2D;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuide;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuideList;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomRect;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2D;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DList;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPolarAdjustHandle;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTXYAdjustHandle;
+
+/**
+ * Wrapper / delegate for XmlBeans custom geometry
+ */
+@Beta
+public class XSLFCustomGeometry {
+ public static CustomGeometry convertCustomGeometry(CTCustomGeometry2D custGeom) {
+ CustomGeometry cg = new CustomGeometry();
+
+ if (custGeom.isSetAhLst()) {
+ CTAdjustHandleList ahLst = custGeom.getAhLst();
+ for (CTXYAdjustHandle xy : ahLst.getAhXYArray()) {
+ cg.addAdjustHandle(new XSLFXYAdjustHandle(xy));
+ }
+ for (CTPolarAdjustHandle pol : ahLst.getAhPolarArray()) {
+ cg.addAdjustHandle(new XSLFPolarAdjustHandle(pol));
+ }
+ }
+
+ if (custGeom.isSetAvLst()) {
+ CTGeomGuideList avLst = custGeom.getAvLst();
+ for (CTGeomGuide gg : avLst.getGdArray()) {
+ cg.addAdjustGuide(new XSLFAdjustValue(gg));
+ }
+ }
+
+ if (custGeom.isSetGdLst()) {
+ CTGeomGuideList gdLst = custGeom.getGdLst();
+ for (CTGeomGuide gg : gdLst.getGdArray()) {
+ cg.addGeomGuide(new XSLFGuide(gg));
+ }
+ }
+
+ if (custGeom.isSetRect()) {
+ CTGeomRect r = custGeom.getRect();
+ cg.setTextBounds(
+ r.xgetL().getStringValue(),
+ r.xgetT().getStringValue(),
+ r.xgetR().getStringValue(),
+ r.xgetB().getStringValue());
+ }
+
+ if (custGeom.isSetCxnLst()) {
+ for (CTConnectionSite cxn : custGeom.getCxnLst().getCxnArray()) {
+ cg.addConnectionSite(new XSLFConnectionSite((cxn)));
+ }
+ }
+
+ CTPath2DList pl = custGeom.getPathLst();
+ if (pl != null) {
+ for (CTPath2D p : pl.getPathArray()) {
+ cg.addPath(new XSLFPath(p));
+ }
+ }
+
+ return cg;
+ }
+}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFGuide.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFGuide.java
new file mode 100644
index 0000000000..5f970c242a
--- /dev/null
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFGuide.java
@@ -0,0 +1,55 @@
+/* ====================================================================
+ 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.draw.geom;
+
+import org.apache.poi.sl.draw.geom.GuideIf;
+import org.apache.poi.util.Beta;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuide;
+
+/**
+ * Wrapper / delegate for XmlBeans custom geometry
+ */
+@Beta
+public class XSLFGuide implements GuideIf {
+ final CTGeomGuide guide;
+
+ public XSLFGuide(CTGeomGuide guide) {
+ this.guide = guide;
+ }
+
+ @Override
+ public String getName() {
+ return guide.getName();
+ }
+
+ @Override
+ public void setName(String name) {
+ guide.setName(name);
+ }
+
+ @Override
+ public String getFmla() {
+ return guide.getFmla();
+ }
+
+ @Override
+ public void setFmla(String fmla) {
+ guide.setFmla(fmla);
+ }
+
+}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFLineTo.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFLineTo.java
new file mode 100644
index 0000000000..595f9911a6
--- /dev/null
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFLineTo.java
@@ -0,0 +1,52 @@
+/* ====================================================================
+ 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.draw.geom;
+
+import org.apache.poi.sl.draw.geom.AdjustPointIf;
+import org.apache.poi.sl.draw.geom.LineToCommandIf;
+import org.apache.poi.util.Beta;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjPoint2D;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DLineTo;
+
+/**
+ * Wrapper / delegate for XmlBeans custom geometry
+ */
+@Beta
+public class XSLFLineTo implements LineToCommandIf {
+
+ private final CTPath2DLineTo lineTo;
+
+ public XSLFLineTo(CTPath2DLineTo lineTo) {
+ this.lineTo = lineTo;
+ }
+
+ @Override
+ public AdjustPointIf getPt() {
+ return new XSLFAdjustPoint(lineTo.getPt());
+ }
+
+ @Override
+ public void setPt(AdjustPointIf pt) {
+ CTAdjPoint2D xpt = lineTo.getPt();
+ if (xpt == null) {
+ xpt = lineTo.addNewPt();
+ }
+ xpt.setX(pt.getX());
+ xpt.setY(pt.getY());
+ }
+}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFMoveTo.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFMoveTo.java
new file mode 100644
index 0000000000..65d6c0c287
--- /dev/null
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFMoveTo.java
@@ -0,0 +1,52 @@
+/* ====================================================================
+ 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.draw.geom;
+
+import org.apache.poi.sl.draw.geom.AdjustPointIf;
+import org.apache.poi.sl.draw.geom.MoveToCommandIf;
+import org.apache.poi.util.Beta;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjPoint2D;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DMoveTo;
+
+/**
+ * Wrapper / delegate for XmlBeans custom geometry
+ */
+@Beta
+public class XSLFMoveTo implements MoveToCommandIf {
+
+ private final CTPath2DMoveTo moveTo;
+
+ public XSLFMoveTo(CTPath2DMoveTo moveTo) {
+ this.moveTo = moveTo;
+ }
+
+ @Override
+ public XSLFAdjustPoint getPt() {
+ return new XSLFAdjustPoint(moveTo.getPt());
+ }
+
+ @Override
+ public void setPt(AdjustPointIf pt) {
+ CTAdjPoint2D xpt = moveTo.getPt();
+ if (xpt == null) {
+ xpt = moveTo.addNewPt();
+ }
+ xpt.setX(pt.getX());
+ xpt.setY(pt.getY());
+ }
+}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFPath.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFPath.java
new file mode 100644
index 0000000000..984d37c29c
--- /dev/null
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFPath.java
@@ -0,0 +1,178 @@
+/* ====================================================================
+ 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.draw.geom;
+
+import java.awt.geom.Path2D;
+
+import org.apache.poi.sl.draw.geom.ClosePathCommand;
+import org.apache.poi.sl.draw.geom.Context;
+import org.apache.poi.sl.draw.geom.PathCommand;
+import org.apache.poi.sl.draw.geom.PathIf;
+import org.apache.poi.sl.usermodel.PaintStyle;
+import org.apache.poi.util.Beta;
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlObject;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2D;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DArcTo;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DClose;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DCubicBezierTo;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DLineTo;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DMoveTo;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DQuadBezierTo;
+import org.openxmlformats.schemas.drawingml.x2006.main.STPathFillMode;
+
+/**
+ * Wrapper / delegate for XmlBeans custom geometry
+ */
+@Beta
+public class XSLFPath implements PathIf {
+
+ private final CTPath2D pathXml;
+
+ public XSLFPath(CTPath2D pathXml) {
+ this.pathXml = pathXml;
+ }
+
+ @Override
+ public void addCommand(PathCommand cmd) {
+ // not supported
+ }
+
+ @Override
+ public Path2D.Double getPath(Context ctx) {
+ Path2D.Double path2D = new Path2D.Double();
+ XmlCursor cur = pathXml.newCursor();
+ try {
+ for (boolean hasNext = cur.toFirstChild(); hasNext; hasNext = cur.toNextSibling()) {
+ XmlObject xo = cur.getObject();
+ PathCommand pc;
+ if (xo instanceof CTPath2DArcTo) {
+ pc = new XSLFArcTo((CTPath2DArcTo) xo);
+ } else if (xo instanceof CTPath2DCubicBezierTo) {
+ pc = new XSLFCurveTo((CTPath2DCubicBezierTo) xo);
+ } else if (xo instanceof CTPath2DMoveTo) {
+ pc = new XSLFMoveTo((CTPath2DMoveTo) xo);
+ } else if (xo instanceof CTPath2DLineTo) {
+ pc = new XSLFLineTo((CTPath2DLineTo) xo);
+ } else if (xo instanceof CTPath2DQuadBezierTo) {
+ pc = new XSLFQuadTo((CTPath2DQuadBezierTo) xo);
+ } else if (xo instanceof CTPath2DClose) {
+ pc = new ClosePathCommand();
+ } else {
+ continue;
+ }
+ pc.execute(path2D, ctx);
+ }
+ } finally {
+ cur.dispose();
+ }
+ return path2D;
+ }
+
+ @Override
+ public boolean isStroked() {
+ return pathXml.getStroke();
+ }
+
+ @Override
+ public void setStroke(boolean stroke) {
+ pathXml.setStroke(stroke);
+ }
+
+ @Override
+ public boolean isFilled() {
+ return pathXml.getFill() != STPathFillMode.NONE;
+ }
+
+ @Override
+ public PaintStyle.PaintModifier getFill() {
+ switch (pathXml.getFill().intValue()) {
+ default:
+ case STPathFillMode.INT_NONE:
+ return PaintStyle.PaintModifier.NONE;
+ case STPathFillMode.INT_NORM:
+ return PaintStyle.PaintModifier.NORM;
+ case STPathFillMode.INT_LIGHTEN:
+ return PaintStyle.PaintModifier.LIGHTEN;
+ case STPathFillMode.INT_LIGHTEN_LESS:
+ return PaintStyle.PaintModifier.LIGHTEN_LESS;
+ case STPathFillMode.INT_DARKEN:
+ return PaintStyle.PaintModifier.DARKEN;
+ case STPathFillMode.INT_DARKEN_LESS:
+ return PaintStyle.PaintModifier.DARKEN_LESS;
+ }
+ }
+
+ @Override
+ public void setFill(PaintStyle.PaintModifier fill) {
+ STPathFillMode.Enum f;
+ switch (fill) {
+ default:
+ case NONE:
+ f = STPathFillMode.NONE;
+ break;
+ case NORM:
+ f = STPathFillMode.NORM;
+ break;
+ case LIGHTEN:
+ f = STPathFillMode.LIGHTEN;
+ break;
+ case LIGHTEN_LESS:
+ f = STPathFillMode.LIGHTEN_LESS;
+ break;
+ case DARKEN:
+ f = STPathFillMode.DARKEN;
+ break;
+ case DARKEN_LESS:
+ f = STPathFillMode.DARKEN_LESS;
+ break;
+ }
+ pathXml.setFill(f);
+ }
+
+ @Override
+ public long getW() {
+ return pathXml.getW();
+ }
+
+ @Override
+ public void setW(long w) {
+ pathXml.setW(w);
+ }
+
+ @Override
+ public long getH() {
+ return pathXml.getH();
+ }
+
+ @Override
+ public void setH(long h) {
+ pathXml.setH(h);
+ }
+
+ @Override
+ public boolean isExtrusionOk() {
+ return pathXml.getExtrusionOk();
+ }
+
+ @Override
+ public void setExtrusionOk(boolean extrusionOk) {
+ pathXml.setExtrusionOk(extrusionOk);
+ }
+
+}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFPolarAdjustHandle.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFPolarAdjustHandle.java
new file mode 100644
index 0000000000..ba086382fe
--- /dev/null
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFPolarAdjustHandle.java
@@ -0,0 +1,36 @@
+/* ====================================================================
+ 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.draw.geom;
+
+import org.apache.poi.sl.draw.geom.AdjustHandle;
+import org.apache.poi.util.Beta;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPolarAdjustHandle;
+
+/**
+ * Wrapper / delegate for XmlBeans custom geometry
+ */
+@Beta
+public class XSLFPolarAdjustHandle implements AdjustHandle {
+ final CTPolarAdjustHandle xobj;
+
+ public XSLFPolarAdjustHandle(CTPolarAdjustHandle xobj) {
+ this.xobj = xobj;
+ }
+
+ // define more getter/setter when needed
+} \ No newline at end of file
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFQuadTo.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFQuadTo.java
new file mode 100644
index 0000000000..5a38aa41c9
--- /dev/null
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFQuadTo.java
@@ -0,0 +1,56 @@
+/* ====================================================================
+ 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.draw.geom;
+
+import org.apache.poi.sl.draw.geom.AdjustPointIf;
+import org.apache.poi.sl.draw.geom.QuadToCommandIf;
+import org.apache.poi.util.Beta;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DQuadBezierTo;
+
+/**
+ * Wrapper / delegate for XmlBeans custom geometry
+ */
+@Beta
+public class XSLFQuadTo implements QuadToCommandIf {
+
+ private final CTPath2DQuadBezierTo bezier;
+
+ public XSLFQuadTo(CTPath2DQuadBezierTo bezier) {
+ this.bezier = bezier;
+ }
+
+ @Override
+ public AdjustPointIf getPt1() {
+ return new XSLFAdjustPoint(bezier.getPtArray(0));
+ }
+
+ @Override
+ public void setPt1(AdjustPointIf pt1) {
+
+ }
+
+ @Override
+ public AdjustPointIf getPt2() {
+ return new XSLFAdjustPoint(bezier.getPtArray(1));
+ }
+
+ @Override
+ public void setPt2(AdjustPointIf pt2) {
+
+ }
+}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFXYAdjustHandle.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFXYAdjustHandle.java
new file mode 100644
index 0000000000..56a2713a5d
--- /dev/null
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/geom/XSLFXYAdjustHandle.java
@@ -0,0 +1,35 @@
+/* ====================================================================
+ 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.draw.geom;
+
+import org.apache.poi.sl.draw.geom.AdjustHandle;
+import org.apache.poi.util.Beta;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTXYAdjustHandle;
+
+/**
+ * Wrapper / delegate for XmlBeans custom geometry
+ */
+@Beta
+public class XSLFXYAdjustHandle implements AdjustHandle {
+ final CTXYAdjustHandle xobj;
+ public XSLFXYAdjustHandle(CTXYAdjustHandle xobj) {
+ this.xobj = xobj;
+ }
+
+ // define more getter/setter when needed
+}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFBackground.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFBackground.java
index add51e6566..67397d6c50 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFBackground.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFBackground.java
@@ -75,6 +75,7 @@ public class XSLFBackground extends XSLFSimpleShape
return bg.getBgPr();
}
+ @Override
public void setFillColor(Color color) {
CTBackgroundProperties bgPr = getBgPr(true);
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java
index 593a4ee1ca..838430cc02 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java
@@ -24,21 +24,16 @@ import java.awt.geom.Path2D;
import java.awt.geom.PathIterator;
import java.awt.geom.Rectangle2D;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.apache.poi.ooxml.POIXMLTypeLoader;
import org.apache.poi.ooxml.util.POIXMLUnits;
import org.apache.poi.sl.draw.geom.CustomGeometry;
-import org.apache.poi.sl.draw.geom.PresetGeometries;
import org.apache.poi.sl.usermodel.FreeformShape;
import org.apache.poi.util.Beta;
import org.apache.poi.util.Units;
+import org.apache.poi.xslf.draw.geom.XSLFCustomGeometry;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlObject;
-import org.apache.xmlbeans.XmlOptions;
import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjPoint2D;
import org.openxmlformats.schemas.drawingml.x2006.main.CTCustomGeometry2D;
import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomRect;
@@ -135,18 +130,7 @@ public class XSLFFreeformShape extends XSLFAutoShape
return null;
}
- XmlOptions xop = new XmlOptions(POIXMLTypeLoader.DEFAULT_XML_OPTIONS);
- xop.setSaveOuter();
-
- XMLStreamReader staxReader = ((CTShapeProperties)xo).getCustGeom().newXMLStreamReader(xop);
- CustomGeometry custGeo = PresetGeometries.convertCustomGeometry(staxReader);
- try {
- staxReader.close();
- } catch (XMLStreamException e) {
- LOG.atWarn().log("An error occurred while closing a Custom Geometry XML Stream Reader: {}", e.getMessage());
- }
-
- return custGeo;
+ return XSLFCustomGeometry.convertCustomGeometry(((CTShapeProperties)xo).getCustGeom());
}
@Override
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java
index f7424d1807..269a0df884 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java
@@ -22,9 +22,6 @@ package org.apache.poi.xslf.usermodel;
import java.awt.Color;
import java.awt.geom.Rectangle2D;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.ooxml.util.POIXMLUnits;
@@ -47,6 +44,7 @@ import org.apache.poi.sl.usermodel.StrokeStyle.LineCompound;
import org.apache.poi.sl.usermodel.StrokeStyle.LineDash;
import org.apache.poi.util.Beta;
import org.apache.poi.util.Units;
+import org.apache.poi.xslf.draw.geom.XSLFCustomGeometry;
import org.apache.poi.xslf.model.PropertyFetcher;
import org.apache.poi.xslf.usermodel.XSLFPropertiesDelegate.XSLFEffectProperties;
import org.apache.poi.xslf.usermodel.XSLFPropertiesDelegate.XSLFFillProperties;
@@ -240,7 +238,7 @@ public abstract class XSLFSimpleShape extends XSLFShape
/**
* @param color the color to paint the shape outline.
- * A <code>null</code> value turns off the shape outline.
+ * A {@code null} value turns off the shape outline.
*/
public void setLineColor(Color color) {
CTLineProperties ln = getLn(this, true);
@@ -273,7 +271,7 @@ public abstract class XSLFSimpleShape extends XSLFShape
/**
*
- * @return the color of the shape outline or <code>null</code>
+ * @return the color of the shape outline or {@code null}
* if outline is turned off
*/
@SuppressWarnings("WeakerAccess")
@@ -351,7 +349,7 @@ public abstract class XSLFSimpleShape extends XSLFShape
/**
*
- * @param width line width in points. <code>0</code> means no line
+ * @param width line width in points. {@code 0} means no line
*/
@SuppressWarnings("WeakerAccess")
public void setLineWidth(double width) {
@@ -386,7 +384,7 @@ public abstract class XSLFSimpleShape extends XSLFShape
}
/**
- * @return line width in points. <code>0</code> means no line.
+ * @return line width in points. {@code 0} means no line.
*/
@SuppressWarnings("WeakerAccess")
public double getLineWidth() {
@@ -709,14 +707,7 @@ public abstract class XSLFSimpleShape extends XSLFShape
throw new IllegalStateException("Unknown shape geometry: " + name + ", available geometries are: " + dict.keySet());
}
} else if (gp.isSetCustGeom()){
- XMLStreamReader staxReader = gp.getCustGeom().newXMLStreamReader();
- geom = PresetGeometries.convertCustomGeometry(staxReader);
- try {
- staxReader.close();
- }
- catch (XMLStreamException e) {
- LOG.atWarn().log("An error occurred while closing a Custom Geometry XML Stream Reader: {}", e.getMessage());
- }
+ geom = XSLFCustomGeometry.convertCustomGeometry(gp.getCustGeom());
} else {
geom = dict.get("rect");
}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTable.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTable.java
index d2adc919e1..2974b46b59 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTable.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTable.java
@@ -27,6 +27,8 @@ import java.util.List;
import javax.xml.namespace.QName;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.apache.poi.ooxml.util.POIXMLUnits;
import org.apache.poi.sl.draw.DrawFactory;
import org.apache.poi.sl.draw.DrawTableShape;
@@ -52,6 +54,7 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFra
public class XSLFTable extends XSLFGraphicFrame implements Iterable<XSLFTableRow>,
TableShape<XSLFShape,XSLFTextParagraph> {
/* package */ static final String TABLE_URI = "http://schemas.openxmlformats.org/drawingml/2006/table";
+ private static final Logger LOG = LogManager.getLogger(XSLFTable.class);
private final CTTable _table;
private final List<XSLFTableRow> _rows;
@@ -425,13 +428,17 @@ public class XSLFTable extends XSLFGraphicFrame implements Iterable<XSLFTableRow
for (int col2=col+1; col2<col+tc.getGridSpan(); col2++) {
assert(col2 < cols);
XSLFTableCell tc2 = getCell(row, col2);
- assert(tc2.getGridSpan() == 1 && tc2.getRowSpan() == 1);
+ if (tc2.getGridSpan() != 1 || tc2.getRowSpan() != 1) {
+ LOG.warn("invalid table span - rendering result is probably wrong");
+ }
mergedBounds.add(tc2.getAnchor());
}
for (int row2=row+1; row2<row+tc.getRowSpan(); row2++) {
assert(row2 < rows);
XSLFTableCell tc2 = getCell(row2, col);
- assert(tc2.getGridSpan() == 1 && tc2.getRowSpan() == 1);
+ if (tc2.getGridSpan() != 1 || tc2.getRowSpan() != 1) {
+ LOG.warn("invalid table span - rendering result is probably wrong");
+ }
mergedBounds.add(tc2.getAnchor());
}
tc.setAnchor(mergedBounds);
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/util/PPTX2PNG.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/util/PPTX2PNG.java
index 987c177f1f..a52356dd6a 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xslf/util/PPTX2PNG.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/util/PPTX2PNG.java
@@ -477,7 +477,13 @@ public final class PPTX2PNG {
if (outfile != null) {
return outfile;
}
- String inname = String.format(Locale.ROOT, "%04d|%s|%s", slideNo, format, file.getName());
+
+ String fileName = file.getName();
+ if ("stdin".equals(fileName)) {
+ fileName += ".ext";
+ }
+
+ String inname = String.format(Locale.ROOT, "%04d|%s|%s", slideNo, format, fileName);
String outpat = (proxy.getSlideCount() > 1 && slideNo > 0 ? outPattern : outPattern.replaceAll("-?\\$\\{slideno}", ""));
return INPUT_PATTERN.matcher(inname).replaceAll(outpat);
}
diff --git a/poi-ooxml/src/main/java9/module-info.class b/poi-ooxml/src/main/java9/module-info.class
index 6e355946d8..fd29b43f37 100644
--- a/poi-ooxml/src/main/java9/module-info.class
+++ b/poi-ooxml/src/main/java9/module-info.class
Binary files differ
diff --git a/poi-ooxml/src/main/java9/module-info.java b/poi-ooxml/src/main/java9/module-info.java
index a81eba5604..b11e2a9ebe 100644
--- a/poi-ooxml/src/main/java9/module-info.java
+++ b/poi-ooxml/src/main/java9/module-info.java
@@ -72,6 +72,7 @@ module org.apache.poi.ooxml {
exports org.apache.poi.xssf.streaming;
exports org.apache.poi.xssf.util;
exports org.apache.poi.xslf.draw;
+ exports org.apache.poi.xslf.draw.geom;
exports org.apache.poi.xslf.usermodel;
exports org.apache.poi.xslf.model;
exports org.apache.poi.xslf.util;
diff --git a/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java b/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java
index c94cf59580..a277192172 100644
--- a/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java
+++ b/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java
@@ -35,6 +35,7 @@ import java.util.zip.ZipFile;
import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
+import org.apache.commons.io.FilenameUtils;
import org.apache.poi.POIDataSamples;
import org.apache.poi.poifs.filesystem.FileMagic;
import org.apache.poi.xslf.util.PPTX2PNG;
@@ -126,7 +127,6 @@ class TestPPTX2PNG {
"-format", format, // png,gif,jpg,svg,pdf or null for test
"-slide", "-1", // -1 for all
"-outdir", tmpDir.getCanonicalPath(),
- "-outpat", "${basename}-${slideno}-${ext}.${format}",
// "-dump", new File("build/tmp/", pptFile+".json").getCanonicalPath(),
"-dump", "null",
"-quiet",
@@ -157,17 +157,26 @@ class TestPPTX2PNG {
args.add("GBK");
}
+ final String basename = FilenameUtils.getBaseName(fileName);
+ final String ext = FilenameUtils.getExtension(fileName);
+
if (fileObj instanceof ZipEntry) {
ZipEntry ze = (ZipEntry)fileObj;
ZipFile zf = (ZipFile)fileContainer;
System.setIn(zf.getInputStream(ze));
+ args.add("-outpat");
+ args.add(basename+"-${slideno}-"+ext+".${format}");
args.add("stdin");
} else if (fileObj instanceof SevenZArchiveEntry) {
SevenZArchiveEntry ze = (SevenZArchiveEntry)fileObj;
SevenZFile zf = (SevenZFile)fileContainer;
System.setIn(zf.getInputStream(ze));
+ args.add("-outpat");
+ args.add(basename+"-${slideno}-"+ext+".${format}");
args.add("stdin");
} else if (fileObj instanceof File) {
+ args.add("-outpat");
+ args.add("${basename}-${slideno}-${ext}.${format}");
args.add(((File)fileObj).getAbsolutePath());
}
diff --git a/poi-ooxml/src/test/java9/module-info.class b/poi-ooxml/src/test/java9/module-info.class
index d5e072f647..012028ad0b 100644
--- a/poi-ooxml/src/test/java9/module-info.class
+++ b/poi-ooxml/src/test/java9/module-info.class
Binary files differ
diff --git a/poi-ooxml/src/test/java9/module-info.java b/poi-ooxml/src/test/java9/module-info.java
index 4d7612ba00..3bb546f87f 100644
--- a/poi-ooxml/src/test/java9/module-info.java
+++ b/poi-ooxml/src/test/java9/module-info.java
@@ -70,6 +70,7 @@ module org.apache.poi.ooxml {
exports org.apache.poi.xssf.streaming;
exports org.apache.poi.xssf.util;
exports org.apache.poi.xslf.draw;
+ exports org.apache.poi.xslf.draw.geom;
exports org.apache.poi.xslf.usermodel;
exports org.apache.poi.xslf.model;
exports org.apache.poi.xslf.util;
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/DrawSimpleShape.java b/poi/src/main/java/org/apache/poi/sl/draw/DrawSimpleShape.java
index 88b7eea935..4ed23e03d9 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/DrawSimpleShape.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/DrawSimpleShape.java
@@ -37,6 +37,7 @@ import org.apache.poi.sl.draw.geom.Context;
import org.apache.poi.sl.draw.geom.CustomGeometry;
import org.apache.poi.sl.draw.geom.Outline;
import org.apache.poi.sl.draw.geom.Path;
+import org.apache.poi.sl.draw.geom.PathIf;
import org.apache.poi.sl.usermodel.LineDecoration;
import org.apache.poi.sl.usermodel.LineDecoration.DecorationShape;
import org.apache.poi.sl.usermodel.LineDecoration.DecorationSize;
@@ -85,7 +86,7 @@ public class DrawSimpleShape extends DrawShape {
PaintModifier pm = null;
for (Outline o : elems) {
- Path path = o.getPath();
+ PathIf path = o.getPath();
if (path.isFilled()) {
PaintModifier pmOld = pm;
pm = path.getFill();
@@ -169,7 +170,7 @@ public class DrawSimpleShape extends DrawShape {
for(Outline o : lst){
java.awt.Shape s = o.getOutline();
- Path p = o.getPath();
+ PathIf p = o.getPath();
graphics.setRenderingHint(Drawable.GRADIENT_SHAPE, s);
if(p.isFilled()) {
@@ -197,10 +198,12 @@ public class DrawSimpleShape extends DrawShape {
double lineWidth = Math.max(2.5, stroke.getLineWidth());
Rectangle2D anchor = getAnchor(graphics, getShape());
- double x2 = anchor.getX() + anchor.getWidth(),
- y2 = anchor.getY() + anchor.getHeight();
-
- double alpha = Math.atan(anchor.getHeight() / anchor.getWidth());
+ double x2 = 0, y2 = 0, alpha = 0;
+ if (anchor != null) {
+ x2 = anchor.getX() + anchor.getWidth();
+ y2 = anchor.getY() + anchor.getHeight();
+ alpha = Math.atan(anchor.getHeight() / anchor.getWidth());
+ }
AffineTransform at = new AffineTransform();
java.awt.Shape tailShape = null;
@@ -273,9 +276,12 @@ public class DrawSimpleShape extends DrawShape {
double lineWidth = Math.max(2.5, stroke.getLineWidth());
Rectangle2D anchor = getAnchor(graphics, getShape());
- double x1 = anchor.getX(), y1 = anchor.getY();
-
- double alpha = Math.atan(anchor.getHeight() / anchor.getWidth());
+ double x1 = 0, y1 = 0, alpha = 0;
+ if (anchor != null) {
+ x1 = anchor.getX();
+ y1 = anchor.getY();
+ alpha = Math.atan(anchor.getHeight() / anchor.getWidth());
+ }
AffineTransform at = new AffineTransform();
java.awt.Shape headShape = null;
@@ -362,7 +368,7 @@ public class DrawSimpleShape extends DrawShape {
for (Outline o : outlines) {
java.awt.Shape s = o.getOutline();
- Path p = o.getPath();
+ PathIf p = o.getPath();
graphics.setRenderingHint(Drawable.GRADIENT_SHAPE, s);
graphics.setPaint(shadowColor);
@@ -389,7 +395,7 @@ public class DrawSimpleShape extends DrawShape {
if(anchor == null) {
return lst;
}
- for (Path p : geom) {
+ for (PathIf p : geom) {
double w = p.getW(), h = p.getH(), scaleX, scaleY;
if (w == -1) {
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustPoint.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustPoint.java
index 27c5e09a7f..4ceea4fbd2 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustPoint.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustPoint.java
@@ -39,66 +39,39 @@ import java.util.Objects;
*/
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "CT_AdjPoint2D")
-public class AdjustPoint {
+public class AdjustPoint implements AdjustPointIf {
// @XmlAttribute(name = "x", required = true)
private String x;
// @XmlAttribute(name = "y", required = true)
private String y;
-
- /**
- * Gets the value of the x property.
- *
- * @return
- * possible object is
- * {@link String }
- *
- */
+ @Override
public String getX() {
return x;
}
- /**
- * Sets the value of the x property.
- *
- * @param value
- * allowed object is
- * {@link String }
- *
- */
+ @Override
public void setX(String value) {
this.x = value;
}
+ @Override
public boolean isSetX() {
return (this.x!= null);
}
- /**
- * Gets the value of the y property.
- *
- * @return
- * possible object is
- * {@link String }
- *
- */
+ @Override
public String getY() {
return y;
}
- /**
- * Sets the value of the y property.
- *
- * @param value
- * allowed object is
- * {@link String }
- *
- */
+ @Override
public void setY(String value) {
this.y = value;
}
+ @Override
public boolean isSetY() {
return (this.y!= null);
}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustPointIf.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustPointIf.java
new file mode 100644
index 0000000000..00625b5839
--- /dev/null
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustPointIf.java
@@ -0,0 +1,44 @@
+/* ====================================================================
+ 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.sl.draw.geom;
+
+public interface AdjustPointIf {
+ /**
+ * Gets the value of the x property.
+ */
+ String getX();
+
+ /**
+ * Sets the value of the x property.
+ */
+ void setX(String value);
+
+ boolean isSetX();
+
+ /**
+ * Gets the value of the y property.
+ */
+ String getY();
+
+ /**
+ * Sets the value of the y property.
+ */
+ void setY(String value);
+
+ boolean isSetY();
+}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustValue.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustValue.java
index 68570b1599..95fe699022 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustValue.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustValue.java
@@ -22,12 +22,6 @@ package org.apache.poi.sl.draw.geom;
/**
* Represents a shape adjust values (see section 20.1.9.5 in the spec)
*/
-public class AdjustValue extends Guide {
+public class AdjustValue extends Guide implements AdjustValueIf {
- @Override
- public double evaluate(Context ctx){
- String name = getName();
- Guide adj = ctx.getAdjustValue(name);
- return (adj != null) ? adj.evaluate(ctx) : super.evaluate(ctx);
- }
}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustValueIf.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustValueIf.java
new file mode 100644
index 0000000000..24c69f48a1
--- /dev/null
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/AdjustValueIf.java
@@ -0,0 +1,32 @@
+/* ====================================================================
+ 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.sl.draw.geom;
+
+public interface AdjustValueIf extends GuideIf {
+ @Override
+ default double evaluate(Context ctx) {
+ return evaluateAdjustValue(ctx);
+ }
+
+ default double evaluateAdjustValue(Context ctx){
+ String name = getName();
+ GuideIf adj = ctx.getAdjustValue(name);
+ return (adj != null) ? adj.evaluate(ctx) : evaluateGuide(ctx);
+ }
+
+}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/ArcToCommand.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/ArcToCommand.java
index 4ffddb86a0..33e3c304a7 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/ArcToCommand.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/ArcToCommand.java
@@ -19,11 +19,6 @@
package org.apache.poi.sl.draw.geom;
-import static org.apache.poi.sl.draw.geom.Formula.OOXML_DEGREE;
-
-import java.awt.geom.Arc2D;
-import java.awt.geom.Path2D;
-import java.awt.geom.Point2D;
import java.util.Objects;
import org.apache.poi.util.Internal;
@@ -57,7 +52,7 @@ import org.apache.poi.util.Internal;
*/
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "CT_Path2DArcTo")
-public class ArcToCommand implements PathCommand {
+public class ArcToCommand implements ArcToCommandIf {
// @XmlAttribute(name = "wR", required = true)
private String wr;
@@ -68,51 +63,51 @@ public class ArcToCommand implements PathCommand {
// @XmlAttribute(name = "swAng", required = true)
private String swAng;
+ @Override
public void setHR(String hr) {
this.hr = hr;
}
+ @Override
+ public String getHR() {
+ return hr;
+ }
+
+ @Override
+ public String getStAng() {
+ return stAng;
+ }
+
+ @Override
+ public String getWR() {
+ return wr;
+ }
+
+ @Override
public void setWR(String wr) {
this.wr = wr;
}
+ @Override
public void setStAng(String stAng) {
this.stAng = stAng;
}
- public void setSwAng(String swAng) {
- this.swAng = swAng;
+ @Override
+ public String getSwAng() {
+ return swAng;
}
@Override
- public void execute(Path2D.Double path, Context ctx){
- double rx = ctx.getValue(wr);
- double ry = ctx.getValue(hr);
- double ooStart = ctx.getValue(stAng) / OOXML_DEGREE;
- double ooExtent = ctx.getValue(swAng) / OOXML_DEGREE;
-
- // skew the angles for AWT output
- double awtStart = convertOoxml2AwtAngle(ooStart, rx, ry);
- double awtSweep = convertOoxml2AwtAngle(ooStart+ooExtent, rx, ry)-awtStart;
-
- // calculate the inverse angle - taken from the (reversed) preset definition
- double radStart = Math.toRadians(ooStart);
- double invStart = Math.atan2(rx * Math.sin(radStart), ry * Math.cos(radStart));
-
- Point2D pt = path.getCurrentPoint();
- // calculate top/left corner
- double x0 = pt.getX() - rx * Math.cos(invStart) - rx;
- double y0 = pt.getY() - ry * Math.sin(invStart) - ry;
-
- Arc2D arc = new Arc2D.Double(x0, y0, 2 * rx, 2 * ry, awtStart, awtSweep, Arc2D.OPEN);
- path.append(arc, true);
+ public void setSwAng(String swAng) {
+ this.swAng = swAng;
}
/**
* Arc2D angles are skewed, OOXML aren't ... so we need to unskew them<p>
*
- * Furthermore ooxml angle starts at the X-axis and increases clock-wise,
- * where as Arc2D api states
+ * Furthermore, ooxml angle starts at the X-axis and increases clock-wise,
+ * whereas Arc2D api states
* "45 degrees always falls on the line from the center of the ellipse to
* the upper right corner of the framing rectangle"
* so we need to reverse it
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/ArcToCommandIf.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/ArcToCommandIf.java
new file mode 100644
index 0000000000..6e5942ea89
--- /dev/null
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/ArcToCommandIf.java
@@ -0,0 +1,72 @@
+/*
+ * ====================================================================
+ * 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.sl.draw.geom;
+
+import static org.apache.poi.sl.draw.geom.Formula.OOXML_DEGREE;
+
+import java.awt.geom.Arc2D;
+import java.awt.geom.Path2D;
+import java.awt.geom.Point2D;
+
+public interface ArcToCommandIf extends PathCommand {
+
+ void setHR(String hr);
+
+ void setWR(String wr);
+
+ void setStAng(String stAng);
+
+ void setSwAng(String swAng);
+
+ String getHR();
+
+ String getWR();
+
+ String getStAng();
+
+ String getSwAng();
+
+
+ @Override
+ default void execute(Path2D.Double path, Context ctx){
+ double rx = ctx.getValue(getWR());
+ double ry = ctx.getValue(getHR());
+ double ooStart = ctx.getValue(getStAng()) / OOXML_DEGREE;
+ double ooExtent = ctx.getValue(getSwAng()) / OOXML_DEGREE;
+
+ // skew the angles for AWT output
+ double awtStart = ArcToCommand.convertOoxml2AwtAngle(ooStart, rx, ry);
+ double awtSweep = ArcToCommand.convertOoxml2AwtAngle(ooStart+ooExtent, rx, ry)-awtStart;
+
+ // calculate the inverse angle - taken from the (reversed) preset definition
+ double radStart = Math.toRadians(ooStart);
+ double invStart = Math.atan2(rx * Math.sin(radStart), ry * Math.cos(radStart));
+
+ Point2D pt = path.getCurrentPoint();
+ // calculate top/left corner
+ double x0 = pt.getX() - rx * Math.cos(invStart) - rx;
+ double y0 = pt.getY() - ry * Math.sin(invStart) - ry;
+
+ Arc2D arc = new Arc2D.Double(x0, y0, 2 * rx, 2 * ry, awtStart, awtSweep, Arc2D.OPEN);
+ path.append(arc, true);
+ }
+
+
+}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/ClosePathCommand.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/ClosePathCommand.java
index ab7a37a444..91d4332331 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/ClosePathCommand.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/ClosePathCommand.java
@@ -39,7 +39,7 @@ import java.awt.geom.Path2D;
*/
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "CT_Path2DClose")
-public class ClosePathCommand implements PathCommand {
+public class ClosePathCommand implements ClosePathCommandIf {
@Override
public void execute(Path2D.Double path, Context ctx){
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/ClosePathCommandIf.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/ClosePathCommandIf.java
new file mode 100644
index 0000000000..b212c5db8c
--- /dev/null
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/ClosePathCommandIf.java
@@ -0,0 +1,23 @@
+/*
+ * ====================================================================
+ * 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.sl.draw.geom;
+
+public interface ClosePathCommandIf extends PathCommand {
+}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/ConnectionSite.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/ConnectionSite.java
index 9f19ebccc6..0ee7571ca4 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/ConnectionSite.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/ConnectionSite.java
@@ -41,64 +41,37 @@ import java.util.Objects;
*/
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "CT_ConnectionSite", propOrder = {"pos"})
-public final class ConnectionSite {
+public final class ConnectionSite implements ConnectionSiteIf {
// @XmlElement(required = true)
private final AdjustPoint pos = new AdjustPoint();
// @XmlAttribute(name = "ang", required = true)
private String ang;
- /**
- * Gets the value of the pos property.
- *
- * @return
- * possible object is
- * {@link AdjustPoint }
- *
- */
+ @Override
public AdjustPoint getPos() {
return pos;
}
- /**
- * Sets the value of the pos property.
- *
- * @param pos
- * allowed object is
- * {@link AdjustPoint }
- *
- */
- public void setPos(AdjustPoint pos) {
+ @Override
+ public void setPos(AdjustPointIf pos) {
if (pos != null) {
this.pos.setX(pos.getX());
this.pos.setY(pos.getY());
}
}
- /**
- * Gets the value of the ang property.
- *
- * @return
- * possible object is
- * {@link String }
- *
- */
+ @Override
public String getAng() {
return ang;
}
- /**
- * Sets the value of the ang property.
- *
- * @param value
- * allowed object is
- * {@link String }
- *
- */
+ @Override
public void setAng(String value) {
this.ang = value;
}
+ @Override
public boolean isSetAng() {
return (this.ang!= null);
}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/ConnectionSiteIf.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/ConnectionSiteIf.java
new file mode 100644
index 0000000000..68eccfc9a1
--- /dev/null
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/ConnectionSiteIf.java
@@ -0,0 +1,44 @@
+/* ====================================================================
+ 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.sl.draw.geom;
+
+public interface ConnectionSiteIf {
+
+ /**
+ * Gets the value of the pos property.
+ */
+ AdjustPointIf getPos();
+
+ /**
+ * Sets the value of the pos property.
+ */
+ void setPos(AdjustPointIf pos);
+
+ /**
+ * Gets the value of the ang property.
+ */
+ String getAng();
+
+ /**
+ * Sets the value of the ang property.
+ */
+ void setAng(String value);
+
+ boolean isSetAng();
+
+}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/Context.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/Context.java
index 3ac4495929..2b7c571475 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/Context.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/Context.java
@@ -34,14 +34,14 @@ public class Context {
private final Map<String, Double> _ctx = new HashMap<>();
private final IAdjustableShape _props;
private final Rectangle2D _anchor;
-
+
public Context(CustomGeometry geom, Rectangle2D anchor, IAdjustableShape props){
_props = props;
_anchor = anchor;
- for(Guide gd : geom.adjusts) {
+ for(GuideIf gd : geom.adjusts) {
evaluate(gd);
}
- for(Guide gd : geom.guides) {
+ for(GuideIf gd : geom.guides) {
evaluate(gd);
}
}
@@ -50,7 +50,7 @@ public class Context {
return _anchor;
}
- Guide getAdjustValue(String name){
+ GuideIf getAdjustValue(String name){
return _props.getAdjustValue(name);
}
@@ -65,8 +65,8 @@ public class Context {
public double evaluate(Formula fmla){
double result = fmla.evaluate(this);
- if (fmla instanceof Guide) {
- String key = ((Guide)fmla).getName();
+ if (fmla instanceof GuideIf) {
+ String key = ((GuideIf)fmla).getName();
if (key != null) {
_ctx.put(key, result);
}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/CurveToCommand.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/CurveToCommand.java
index 2e121c7893..01d3f726e5 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/CurveToCommand.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/CurveToCommand.java
@@ -43,7 +43,7 @@ import java.util.Objects;
*/
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "CT_Path2DCubicBezierTo", propOrder = {"pt"})
-public final class CurveToCommand implements PathCommand {
+public final class CurveToCommand implements CurveToCommandIf {
// @XmlElement(required = true)
private final AdjustPoint pt1 = new AdjustPoint();
@@ -52,21 +52,39 @@ public final class CurveToCommand implements PathCommand {
// @XmlElement(required = true)
private final AdjustPoint pt3 = new AdjustPoint();
- public void setPt1(AdjustPoint pt1) {
+ @Override
+ public AdjustPoint getPt1() {
+ return pt1;
+ }
+
+ @Override
+ public void setPt1(AdjustPointIf pt1) {
if (pt1 != null) {
this.pt1.setX(pt1.getX());
this.pt1.setY(pt1.getY());
}
}
- public void setPt2(AdjustPoint pt2) {
+ @Override
+ public AdjustPoint getPt2() {
+ return pt2;
+ }
+
+ @Override
+ public void setPt2(AdjustPointIf pt2) {
if (pt2 != null) {
this.pt2.setX(pt2.getX());
this.pt2.setY(pt2.getY());
}
}
- public void setPt3(AdjustPoint pt3) {
+ @Override
+ public AdjustPoint getPt3() {
+ return pt3;
+ }
+
+ @Override
+ public void setPt3(AdjustPointIf pt3) {
if (pt3 != null) {
this.pt3.setX(pt3.getX());
this.pt3.setY(pt3.getY());
@@ -74,17 +92,6 @@ public final class CurveToCommand implements PathCommand {
}
@Override
- public void execute(Path2D.Double path, Context ctx){
- double x1 = ctx.getValue(pt1.getX());
- double y1 = ctx.getValue(pt1.getY());
- double x2 = ctx.getValue(pt2.getX());
- double y2 = ctx.getValue(pt2.getY());
- double x3 = ctx.getValue(pt3.getX());
- double y3 = ctx.getValue(pt3.getY());
- path.curveTo(x1, y1, x2, y2, x3, y3);
- }
-
- @Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof CurveToCommand)) return false;
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/CurveToCommandIf.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/CurveToCommandIf.java
new file mode 100644
index 0000000000..2ea80301c6
--- /dev/null
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/CurveToCommandIf.java
@@ -0,0 +1,50 @@
+/* ====================================================================
+ 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.sl.draw.geom;
+
+import java.awt.geom.Path2D;
+
+public interface CurveToCommandIf extends PathCommand {
+
+ AdjustPointIf getPt1();
+
+ void setPt1(AdjustPointIf pt1);
+
+ AdjustPointIf getPt2();
+
+ void setPt2(AdjustPointIf pt2);
+
+ AdjustPointIf getPt3();
+
+ void setPt3(AdjustPointIf pt3);
+
+
+ @Override
+ default void execute(Path2D.Double path, Context ctx){
+ AdjustPointIf pt1 = getPt1();
+ double x1 = ctx.getValue(pt1.getX());
+ double y1 = ctx.getValue(pt1.getY());
+ AdjustPointIf pt2 = getPt2();
+ double x2 = ctx.getValue(pt2.getX());
+ double y2 = ctx.getValue(pt2.getY());
+ AdjustPointIf pt3 = getPt3();
+ double x3 = ctx.getValue(pt3.getX());
+ double y3 = ctx.getValue(pt3.getY());
+ path.curveTo(x1, y1, x2, y2, x3, y3);
+ }
+}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/CustomGeometry.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/CustomGeometry.java
index ff7a1c2f5f..84ef46357f 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/CustomGeometry.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/CustomGeometry.java
@@ -49,19 +49,19 @@ import java.util.Objects;
* &lt;/complexType&gt;
* </pre>
*/
-public final class CustomGeometry implements Iterable<Path>{
- final List<AdjustValue> adjusts = new ArrayList<>();
- final List<Guide> guides = new ArrayList<>();
- final List<Path> paths = new ArrayList<>();
+public final class CustomGeometry implements Iterable<PathIf>{
+ final List<AdjustValueIf> adjusts = new ArrayList<>();
+ final List<GuideIf> guides = new ArrayList<>();
+ final List<PathIf> paths = new ArrayList<>();
final List<AdjustHandle> handles = new ArrayList<>();
- final List<ConnectionSite> connections = new ArrayList<>();
+ final List<ConnectionSiteIf> connections = new ArrayList<>();
Path textBounds;
- public void addAdjustGuide(AdjustValue guide) {
+ public void addAdjustGuide(AdjustValueIf guide) {
adjusts.add(guide);
}
- public void addGeomGuide(Guide guide) {
+ public void addGeomGuide(GuideIf guide) {
guides.add(guide);
}
@@ -69,11 +69,11 @@ public final class CustomGeometry implements Iterable<Path>{
handles.add(handle);
}
- public void addConnectionSite(ConnectionSite connection) {
+ public void addConnectionSite(ConnectionSiteIf connection) {
connections.add(connection);
}
- public void addPath(Path path) {
+ public void addPath(PathIf path) {
paths.add(path);
}
@@ -106,7 +106,7 @@ public final class CustomGeometry implements Iterable<Path>{
@Override
- public Iterator<Path> iterator() {
+ public Iterator<PathIf> iterator() {
return paths.iterator();
}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/Guide.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/Guide.java
index 77da392058..0a6af0730b 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/Guide.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/Guide.java
@@ -19,10 +19,7 @@
package org.apache.poi.sl.draw.geom;
-import static java.lang.Math.*;
-
import java.util.Objects;
-import java.util.regex.Pattern;
/**
* <p>Java class for CT_GeomGuide complex type.
@@ -44,12 +41,7 @@ import java.util.regex.Pattern;
*/
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "CT_GeomGuide")
-public class Guide implements Formula {
- enum Op {
- muldiv,addsub,adddiv,ifelse,val,abs,sqrt,max,min,at2,sin,cos,tan,cat2,sat2,pin,mod
- }
-
- private static final Pattern WHITESPACE = Pattern.compile("\\s+");
+public class Guide implements GuideIf {
// @XmlAttribute(name = "name", required = true)
// @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@@ -57,97 +49,27 @@ public class Guide implements Formula {
// @XmlAttribute(name = "fmla", required = true)
private String fmla;
- private Op op;
- private String[] operands;
+ @Override
public String getName(){
return name;
}
+ @Override
public void setName(String name) {
this.name = name;
}
+ @Override
public String getFmla() {
return fmla;
}
+ @Override
public void setFmla(String fmla) {
this.fmla = fmla;
- operands = WHITESPACE.split(fmla);
- switch (operands[0]) {
- case "*/": op = Op.muldiv; break;
- case "+-": op = Op.addsub; break;
- case "+/": op = Op.adddiv; break;
- case "?:": op = Op.ifelse; break;
- default: op = Op.valueOf(operands[0]); break;
- }
}
- @Override
- public double evaluate(Context ctx) {
- double x = (operands.length > 1) ? ctx.getValue(operands[1]) : 0;
- double y = (operands.length > 2) ? ctx.getValue(operands[2]) : 0;
- double z = (operands.length > 3) ? ctx.getValue(operands[3]) : 0;
- switch (op) {
- case abs:
- // Absolute Value Formula
- return abs(x);
- case adddiv:
- // Add Divide Formula
- return (z == 0) ? 0 : (x + y) / z;
- case addsub:
- // Add Subtract Formula
- return (x + y) - z;
- case at2:
- // ArcTan Formula: "at2 x y" = arctan( y / z ) = value of this guide
- return toDegrees(atan2(y, x)) * OOXML_DEGREE;
- case cos:
- // Cosine Formula: "cos x y" = (x * cos( y )) = value of this guide
- return x * cos(toRadians(y / OOXML_DEGREE));
- case cat2:
- // Cosine ArcTan Formula: "cat2 x y z" = (x * cos(arctan(z / y) )) = value of this guide
- return x * cos(atan2(z, y));
- case ifelse:
- // If Else Formula: "?: x y z" = if (x > 0), then y = value of this guide,
- // else z = value of this guide
- return x > 0 ? y : z;
- case val:
- // Literal Value Expression
- return x;
- case max:
- // Maximum Value Formula
- return max(x, y);
- case min:
- // Minimum Value Formula
- return min(x, y);
- case mod:
- // Modulo Formula: "mod x y z" = sqrt(x^2 + b^2 + c^2) = value of this guide
- return sqrt(x*x + y*y + z*z);
- case muldiv:
- // Multiply Divide Formula
- return (z == 0) ? 0 : (x * y) / z;
- case pin:
- // Pin To Formula: "pin x y z" = if (y < x), then x = value of this guide
- // else if (y > z), then z = value of this guide
- // else y = value of this guide
- return max(x, min(y, z));
- case sat2:
- // Sine ArcTan Formula: "sat2 x y z" = (x*sin(arctan(z / y))) = value of this guide
- return x * sin(atan2(z, y));
- case sin:
- // Sine Formula: "sin x y" = (x * sin( y )) = value of this guide
- return x * sin(toRadians(y / OOXML_DEGREE));
- case sqrt:
- // Square Root Formula: "sqrt x" = sqrt(x) = value of this guide
- return sqrt(x);
- case tan:
- // Tangent Formula: "tan x y" = (x * tan( y )) = value of this guide
- return x * tan(toRadians(y / OOXML_DEGREE));
- default:
- return 0;
- }
- }
@Override
public boolean equals(Object o) {
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/GuideIf.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/GuideIf.java
new file mode 100644
index 0000000000..cd6e26d457
--- /dev/null
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/GuideIf.java
@@ -0,0 +1,120 @@
+/*
+ * ====================================================================
+ * 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.sl.draw.geom;
+
+import static java.lang.Math.*;
+import static java.lang.Math.toRadians;
+
+import java.util.regex.Pattern;
+
+public interface GuideIf extends Formula {
+ enum Op {
+ muldiv,addsub,adddiv,ifelse,val,abs,sqrt,max,min,at2,sin,cos,tan,cat2,sat2,pin,mod
+ }
+
+ Pattern WHITESPACE = Pattern.compile("\\s+");
+
+ String getName();
+
+ void setName(String name);
+
+ String getFmla();
+
+ void setFmla(String fmla);
+
+ @Override
+ default double evaluate(Context ctx) {
+ return evaluateGuide(ctx);
+ }
+
+ default double evaluateGuide(Context ctx) {
+ Guide.Op op;
+ String[] operands = WHITESPACE.split(getFmla());
+ switch (operands[0]) {
+ case "*/": op = Guide.Op.muldiv; break;
+ case "+-": op = Guide.Op.addsub; break;
+ case "+/": op = Guide.Op.adddiv; break;
+ case "?:": op = Guide.Op.ifelse; break;
+ default: op = Guide.Op.valueOf(operands[0]); break;
+ }
+
+ double x = (operands.length > 1) ? ctx.getValue(operands[1]) : 0;
+ double y = (operands.length > 2) ? ctx.getValue(operands[2]) : 0;
+ double z = (operands.length > 3) ? ctx.getValue(operands[3]) : 0;
+ switch (op) {
+ case abs:
+ // Absolute Value Formula
+ return abs(x);
+ case adddiv:
+ // Add Divide Formula
+ return (z == 0) ? 0 : (x + y) / z;
+ case addsub:
+ // Add Subtract Formula
+ return (x + y) - z;
+ case at2:
+ // ArcTan Formula: "at2 x y" = arctan( y / z ) = value of this guide
+ return toDegrees(atan2(y, x)) * OOXML_DEGREE;
+ case cos:
+ // Cosine Formula: "cos x y" = (x * cos( y )) = value of this guide
+ return x * cos(toRadians(y / OOXML_DEGREE));
+ case cat2:
+ // Cosine ArcTan Formula: "cat2 x y z" = (x * cos(arctan(z / y) )) = value of this guide
+ return x * cos(atan2(z, y));
+ case ifelse:
+ // If Else Formula: "?: x y z" = if (x > 0), then y = value of this guide,
+ // else z = value of this guide
+ return x > 0 ? y : z;
+ case val:
+ // Literal Value Expression
+ return x;
+ case max:
+ // Maximum Value Formula
+ return max(x, y);
+ case min:
+ // Minimum Value Formula
+ return min(x, y);
+ case mod:
+ // Modulo Formula: "mod x y z" = sqrt(x^2 + b^2 + c^2) = value of this guide
+ return sqrt(x*x + y*y + z*z);
+ case muldiv:
+ // Multiply Divide Formula
+ return (z == 0) ? 0 : (x * y) / z;
+ case pin:
+ // Pin To Formula: "pin x y z" = if (y < x), then x = value of this guide
+ // else if (y > z), then z = value of this guide
+ // else y = value of this guide
+ return max(x, min(y, z));
+ case sat2:
+ // Sine ArcTan Formula: "sat2 x y z" = (x*sin(arctan(z / y))) = value of this guide
+ return x * sin(atan2(z, y));
+ case sin:
+ // Sine Formula: "sin x y" = (x * sin( y )) = value of this guide
+ return x * sin(toRadians(y / OOXML_DEGREE));
+ case sqrt:
+ // Square Root Formula: "sqrt x" = sqrt(x) = value of this guide
+ return sqrt(x);
+ case tan:
+ // Tangent Formula: "tan x y" = (x * tan( y )) = value of this guide
+ return x * tan(toRadians(y / OOXML_DEGREE));
+ default:
+ return 0;
+ }
+ }
+}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/IAdjustableShape.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/IAdjustableShape.java
index 3145507dca..7d6a2d1102 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/IAdjustableShape.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/IAdjustableShape.java
@@ -31,5 +31,5 @@ public interface IAdjustableShape {
* @param name name of a adjust value, e.g. adj1
* @return adjust guide defined in the shape or null
*/
- Guide getAdjustValue(String name);
+ GuideIf getAdjustValue(String name);
}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/LineToCommand.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/LineToCommand.java
index b1965fab87..b0ca664187 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/LineToCommand.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/LineToCommand.java
@@ -19,7 +19,6 @@
package org.apache.poi.sl.draw.geom;
-import java.awt.geom.Path2D;
import java.util.Objects;
/**
@@ -43,29 +42,24 @@ import java.util.Objects;
*/
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "CT_Path2DLineTo", propOrder = {"pt"})
-public final class LineToCommand implements PathCommand {
+public final class LineToCommand implements LineToCommandIf {
// @XmlElement(required = true)
private final AdjustPoint pt = new AdjustPoint();
+ @Override
public AdjustPoint getPt() {
return pt;
}
- public void setPt(AdjustPoint pt) {
+ @Override
+ public void setPt(AdjustPointIf pt) {
if (pt != null) {
this.pt.setX(pt.getX());
this.pt.setY(pt.getY());
}
}
- @Override
- public void execute(Path2D.Double path, Context ctx){
- double x = ctx.getValue(pt.getX());
- double y = ctx.getValue(pt.getY());
- path.lineTo(x, y);
- }
-
@Override
public boolean equals(Object o) {
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/LineToCommandIf.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/LineToCommandIf.java
new file mode 100644
index 0000000000..d013e80373
--- /dev/null
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/LineToCommandIf.java
@@ -0,0 +1,35 @@
+/* ====================================================================
+ 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.sl.draw.geom;
+
+import java.awt.geom.Path2D;
+
+public interface LineToCommandIf extends PathCommand {
+
+ AdjustPointIf getPt();
+
+ void setPt(AdjustPointIf pt);
+
+ @Override
+ default void execute(Path2D.Double path, Context ctx){
+ AdjustPointIf pt = getPt();
+ double x = ctx.getValue(pt.getX());
+ double y = ctx.getValue(pt.getY());
+ path.lineTo(x, y);
+ }
+}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/MoveToCommand.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/MoveToCommand.java
index 6ebaa206b3..a328c15bf6 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/MoveToCommand.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/MoveToCommand.java
@@ -19,7 +19,6 @@
package org.apache.poi.sl.draw.geom;
-import java.awt.geom.Path2D;
import java.util.Objects;
/**
@@ -43,16 +42,18 @@ import java.util.Objects;
*/
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "CT_Path2DMoveTo", propOrder = {"pt"})
-public final class MoveToCommand implements PathCommand {
+public final class MoveToCommand implements MoveToCommandIf {
// @XmlElement(required = true)
private final AdjustPoint pt = new AdjustPoint();
+ @Override
public AdjustPoint getPt() {
return pt;
}
- public void setPt(AdjustPoint pt) {
+ @Override
+ public void setPt(AdjustPointIf pt) {
if (pt != null) {
this.pt.setX(pt.getX());
this.pt.setY(pt.getY());
@@ -60,14 +61,6 @@ public final class MoveToCommand implements PathCommand {
}
@Override
- public void execute(Path2D.Double path, Context ctx){
- double x = ctx.getValue(pt.getX());
- double y = ctx.getValue(pt.getY());
- path.moveTo(x, y);
- }
-
-
- @Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof MoveToCommand)) return false;
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/MoveToCommandIf.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/MoveToCommandIf.java
new file mode 100644
index 0000000000..a4232e117b
--- /dev/null
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/MoveToCommandIf.java
@@ -0,0 +1,35 @@
+/* ====================================================================
+ 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.sl.draw.geom;
+
+import java.awt.geom.Path2D;
+
+public interface MoveToCommandIf extends PathCommand {
+
+ AdjustPointIf getPt();
+
+ void setPt(AdjustPointIf pt);
+
+ @Override
+ default void execute(Path2D.Double path, Context ctx){
+ AdjustPointIf pt = getPt();
+ double x = ctx.getValue(pt.getX());
+ double y = ctx.getValue(pt.getY());
+ path.moveTo(x, y);
+ }
+}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/Outline.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/Outline.java
index 11e643dad2..59a9241b01 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/Outline.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/Outline.java
@@ -22,15 +22,15 @@ package org.apache.poi.sl.draw.geom;
import java.awt.Shape;
public class Outline {
- private Shape shape;
- private Path path;
+ private final Shape shape;
+ private final PathIf path;
- public Outline(Shape shape, Path path){
+ public Outline(Shape shape, PathIf path){
this.shape = shape;
this.path = path;
}
- public Path getPath(){
+ public PathIf getPath(){
return path;
}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/Path.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/Path.java
index d9b209c4de..5a06e7216e 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/Path.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/Path.java
@@ -58,7 +58,7 @@ import org.apache.poi.sl.usermodel.PaintStyle.PaintModifier;
*/
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "CT_Path2D", propOrder = {"closeOrMoveToOrLnTo"})
-public final class Path {
+public final class Path implements PathIf {
// @XmlElements({
// @XmlElement(name = "close", type = CTPath2DClose.class),
@@ -82,6 +82,7 @@ public final class Path {
+ @Override
public void addCommand(PathCommand cmd){
commands.add(cmd);
}
@@ -89,6 +90,7 @@ public final class Path {
/**
* Convert the internal represenation to java.awt.geom.Path2D
*/
+ @Override
public Path2D.Double getPath(Context ctx) {
Path2D.Double path = new Path2D.Double();
for(PathCommand cmd : commands) {
@@ -97,46 +99,57 @@ public final class Path {
return path;
}
+ @Override
public boolean isStroked(){
return stroke;
}
+ @Override
public void setStroke(boolean stroke) {
this.stroke = stroke;
}
+ @Override
public boolean isFilled(){
return fill != PaintModifier.NONE;
}
+ @Override
public PaintModifier getFill() {
return fill;
}
+ @Override
public void setFill(PaintModifier fill) {
this.fill = fill;
}
+ @Override
public long getW(){
return w;
}
+ @Override
public void setW(long w) {
this.w = w;
}
+ @Override
public long getH(){
return h;
}
+ @Override
public void setH(long h) {
this.h = h;
}
+ @Override
public boolean isExtrusionOk() {
return extrusionOk;
}
+ @Override
public void setExtrusionOk(boolean extrusionOk) {
this.extrusionOk = extrusionOk;
}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/PathIf.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/PathIf.java
new file mode 100644
index 0000000000..a02551e21d
--- /dev/null
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/PathIf.java
@@ -0,0 +1,55 @@
+/* ====================================================================
+ 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.sl.draw.geom;
+
+import java.awt.geom.Path2D;
+
+import org.apache.poi.sl.usermodel.PaintStyle;
+
+public interface PathIf {
+
+ void addCommand(PathCommand cmd);
+
+ /**
+ * Convert the internal represenation to java.awt.geom.Path2D
+ */
+ Path2D.Double getPath(Context ctx);
+
+ boolean isStroked();
+
+ void setStroke(boolean stroke);
+
+ boolean isFilled();
+
+ PaintStyle.PaintModifier getFill();
+
+ void setFill(PaintStyle.PaintModifier fill);
+
+ long getW();
+
+ void setW(long w);
+
+ long getH();
+
+ void setH(long h);
+
+ boolean isExtrusionOk();
+
+ void setExtrusionOk(boolean extrusionOk);
+
+} \ No newline at end of file
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/PresetGeometries.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/PresetGeometries.java
index acde02c945..0f5a490274 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/PresetGeometries.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/PresetGeometries.java
@@ -31,13 +31,9 @@ import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.stream.StreamSource;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import org.apache.poi.util.XMLHelper;
public final class PresetGeometries {
- private static final Logger LOG = LogManager.getLogger(PresetGeometries.class);
-
private final Map<String, CustomGeometry> map = new TreeMap<>();
private static class SingletonHelper{
@@ -57,7 +53,7 @@ public final class PresetGeometries {
try {
PresetParser p = new PresetParser(PresetParser.Mode.FILE);
p.parse(sr);
- p.getGeom().forEach(map::put);
+ map.putAll(p.getGeom());
} finally {
sr.close();
}
@@ -67,20 +63,6 @@ public final class PresetGeometries {
}
}
- /**
- * Convert a single CustomGeometry object, i.e. from xmlbeans
- */
- public static CustomGeometry convertCustomGeometry(XMLStreamReader staxReader) {
- try {
- PresetParser p = new PresetParser(PresetParser.Mode.SHAPE);
- p.parse(staxReader);
- return p.getGeom().values().stream().findFirst().orElse(null);
- } catch (XMLStreamException e) {
- LOG.atError().withThrowable(e).log("Unable to parse single custom geometry");
- return null;
- }
- }
-
public CustomGeometry get(String name) {
return name == null ? null : map.get(name);
}
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/QuadToCommand.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/QuadToCommand.java
index 4278a00274..1ec2a1dc86 100644
--- a/poi/src/main/java/org/apache/poi/sl/draw/geom/QuadToCommand.java
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/QuadToCommand.java
@@ -19,7 +19,6 @@
package org.apache.poi.sl.draw.geom;
-import java.awt.geom.Path2D;
import java.util.Objects;
/**
@@ -43,21 +42,33 @@ import java.util.Objects;
*/
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "CT_Path2DQuadBezierTo", propOrder = {"pt"})
-public final class QuadToCommand implements PathCommand {
+public final class QuadToCommand implements QuadToCommandIf {
// @XmlElement(required = true)
private final AdjustPoint pt1 = new AdjustPoint();
// @XmlElement(required = true)
private final AdjustPoint pt2 = new AdjustPoint();
- public void setPt1(AdjustPoint pt1) {
+ @Override
+ public AdjustPoint getPt1() {
+ return pt1;
+ }
+
+ @Override
+ public void setPt1(AdjustPointIf pt1) {
if (pt1 != null) {
this.pt1.setX(pt1.getX());
this.pt1.setY(pt1.getY());
}
}
- public void setPt2(AdjustPoint pt2) {
+ @Override
+ public AdjustPoint getPt2() {
+ return pt2;
+ }
+
+ @Override
+ public void setPt2(AdjustPointIf pt2) {
if (pt2 != null) {
this.pt2.setX(pt2.getX());
this.pt2.setY(pt2.getY());
@@ -65,15 +76,6 @@ public final class QuadToCommand implements PathCommand {
}
@Override
- public void execute(Path2D.Double path, Context ctx){
- double x1 = ctx.getValue(pt1.getX());
- double y1 = ctx.getValue(pt1.getY());
- double x2 = ctx.getValue(pt2.getX());
- double y2 = ctx.getValue(pt2.getY());
- path.quadTo(x1, y1, x2, y2);
- }
-
- @Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof QuadToCommand)) return false;
diff --git a/poi/src/main/java/org/apache/poi/sl/draw/geom/QuadToCommandIf.java b/poi/src/main/java/org/apache/poi/sl/draw/geom/QuadToCommandIf.java
new file mode 100644
index 0000000000..db060c27e3
--- /dev/null
+++ b/poi/src/main/java/org/apache/poi/sl/draw/geom/QuadToCommandIf.java
@@ -0,0 +1,42 @@
+/* ====================================================================
+ 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.sl.draw.geom;
+
+import java.awt.geom.Path2D;
+
+public interface QuadToCommandIf extends PathCommand {
+
+ AdjustPointIf getPt1();
+
+ void setPt1(AdjustPointIf pt1);
+
+ AdjustPointIf getPt2();
+
+ void setPt2(AdjustPointIf pt2);
+
+ @Override
+ default void execute(Path2D.Double path, Context ctx){
+ AdjustPointIf pt1 = getPt1();
+ double x1 = ctx.getValue(pt1.getX());
+ double y1 = ctx.getValue(pt1.getY());
+ AdjustPointIf pt2 = getPt2();
+ double x2 = ctx.getValue(pt2.getX());
+ double y2 = ctx.getValue(pt2.getY());
+ path.quadTo(x1, y1, x2, y2);
+ }
+}
diff --git a/poi/src/test/java/org/apache/poi/sl/draw/geom/TestPresetGeometries.java b/poi/src/test/java/org/apache/poi/sl/draw/geom/TestPresetGeometries.java
index 28849f77e9..6cb3360b68 100644
--- a/poi/src/test/java/org/apache/poi/sl/draw/geom/TestPresetGeometries.java
+++ b/poi/src/test/java/org/apache/poi/sl/draw/geom/TestPresetGeometries.java
@@ -24,10 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertSame;
import java.awt.geom.Path2D;
import java.awt.geom.Rectangle2D;
-import java.net.URL;
-import java.util.Enumeration;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
class TestPresetGeometries {
@@ -40,7 +37,7 @@ class TestPresetGeometries {
for(String name : shapes.keySet()) {
CustomGeometry geom = shapes.get(name);
Context ctx = new Context(geom, new Rectangle2D.Double(0, 0, 100, 100), presetName -> null);
- for(Path p : geom){
+ for(PathIf p : geom){
Path2D path = p.getPath(ctx);
assertNotNull(path);
}
@@ -49,24 +46,4 @@ class TestPresetGeometries {
// we get the same instance on further calls
assertSame(shapes, PresetGeometries.getInstance());
}
-
- @Disabled("problem solved? Turn back on if this debugging is still in process.")
- void testCheckXMLParser() throws Exception{
- // Gump reports a strange error because of an unavailable XML Parser, let's try to find out where
- // this comes from
- //
- Enumeration<URL> resources = this.getClass().getClassLoader().getResources("META-INF/services/javax.xml.stream.XMLEventFactory");
- printURLs(resources);
- resources = ClassLoader.getSystemResources("META-INF/services/javax.xml.stream.XMLEventFactory");
- printURLs(resources);
- resources = ClassLoader.getSystemResources("org/apache/poi/sl/draw/geom/presetShapeDefinitions.xml");
- printURLs(resources);
- }
-
- private void printURLs(Enumeration<URL> resources) {
- while(resources.hasMoreElements()) {
- URL url = resources.nextElement();
- System.out.println("URL: " + url);
- }
- }
}