diff options
-rw-r--r-- | poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java | 15 | ||||
-rw-r--r-- | poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFGraphicFrame.java | 36 | ||||
-rw-r--r-- | src/resources/devtools/forbidden-signatures-prod.txt | 6 | ||||
-rw-r--r-- | test-data/slideshow/SmartArt.pptx | bin | 0 -> 41382 bytes |
4 files changed, 51 insertions, 6 deletions
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java index e85e9608ec..d853d0bb2c 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java @@ -51,6 +51,7 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape; @Beta public class XSLFGraphicFrame extends XSLFShape implements GraphicalFrame<XSLFShape, XSLFTextParagraph> { private static final String DRAWINGML_CHART_URI = "http://schemas.openxmlformats.org/drawingml/2006/chart"; + private static final String DRAWINGML_DIAGRAM_URI = "http://schemas.openxmlformats.org/drawingml/2006/diagram"; private static final Logger LOG = LogManager.getLogger(XSLFGraphicFrame.class); /*package*/ XSLFGraphicFrame(CTGraphicalObjectFrame shape, XSLFSheet sheet){ @@ -169,6 +170,14 @@ public class XSLFGraphicFrame extends XSLFShape implements GraphicalFrame<XSLFSh return uri.equals(DRAWINGML_CHART_URI); } + /** + * @since POI 5.2.0 + */ + public boolean hasDiagram() { + String uri = getGraphicalData().getUri(); + return uri.equals(DRAWINGML_DIAGRAM_URI); + } + private CTGraphicalObjectData getGraphicalData() { return ((CTGraphicalObjectFrame)getXmlObject()).getGraphic().getGraphicData(); } @@ -200,7 +209,7 @@ public class XSLFGraphicFrame extends XSLFShape implements GraphicalFrame<XSLFSh CTGraphicalObjectData data = getGraphicalData(); String uri = data.getUri(); - if(uri.equals("http://schemas.openxmlformats.org/drawingml/2006/diagram")){ + if(uri.equals(DRAWINGML_DIAGRAM_URI)){ copyDiagram(data, (XSLFGraphicFrame)sh); } if(uri.equals(DRAWINGML_CHART_URI)){ copyChart(data, (XSLFGraphicFrame)sh); @@ -235,9 +244,9 @@ public class XSLFGraphicFrame extends XSLFShape implements GraphicalFrame<XSLFSh // TODO should be moved to a sub-class private void copyDiagram(CTGraphicalObjectData objData, XSLFGraphicFrame srcShape){ - String xpath = "declare namespace dgm='http://schemas.openxmlformats.org/drawingml/2006/diagram' $this//dgm:relIds"; + String xpath = "declare namespace dgm='" + DRAWINGML_DIAGRAM_URI + "' $this//dgm:relIds"; XmlObject[] obj = objData.selectPath(xpath); - if(obj != null && obj.length == 1){ + if(obj != null && obj.length == 1) { XmlCursor c = obj[0].newCursor(); XSLFSheet sheet = srcShape.getSheet(); diff --git a/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFGraphicFrame.java b/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFGraphicFrame.java new file mode 100644 index 0000000000..e58b528b13 --- /dev/null +++ b/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFGraphicFrame.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.usermodel; + +import org.junit.jupiter.api.Test; +import java.io.IOException; + +import static org.junit.jupiter.api.Assertions.*; +import static org.apache.poi.xslf.XSLFTestDataSamples.openSampleDocument; + +class TestXSLFGraphicFrame { + + @Test + void testHasDiagram() throws IOException { + try (XMLSlideShow ppt = openSampleDocument("SmartArt.pptx")) { + XSLFSlide slide = ppt.getSlides().get(0); + XSLFGraphicFrame gf = (XSLFGraphicFrame) slide.getShapes().get(0); + + assertTrue(gf.hasDiagram()); + } + } +}
\ No newline at end of file diff --git a/src/resources/devtools/forbidden-signatures-prod.txt b/src/resources/devtools/forbidden-signatures-prod.txt index fa1a846088..c2b02a219c 100644 --- a/src/resources/devtools/forbidden-signatures-prod.txt +++ b/src/resources/devtools/forbidden-signatures-prod.txt @@ -27,6 +27,6 @@ java.lang.System#gc() @ Please do not try to stop the world -java.lang.Throwable#printStackTrace() @ Please use POILogger for exceptions -java.lang.Throwable#printStackTrace(java.io.PrintStream) @ Please use POILogger for exceptions -java.lang.Throwable#printStackTrace(java.io.PrintWriter) @ Please use POILogger for exceptions
\ No newline at end of file +java.lang.Throwable#printStackTrace() @ Please use Log4J 2.x for exceptions +java.lang.Throwable#printStackTrace(java.io.PrintStream) @ Please use Log4J 2.x for exceptions +java.lang.Throwable#printStackTrace(java.io.PrintWriter) @ Please use Log4J 2.x for exceptions
\ No newline at end of file diff --git a/test-data/slideshow/SmartArt.pptx b/test-data/slideshow/SmartArt.pptx Binary files differnew file mode 100644 index 0000000000..7b7731d78f --- /dev/null +++ b/test-data/slideshow/SmartArt.pptx |