summaryrefslogtreecommitdiffstats
path: root/poi/src
diff options
context:
space:
mode:
authorAndreas Beeker <kiwiwings@apache.org>2021-10-03 21:05:19 +0000
committerAndreas Beeker <kiwiwings@apache.org>2021-10-03 21:05:19 +0000
commit9f7085a281871ec65e638c2ac497f5981e40823c (patch)
treef7382f03d7ac66fb47ac3162ff77b1ff8d2fbf89 /poi/src
parent99fe7a9635d1edf8678c9ff21f439ce4856da344 (diff)
downloadpoi-9f7085a281871ec65e638c2ac497f5981e40823c.tar.gz
poi-9f7085a281871ec65e638c2ac497f5981e40823c.zip
#65612 - XSLF CustomGeometry - replace XmlStreamReader access with XmlBeans delegate
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1893859 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'poi/src')
-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
29 files changed, 698 insertions, 315 deletions
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);
- }
- }
}