diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs
index 4ad8c933c..5227bd285 100644
--- a/.settings/org.eclipse.jdt.ui.prefs
+++ b/.settings/org.eclipse.jdt.ui.prefs
@@ -67,7 +67,7 @@ org.eclipse.jdt.ui.ignorelowercasenames=true
org.eclipse.jdt.ui.importorder=java;javax;org;com;
org.eclipse.jdt.ui.javadoc=false
org.eclipse.jdt.ui.keywordthis=false
-org.eclipse.jdt.ui.ondemandthreshold=10
+org.eclipse.jdt.ui.ondemandthreshold=20
org.eclipse.jdt.ui.overrideannotation=false
org.eclipse.jdt.ui.staticondemandthreshold=10
org.eclipse.jdt.ui.text.custom_code_templates=
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 bf58989cc..c710e3576 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;
@@ -34,6 +36,15 @@ import org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument;
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.
@@ -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();
+ }
}
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
index f90b48dfa..0d62135d6 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
@@ -153,8 +153,6 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable