From e3a960ad851e3b346172baebe6887f2858cf2c8b Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Fri, 14 Sep 2012 11:53:39 +0000 Subject: [PATCH] added relation for XSLF charts git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1384730 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/xslf/usermodel/XSLFChart.java | 110 ++++++++++++++++++ .../poi/xslf/usermodel/XSLFRelation.java | 9 +- 2 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java new file mode 100644 index 000000000..702d54427 --- /dev/null +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java @@ -0,0 +1,110 @@ +/* + * ==================================================================== + * 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.apache.poi.POIXMLDocumentPart; +import org.apache.poi.openxml4j.opc.PackagePart; +import org.apache.poi.openxml4j.opc.PackageRelationship; +import org.apache.poi.util.Beta; +import org.apache.poi.util.Internal; +import org.apache.xmlbeans.XmlException; +import org.apache.xmlbeans.XmlOptions; +import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart; +import org.openxmlformats.schemas.drawingml.x2006.chart.CTChartSpace; +import org.openxmlformats.schemas.drawingml.x2006.chart.ChartSpaceDocument; + +import javax.xml.namespace.QName; +import java.io.IOException; +import java.io.OutputStream; +import java.util.HashMap; +import java.util.Map; + +/** + * Represents a Chart in a .pptx presentation + * + * + */ +@Beta +public final class XSLFChart extends POIXMLDocumentPart { + + /** + * Root element of the Chart part + */ + private CTChartSpace chartSpace; + + /** + * The Chart within that + */ + private CTChart chart; + + /** + * Construct a chart from a package part. + * + * @param part the package part holding the chart data, + * the content type must be application/vnd.openxmlformats-officedocument.drawingml.chart+xml + * @param rel the package relationship holding this chart, + * the relationship type must be http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart + */ + protected XSLFChart(PackagePart part, PackageRelationship rel) throws IOException, XmlException { + super(part, rel); + + chartSpace = ChartSpaceDocument.Factory.parse(part.getInputStream()).getChartSpace(); + chart = chartSpace.getChart(); + } + + /** + * Return the underlying CTChartSpace bean, the root element of the Chart part. + * + * @return the underlying CTChartSpace bean + */ + @Internal + public CTChartSpace getCTChartSpace(){ + return chartSpace; + } + + /** + * Return the underlying CTChart bean, within the Chart Space + * + * @return the underlying CTChart bean + */ + @Internal + public CTChart getCTChart(){ + return chart; + } + + @Override + protected void commit() throws IOException { + XmlOptions xmlOptions = new XmlOptions(DEFAULT_XML_OPTIONS); + + xmlOptions.setSaveSyntheticDocumentElement(new QName(CTChartSpace.type.getName().getNamespaceURI(), "chartSpace", "c")); + Map map = new HashMap(); + map.put("http://schemas.openxmlformats.org/drawingml/2006/main", "a"); + map.put("http://schemas.openxmlformats.org/drawingml/2006/chart", "c"); + map.put("http://schemas.openxmlformats.org/officeDocument/2006/relationships", "r"); + xmlOptions.setSaveSuggestedPrefixes(map); + + PackagePart part = getPackagePart(); + OutputStream out = part.getOutputStream(); + chartSpace.save(out, xmlOptions); + out.close(); + } + + +} diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java index e23b5a336..1ec3ac2d8 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java @@ -139,7 +139,14 @@ public class XSLFRelation extends POIXMLRelation { "/ppt/drawings/vmlDrawing#.vml", null ); - + + public static final XSLFRelation CHART = new XSLFRelation( + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml", + "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart", + "/ppt/charts/chart#.xml", + XSLFChart.class + ); + public static final XSLFRelation IMAGE_EMF = new XSLFRelation( "image/x-emf", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",