aboutsummaryrefslogtreecommitdiffstats
path: root/src/ooxml/java/org/apache/poi/xssf/model
diff options
context:
space:
mode:
authorNick Burch <nick@apache.org>2015-07-22 00:04:59 +0000
committerNick Burch <nick@apache.org>2015-07-22 00:04:59 +0000
commitf0a360a7bcc8acc624d6b218161b786dd6f58e37 (patch)
treecea4cdac42f80de4aed5f63cb73c9cdd2dd1a713 /src/ooxml/java/org/apache/poi/xssf/model
parent4000f528a11e6e2b1a24d6bef95fd03702e7aef2 (diff)
downloadpoi-f0a360a7bcc8acc624d6b218161b786dd6f58e37.tar.gz
poi-f0a360a7bcc8acc624d6b218161b786dd6f58e37.zip
Allow creating of an empty Themes Table on request
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1692211 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml/java/org/apache/poi/xssf/model')
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java26
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java31
2 files changed, 56 insertions, 1 deletions
diff --git a/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java b/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
index 3937e3eeab..c891509274 100644
--- a/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
+++ b/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
@@ -35,7 +35,10 @@ import org.apache.poi.ss.usermodel.BuiltinFormats;
import org.apache.poi.ss.usermodel.FontFamily;
import org.apache.poi.ss.usermodel.FontScheme;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
+import org.apache.poi.xssf.usermodel.XSSFFactory;
import org.apache.poi.xssf.usermodel.XSSFFont;
+import org.apache.poi.xssf.usermodel.XSSFRelation;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder;
import org.apache.poi.xssf.usermodel.extensions.XSSFCellFill;
import org.apache.xmlbeans.XmlException;
@@ -57,7 +60,6 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPatternType;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.StyleSheetDocument;
-
/**
* Table of styles shared across all sheets in a workbook.
*/
@@ -79,6 +81,7 @@ public class StylesTable extends POIXMLDocumentPart {
private static final int MAXIMUM_STYLE_ID = SpreadsheetVersion.EXCEL2007.getMaxCellStyles();
private StyleSheetDocument doc;
+ private XSSFWorkbook workbook;
private ThemesTable theme;
/**
@@ -96,7 +99,17 @@ public class StylesTable extends POIXMLDocumentPart {
super(part, rel);
readFrom(part.getInputStream());
}
+
+ public void setWorkbook(XSSFWorkbook wb) {
+ this.workbook = wb;
+ }
+ /**
+ * Get the current Workbook's theme table, or null if the
+ * Workbook lacks any themes.
+ * <p>Use {@link #ensureThemesTable()} to have a themes table
+ * created if needed
+ */
public ThemesTable getTheme() {
return theme;
}
@@ -113,6 +126,17 @@ public class StylesTable extends POIXMLDocumentPart {
border.setThemesTable(theme);
}
}
+
+ /**
+ * If there isn't currently a {@link ThemesTable} for the
+ * current Workbook, then creates one and sets it up.
+ * After this, calls to {@link #getTheme()} won't give null
+ */
+ public void ensureThemesTable() {
+ if (theme != null) return;
+
+ theme = (ThemesTable)workbook.createRelationship(XSSFRelation.THEME, XSSFFactory.getInstance());
+ }
/**
* Read this shared styles table from an XML file.
diff --git a/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java b/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java
index bf58989ccb..c710e3576f 100644
--- a/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java
+++ b/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java
@@ -17,12 +17,14 @@
package org.apache.poi.xssf.model;
import java.io.IOException;
+import java.io.OutputStream;
import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackageRelationship;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.xmlbeans.XmlException;
+import org.apache.xmlbeans.XmlOptions;
import org.openxmlformats.schemas.drawingml.x2006.main.CTColor;
import org.openxmlformats.schemas.drawingml.x2006.main.CTColorScheme;
import org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument;
@@ -35,6 +37,15 @@ public class ThemesTable extends POIXMLDocumentPart {
private ThemeDocument theme;
/**
+ * Create a new, empty ThemesTable
+ */
+ public ThemesTable() {
+ super();
+ theme = ThemeDocument.Factory.newInstance();
+ theme.addNewTheme().addNewThemeElements();
+ }
+
+ /**
* Construct a ThemesTable.
* @param part A PackagePart.
* @param rel A PackageRelationship.
@@ -120,4 +131,24 @@ public class ThemesTable extends POIXMLDocumentPart {
// All done
}
+
+ /**
+ * Write this table out as XML.
+ *
+ * @param out The stream to write to.
+ * @throws IOException if an error occurs while writing.
+ */
+ public void writeTo(OutputStream out) throws IOException {
+ XmlOptions options = new XmlOptions(DEFAULT_XML_OPTIONS);
+
+ theme.save(out, options);
+ }
+
+ @Override
+ protected void commit() throws IOException {
+ PackagePart part = getPackagePart();
+ OutputStream out = part.getOutputStream();
+ writeTo(out);
+ out.close();
+ }
}