Author: gwoolsey
Date: Fri May 12 18:01:32 2017
New Revision: 1795002
URL: http://svn.apache.org/viewvc?rev=1795002&view=rev
Log: (empty)
Added:
poi/trunk/src/java/org/apache/poi/ss/usermodel/DifferentialStyleProvider.java
(with props)
poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyle.java (with
props)
poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyleInfo.java (with
props)
poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyleType.java (with
props)
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFBuiltinTableStyle.java
(with props)
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDxfStyleProvider.java
(with props)
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTableStyle.java
(with props)
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTableStyleInfo.java
(with props)
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestTableStyles.java
(with props)
poi/trunk/src/resources/ooxml/org/apache/poi/xssf/
poi/trunk/src/resources/ooxml/org/apache/poi/xssf/usermodel/
poi/trunk/src/resources/ooxml/org/apache/poi/xssf/usermodel/presetTableStyles.xml
(with props)
poi/trunk/test-data/spreadsheet/tableStyle.xlsx (with props)
poi/trunk/test-data/spreadsheet/~$tableStyle.xlsx (with props)
Modified:
poi/trunk/.classpath
poi/trunk/src/java/org/apache/poi/ss/usermodel/ConditionalFormattingRule.java
poi/trunk/src/java/org/apache/poi/ss/usermodel/Table.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java
Modified: poi/trunk/.classpath
URL:
http://svn.apache.org/viewvc/poi/trunk/.classpath?rev=1795002&r1=1795001&r2=1795002&view=diff
==============================================================================
--- poi/trunk/.classpath (original)
+++ poi/trunk/.classpath Fri May 12 18:01:32 2017
@@ -18,7 +18,7 @@
<classpathentry kind="lib" path="lib/ant-1.9.4.jar"/>
<classpathentry kind="lib" path="lib/ant-launcher-1.9.4.jar"/>
<classpathentry kind="lib" path="lib/log4j-1.2.17.jar"/>
- <classpathentry exported="true" kind="lib"
path="ooxml-lib/xmlbeans-2.6.0.jar"/>
+ <classpathentry exported="true" kind="lib"
path="ooxml-lib/xmlbeans-2.6.0.jar" sourcepath="ooxml-lib/xmlbeans-2.6.0.jar"/>
<classpathentry kind="lib" path="lib/hamcrest-core-1.3.jar"/>
<classpathentry kind="lib" path="lib/junit-4.12.jar"/>
<classpathentry kind="lib" path="ooxml-lib/curvesapi-1.04.jar"/>
Modified:
poi/trunk/src/java/org/apache/poi/ss/usermodel/ConditionalFormattingRule.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/usermodel/ConditionalFormattingRule.java?rev=1795002&r1=1795001&r2=1795002&view=diff
==============================================================================
---
poi/trunk/src/java/org/apache/poi/ss/usermodel/ConditionalFormattingRule.java
(original)
+++
poi/trunk/src/java/org/apache/poi/ss/usermodel/ConditionalFormattingRule.java
Fri May 12 18:01:32 2017
@@ -22,7 +22,7 @@ package org.apache.poi.ss.usermodel;
/**
* Represents a description of a conditional formatting rule
*/
-public interface ConditionalFormattingRule {
+public interface ConditionalFormattingRule extends DifferentialStyleProvider {
/**
* Create a new border formatting structure if it does not exist,
* otherwise just return existing object.
Added:
poi/trunk/src/java/org/apache/poi/ss/usermodel/DifferentialStyleProvider.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/usermodel/DifferentialStyleProvider.java?rev=1795002&view=auto
==============================================================================
---
poi/trunk/src/java/org/apache/poi/ss/usermodel/DifferentialStyleProvider.java
(added)
+++
poi/trunk/src/java/org/apache/poi/ss/usermodel/DifferentialStyleProvider.java
Fri May 12 18:01:32 2017
@@ -0,0 +1,32 @@
+package org.apache.poi.ss.usermodel;
+
+/**
+ * Interface for classes providing differential style definitions, such as
conditional format rules
+ * and table/pivot table styles.
+ *
+ * @since 3.17 beta 1
+ */
+public interface DifferentialStyleProvider {
+
+ /**
+ * @return - border formatting object if defined, <code>null</code>
otherwise
+ */
+ BorderFormatting getBorderFormatting();
+
+ /**
+ * @return - font formatting object if defined, <code>null</code>
otherwise
+ */
+ FontFormatting getFontFormatting();
+
+ /**
+ *
+ * @return number format defined for this rule, or null if the cell
default should be used
+ */
+ ExcelNumberFormat getNumberFormat();
+
+ /**
+ * @return - pattern formatting object if defined, <code>null</code>
otherwise
+ */
+ PatternFormatting getPatternFormatting();
+
+}
Propchange:
poi/trunk/src/java/org/apache/poi/ss/usermodel/DifferentialStyleProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: poi/trunk/src/java/org/apache/poi/ss/usermodel/Table.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/usermodel/Table.java?rev=1795002&r1=1795001&r2=1795002&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/usermodel/Table.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/usermodel/Table.java Fri May 12
18:01:32 2017
@@ -77,5 +77,9 @@ public interface Table {
*/
boolean isHasTotalsRow();
-
+ /**
+ * @return TableStyleInfo for this instance
+ * @since 3.17 beta 1
+ */
+ TableStyleInfo getStyle();
}
Added: poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyle.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyle.java?rev=1795002&view=auto
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyle.java (added)
+++ poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyle.java Fri May 12
18:01:32 2017
@@ -0,0 +1,23 @@
+package org.apache.poi.ss.usermodel;
+
+/**
+ * Data table style definition. Includes style elements for various table
components.
+ * Any number of style elements may be represented, and any cell may be styled
by
+ * multiple elements. The order of elements in {@link TableStyleType} defines
precedence.
+ *
+ * @since 3.17 beta 1
+ */
+public interface TableStyle {
+
+ /**
+ * @return name (may be a builtin name)
+ */
+ String getName();
+
+ /**
+ *
+ * @param type
+ * @return style definition for the given type, or null if not defined in
this style.
+ */
+ DifferentialStyleProvider getStyle(TableStyleType type);
+}
Propchange: poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyle.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyleInfo.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyleInfo.java?rev=1795002&view=auto
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyleInfo.java (added)
+++ poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyleInfo.java Fri May
12 18:01:32 2017
@@ -0,0 +1,40 @@
+package org.apache.poi.ss.usermodel;
+
+/**
+ * style information for a specific table instance, referencing the document
style
+ * and indicating which optional portions of the style to apply.
+ *
+ * @since 3.17 beta 1
+ */
+public interface TableStyleInfo {
+
+ /**
+ * @return true if alternating column styles should be applied
+ */
+ boolean isShowColumnStripes();
+
+ /**
+ * @return true if alternating row styles should be applied
+ */
+ boolean isShowRowStripes();
+
+ /**
+ * @return true if the distinct first column style should be applied
+ */
+ boolean isShowFirstColumn();
+
+ /**
+ * @return true if the distinct last column style should be applied
+ */
+ boolean isShowLastColumn();
+
+ /**
+ * @return the name of the style (may reference a built-in style)
+ */
+ String getName();
+
+ /**
+ * @return style definition
+ */
+ TableStyle getStyle();
+}
Propchange: poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyleInfo.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyleType.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyleType.java?rev=1795002&view=auto
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyleType.java (added)
+++ poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyleType.java Fri May
12 18:01:32 2017
@@ -0,0 +1,49 @@
+package org.apache.poi.ss.usermodel;
+
+/**
+ * Ordered list of table style elements, for both data tables and pivot tables.
+ * Some elements only apply to pivot tables, but any style definition can omit
any number,
+ * so having them in one list should not be a problem.
+ * <p/>
+ * The order is the specification order of application, with later elements
overriding previous
+ * ones, if style properties conflict.
+ * <p/>
+ * Processing could iterate bottom-up if looking for specific properties, and
stop when the
+ * first style is found defining a value for that property.
+ * <p/>
+ * Enum names match the OOXML spec values exactly, so {@link #valueOf(String)}
will work.
+ *
+ * @since 3.17 beta 1
+ */
+public enum TableStyleType {
+
+ wholeTable,
+ headerRow,
+ totalRow,
+ firstColumn,
+ lastColumn,
+ firstRowStripe,
+ secondRowStripe,
+ firstColumnStripe,
+ secondColumnStripe,
+ firstHeaderCell,
+ lastHeaderCell,
+ firstTotalCell,
+ lastTotalCell,
+ firstSubtotalColumn,
+ secondSubtotalColumn,
+ thirdSubtotalColumn,
+ firstSubtotalRow,
+ secondSubtotalRow,
+ thirdSubtotalRow,
+ blankRow,
+ firstColumnSubheading,
+ secondColumnSubheading,
+ thirdColumnSubheading,
+ firstRowSubheading,
+ secondRowSubheading,
+ thirdRowSubheading,
+ pageFieldLabels,
+ pageFieldValues,
+ ;
+}
Propchange: poi/trunk/src/java/org/apache/poi/ss/usermodel/TableStyleType.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java?rev=1795002&r1=1795001&r2=1795002&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
(original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java Fri May
12 18:01:32 2017
@@ -25,6 +25,7 @@ import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -37,11 +38,14 @@ import org.apache.poi.ss.SpreadsheetVers
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.ss.usermodel.TableStyle;
import org.apache.poi.util.Internal;
+import org.apache.poi.xssf.usermodel.XSSFBuiltinTableStyle;
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.XSSFTableStyle;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder;
import org.apache.poi.xssf.usermodel.extensions.XSSFCellFill;
@@ -59,6 +63,8 @@ import org.openxmlformats.schemas.spread
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTNumFmt;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTNumFmts;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTStylesheet;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableStyle;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableStyles;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPatternType;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.StyleSheetDocument;
@@ -75,6 +81,7 @@ public class StylesTable extends POIXMLD
private final List<CTXf> xfs = new ArrayList<CTXf>();
private final List<CTDxf> dxfs = new ArrayList<CTDxf>();
+ private final Map<String, TableStyle> tableStyles = new HashMap<String,
TableStyle>();
/**
* The first style id available for use as a custom style
@@ -189,7 +196,7 @@ public class StylesTable extends POIXMLD
* @param is The input stream containing the XML document.
* @throws IOException if an error occurs while reading.
*/
- protected void readFrom(InputStream is) throws IOException {
+ public void readFrom(InputStream is) throws IOException {
try {
doc = StyleSheetDocument.Factory.parse(is, DEFAULT_XML_OPTIONS);
@@ -237,6 +244,13 @@ public class StylesTable extends POIXMLD
CTDxfs styleDxfs = styleSheet.getDxfs();
if(styleDxfs != null)
dxfs.addAll(Arrays.asList(styleDxfs.getDxfArray()));
+ CTTableStyles ctTableStyles = styleSheet.getTableStyles();
+ if (ctTableStyles != null) {
+ for (CTTableStyle style :
Arrays.asList(ctTableStyles.getTableStyleArray())) {
+ tableStyles.put(style.getName(), new
XSSFTableStyle(styleDxfs, style));
+ }
+ }
+
} catch (XmlException e) {
throw new IOException(e.getLocalizedMessage());
}
@@ -766,7 +780,33 @@ public class StylesTable extends POIXMLD
this.dxfs.add(dxf);
return this.dxfs.size();
}
-
+
+ /**
+ * NOTE: this only returns explicitly defined styles
+ * @param name of the table style
+ * @return defined style, or null if not explicitly defined
+ *
+ * @since 3.17 beta 1
+ */
+ public TableStyle getExplicitTableStyle(String name) {
+ return tableStyles.get(name);
+ }
+
+ /**
+ * @param name of the table style
+ * @return defined style, either explicit or built-in, or null if not found
+ *
+ * @since 3.17 beta 1
+ */
+ public TableStyle getTableStyle(String name) {
+ if (name == null) return null;
+ try {
+ return XSSFBuiltinTableStyle.valueOf(name).getStyle();
+ } catch (IllegalArgumentException e) {
+ return getExplicitTableStyle(name);
+ }
+ }
+
/**
* Create a cell style in this style table.
* Note - End users probably want to call {@link
XSSFWorkbook#createCellStyle()}
Added:
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFBuiltinTableStyle.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFBuiltinTableStyle.java?rev=1795002&view=auto
==============================================================================
---
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFBuiltinTableStyle.java
(added)
+++
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFBuiltinTableStyle.java
Fri May 12 18:01:32 2017
@@ -0,0 +1,411 @@
+package org.apache.poi.xssf.usermodel;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.poi.ss.usermodel.TableStyle;
+import org.apache.poi.util.DocumentHelper;
+import org.apache.poi.util.IOUtils;
+import org.apache.poi.xssf.model.StylesTable;
+import org.apache.xmlbeans.XmlOptions;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDxfs;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableStyle;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.ls.DOMImplementationLS;
+import org.w3c.dom.ls.LSSerializer;
+
+/**
+ * Table style names defined in the OOXML spec.
+ * The actual styling is defined in presetTableStyles.xml
+ */
+public enum XSSFBuiltinTableStyle {
+ /***/
+ TableStyleDark1,
+ /***/
+ TableStyleDark2,
+ /***/
+ TableStyleDark3,
+ /***/
+ TableStyleDark4,
+ /***/
+ TableStyleDark5,
+ /***/
+ TableStyleDark6,
+ /***/
+ TableStyleDark7,
+ /***/
+ TableStyleDark8,
+ /***/
+ TableStyleDark9,
+ /***/
+ TableStyleDark10,
+ /***/
+ TableStyleDark11,
+ /***/
+ TableStyleLight1,
+ /***/
+ TableStyleLight2,
+ /***/
+ TableStyleLight3,
+ /***/
+ TableStyleLight4,
+ /***/
+ TableStyleLight5,
+ /***/
+ TableStyleLight6,
+ /***/
+ TableStyleLight7,
+ /***/
+ TableStyleLight8,
+ /***/
+ TableStyleLight9,
+ /***/
+ TableStyleLight10,
+ /***/
+ TableStyleLight11,
+ /***/
+ TableStyleLight12,
+ /***/
+ TableStyleLight13,
+ /***/
+ TableStyleLight14,
+ /***/
+ TableStyleLight15,
+ /***/
+ TableStyleLight16,
+ /***/
+ TableStyleLight17,
+ /***/
+ TableStyleLight18,
+ /***/
+ TableStyleLight19,
+ /***/
+ TableStyleLight20,
+ /***/
+ TableStyleLight21,
+ /***/
+ TableStyleMedium1,
+ /***/
+ TableStyleMedium2,
+ /***/
+ TableStyleMedium3,
+ /***/
+ TableStyleMedium4,
+ /***/
+ TableStyleMedium5,
+ /***/
+ TableStyleMedium6,
+ /***/
+ TableStyleMedium7,
+ /***/
+ TableStyleMedium8,
+ /***/
+ TableStyleMedium9,
+ /***/
+ TableStyleMedium10,
+ /***/
+ TableStyleMedium11,
+ /***/
+ TableStyleMedium12,
+ /***/
+ TableStyleMedium13,
+ /***/
+ TableStyleMedium14,
+ /***/
+ TableStyleMedium15,
+ /***/
+ TableStyleMedium16,
+ /***/
+ TableStyleMedium17,
+ /***/
+ TableStyleMedium18,
+ /***/
+ TableStyleMedium19,
+ /***/
+ TableStyleMedium20,
+ /***/
+ TableStyleMedium21,
+ /***/
+ TableStyleMedium22,
+ /***/
+ TableStyleMedium23,
+ /***/
+ TableStyleMedium24,
+ /***/
+ TableStyleMedium25,
+ /***/
+ TableStyleMedium26,
+ /***/
+ TableStyleMedium27,
+ /***/
+ TableStyleMedium28,
+ /***/
+ PivotStyleMedium1,
+ /***/
+ PivotStyleMedium2,
+ /***/
+ PivotStyleMedium3,
+ /***/
+ PivotStyleMedium4,
+ /***/
+ PivotStyleMedium5,
+ /***/
+ PivotStyleMedium6,
+ /***/
+ PivotStyleMedium7,
+ /***/
+ PivotStyleMedium8,
+ /***/
+ PivotStyleMedium9,
+ /***/
+ PivotStyleMedium10,
+ /***/
+ PivotStyleMedium11,
+ /***/
+ PivotStyleMedium12,
+ /***/
+ PivotStyleMedium13,
+ /***/
+ PivotStyleMedium14,
+ /***/
+ PivotStyleMedium15,
+ /***/
+ PivotStyleMedium16,
+ /***/
+ PivotStyleMedium17,
+ /***/
+ PivotStyleMedium18,
+ /***/
+ PivotStyleMedium19,
+ /***/
+ PivotStyleMedium20,
+ /***/
+ PivotStyleMedium21,
+ /***/
+ PivotStyleMedium22,
+ /***/
+ PivotStyleMedium23,
+ /***/
+ PivotStyleMedium24,
+ /***/
+ PivotStyleMedium25,
+ /***/
+ PivotStyleMedium26,
+ /***/
+ PivotStyleMedium27,
+ /***/
+ PivotStyleMedium28,
+ /***/
+ PivotStyleLight1,
+ /***/
+ PivotStyleLight2,
+ /***/
+ PivotStyleLight3,
+ /***/
+ PivotStyleLight4,
+ /***/
+ PivotStyleLight5,
+ /***/
+ PivotStyleLight6,
+ /***/
+ PivotStyleLight7,
+ /***/
+ PivotStyleLight8,
+ /***/
+ PivotStyleLight9,
+ /***/
+ PivotStyleLight10,
+ /***/
+ PivotStyleLight11,
+ /***/
+ PivotStyleLight12,
+ /***/
+ PivotStyleLight13,
+ /***/
+ PivotStyleLight14,
+ /***/
+ PivotStyleLight15,
+ /***/
+ PivotStyleLight16,
+ /***/
+ PivotStyleLight17,
+ /***/
+ PivotStyleLight18,
+ /***/
+ PivotStyleLight19,
+ /***/
+ PivotStyleLight20,
+ /***/
+ PivotStyleLight21,
+ /***/
+ PivotStyleLight22,
+ /***/
+ PivotStyleLight23,
+ /***/
+ PivotStyleLight24,
+ /***/
+ PivotStyleLight25,
+ /***/
+ PivotStyleLight26,
+ /***/
+ PivotStyleLight27,
+ /***/
+ PivotStyleLight28,
+ /***/
+ PivotStyleDark1,
+ /***/
+ PivotStyleDark2,
+ /***/
+ PivotStyleDark3,
+ /***/
+ PivotStyleDark4,
+ /***/
+ PivotStyleDark5,
+ /***/
+ PivotStyleDark6,
+ /***/
+ PivotStyleDark7,
+ /***/
+ PivotStyleDark8,
+ /***/
+ PivotStyleDark9,
+ /***/
+ PivotStyleDark10,
+ /***/
+ PivotStyleDark11,
+ /***/
+ PivotStyleDark12,
+ /***/
+ PivotStyleDark13,
+ /***/
+ PivotStyleDark14,
+ /***/
+ PivotStyleDark15,
+ /***/
+ PivotStyleDark16,
+ /***/
+ PivotStyleDark17,
+ /***/
+ PivotStyleDark18,
+ /***/
+ PivotStyleDark19,
+ /***/
+ PivotStyleDark20,
+ /***/
+ PivotStyleDark21,
+ /***/
+ PivotStyleDark22,
+ /***/
+ PivotStyleDark23,
+ /***/
+ PivotStyleDark24,
+ /***/
+ PivotStyleDark25,
+ /***/
+ PivotStyleDark26,
+ /***/
+ PivotStyleDark27,
+ /***/
+ PivotStyleDark28,
+ ;
+
+ private static final Map<XSSFBuiltinTableStyle, TableStyle> styleMap = new
HashMap<XSSFBuiltinTableStyle, TableStyle>(60);
+
+ private XSSFBuiltinTableStyle() {
+ }
+
+ /**
+ * @return built-in {@link TableStyle} definition
+ */
+ public TableStyle getStyle() {
+ init();
+ return styleMap.get(this);
+ }
+
+ /**
+ * NOTE: only checks by name, not definition.
+ * @param style
+ * @return true if the style represents a built-in style, false if it is
null or a custom style
+ */
+ public static boolean isBuiltinStyle(TableStyle style) {
+ if (style == null) return false;
+ try {
+ XSSFBuiltinTableStyle.valueOf(style.getName());
+ return true;
+ } catch (IllegalArgumentException e) {
+ return false;
+ }
+ }
+ /**
+ * Only init once - thus the synchronized. Lazy, after creating instances,
+ * and only when a style is actually needed, to avoid overhead for uses
+ * that don't need the actual style definitions.
+ * <p/>
+ * Public so clients can initialize the map on startup rather than lazily
+ * during evaluation if desired.
+ */
+ public static final synchronized void init() {
+ if (! styleMap.isEmpty()) return;
+
+ /*
+ * initialize map. Every built-in has this format:
+ * <styleName>
+ * <dxfs>
+ * <dxf>...</dxf>
+ * ...
+ * </dxfs>
+ * <tableStyles count="1">
+ * <tableStyle>...</tableStyle>
+ * </tableStyles>
+ * </styleName>
+ */
+ try {
+ final InputStream is =
XSSFBuiltinTableStyle.class.getResourceAsStream("presetTableStyles.xml");
+ try {
+ final Document doc = DocumentHelper.readDocument(is);
+ final NodeList styleNodes =
doc.getDocumentElement().getChildNodes();
+ for (int i=0; i < styleNodes.getLength(); i++) {
+ final Node node = styleNodes.item(i);
+ if (node.getNodeType() != Node.ELEMENT_NODE) continue; //
only care about elements
+ final Element tag = (Element) node;
+ String styleName = tag.getTagName();
+ Node dxfsNode = tag.getElementsByTagName("dxfs").item(0);
+ Node tableStyleNode =
tag.getElementsByTagName("tableStyles").item(0);
+
+ // hack because I can't figure out how to get XMLBeans to
parse a sub-element in a standalone manner
+ // - build a fake styles.xml file with just this built-in
+ StylesTable styles = new StylesTable();
+ styles.readFrom(new
ByteArrayInputStream(styleXML(dxfsNode,
tableStyleNode).getBytes(Charset.forName("UTF-8"))));
+ styleMap.put(XSSFBuiltinTableStyle.valueOf(styleName),
styles.getExplicitTableStyle(styleName));
+ }
+ } finally {
+ IOUtils.closeQuietly(is);
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private static String styleXML(Node dxfsNode, Node tableStyleNode) {
+ DOMImplementationLS lsImpl =
(DOMImplementationLS)dxfsNode.getOwnerDocument().getImplementation().getFeature("LS",
"3.0");
+ LSSerializer lsSerializer = lsImpl.createLSSerializer();
+ lsSerializer.getDomConfig().setParameter("xml-declaration", false);
+ StringBuilder sb = new StringBuilder();
+ sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"
standalone=\"yes\"?>\n")
+ .append("<styleSheet
xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" "
+ +
"xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" "
+ +
"xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\" "
+ +
"xmlns:x16r2=\"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main\"
"
+ + "mc:Ignorable=\"x14ac x16r2\">\n");
+ sb.append(lsSerializer.writeToString(dxfsNode));
+ sb.append(lsSerializer.writeToString(tableStyleNode));
+ sb.append("</styleSheet>");
+ return sb.toString();
+ }
+}
Propchange:
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFBuiltinTableStyle.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDxfStyleProvider.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDxfStyleProvider.java?rev=1795002&view=auto
==============================================================================
---
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDxfStyleProvider.java
(added)
+++
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDxfStyleProvider.java
Fri May 12 18:01:32 2017
@@ -0,0 +1,59 @@
+package org.apache.poi.xssf.usermodel;
+
+import org.apache.poi.ss.usermodel.BorderFormatting;
+import org.apache.poi.ss.usermodel.DifferentialStyleProvider;
+import org.apache.poi.ss.usermodel.ExcelNumberFormat;
+import org.apache.poi.ss.usermodel.FontFormatting;
+import org.apache.poi.ss.usermodel.PatternFormatting;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDxf;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTNumFmt;
+
+/**
+ * Style based on a dxf record - e.g. table style element or conditional
formatting rule
+ */
+public class XSSFDxfStyleProvider implements DifferentialStyleProvider {
+
+ private final BorderFormatting border;
+ private final FontFormatting font;
+ private final ExcelNumberFormat number;
+ private final PatternFormatting fill;
+
+ /**
+ * @param dxf
+ */
+ public XSSFDxfStyleProvider(CTDxf dxf) {
+ if (dxf == null) {
+ border = null;
+ font = null;
+ number = null;
+ fill = null;
+ } else {
+ border = dxf.isSetBorder() ? new
XSSFBorderFormatting(dxf.getBorder()) : null;
+ font = dxf.isSetFont() ? new XSSFFontFormatting(dxf.getFont()) :
null;
+ if (dxf.isSetNumFmt()) {
+ CTNumFmt numFmt = dxf.getNumFmt();
+ number = new ExcelNumberFormat((int) numFmt.getNumFmtId(),
numFmt.getFormatCode());
+ } else {
+ number = null;
+ }
+ fill = dxf.isSetFill() ? new XSSFPatternFormatting(dxf.getFill())
: null;
+ }
+ }
+
+ public BorderFormatting getBorderFormatting() {
+ return border;
+ }
+
+ public FontFormatting getFontFormatting() {
+ return font;
+ }
+
+ public ExcelNumberFormat getNumberFormat() {
+ return number;
+ }
+
+ public PatternFormatting getPatternFormatting() {
+ return fill;
+ }
+
+}
Propchange:
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDxfStyleProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java?rev=1795002&r1=1795001&r2=1795002&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java
(original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java Fri
May 12 18:01:32 2017
@@ -31,6 +31,7 @@ import java.util.Locale;
import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.ss.usermodel.Table;
+import org.apache.poi.ss.usermodel.TableStyleInfo;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.util.Internal;
import org.apache.poi.util.StringUtil;
@@ -444,4 +445,13 @@ public class XSSFTable extends POIXMLDoc
public int getEndRowIndex() {
return getEndCellReference().getRow();
}
+
+ /**
+ *
+ * @since 3.17 beta 1
+ */
+ public TableStyleInfo getStyle() {
+ if (! ctTable.isSetTableStyleInfo()) return null;
+ return new XSSFTableStyleInfo(((XSSFSheet)
getParent()).getWorkbook().getStylesSource(), ctTable.getTableStyleInfo());
+ }
}
Added:
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTableStyle.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTableStyle.java?rev=1795002&view=auto
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTableStyle.java
(added)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTableStyle.java
Fri May 12 18:01:32 2017
@@ -0,0 +1,54 @@
+package org.apache.poi.xssf.usermodel;
+
+import java.util.EnumMap;
+import java.util.Map;
+
+import org.apache.poi.ss.usermodel.DifferentialStyleProvider;
+import org.apache.poi.ss.usermodel.TableStyle;
+import org.apache.poi.ss.usermodel.TableStyleType;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDxf;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDxfs;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableStyle;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableStyleElement;
+
+/**
+ * {@link TableStyle} implementation for styles defined in the OOXML
styles.xml.
+ * Also used for built-in styles via dummy XML generated from
presetTableStyles.xml.
+ */
+public class XSSFTableStyle implements TableStyle {
+
+ private final String name;
+ private final Map<TableStyleType, DifferentialStyleProvider> elementMap =
new EnumMap<TableStyleType, DifferentialStyleProvider>(TableStyleType.class);
+
+ /**
+ * @param dxfs
+ * @param tableStyle
+ */
+ public XSSFTableStyle(CTDxfs dxfs, CTTableStyle tableStyle) {
+ this.name = tableStyle.getName();
+ for (CTTableStyleElement element :
tableStyle.getTableStyleElementList()) {
+ TableStyleType type =
TableStyleType.valueOf(element.getType().toString());
+ DifferentialStyleProvider dstyle = null;
+ if (element.isSetDxfId()) {
+ int idx = (int) element.getDxfId() -1;
+ CTDxf dxf;
+ if (idx >= 0 && idx < dxfs.getCount()) {
+ dxf = dxfs.getDxfArray(idx);
+ } else {
+ dxf = null;
+ }
+ if (dxf != null) dstyle = new XSSFDxfStyleProvider(dxf);
+ }
+ elementMap.put(type, dstyle);
+ }
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public DifferentialStyleProvider getStyle(TableStyleType type) {
+ return elementMap.get(type);
+ }
+
+}
\ No newline at end of file
Propchange:
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTableStyle.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTableStyleInfo.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTableStyleInfo.java?rev=1795002&view=auto
==============================================================================
---
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTableStyleInfo.java
(added)
+++
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTableStyleInfo.java
Fri May 12 18:01:32 2017
@@ -0,0 +1,55 @@
+package org.apache.poi.xssf.usermodel;
+
+import org.apache.poi.ss.usermodel.TableStyle;
+import org.apache.poi.ss.usermodel.TableStyleInfo;
+import org.apache.poi.xssf.model.StylesTable;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableStyleInfo;
+
+/**
+ * Wrapper for the CT class, to cache values and add style lookup
+ */
+public class XSSFTableStyleInfo implements TableStyleInfo {
+
+ private final boolean columnStripes;
+ private final boolean rowStripes;
+ private final boolean firstColumn;
+ private final boolean lastColumn;
+ private final TableStyle style;
+
+ /**
+ * @param stylesTable
+ * @param tableStyleInfo
+ */
+ public XSSFTableStyleInfo(StylesTable stylesTable, CTTableStyleInfo
tableStyleInfo) {
+ this.columnStripes = tableStyleInfo.getShowColumnStripes();
+ this.rowStripes = tableStyleInfo.getShowRowStripes();
+ this.firstColumn = tableStyleInfo.getShowFirstColumn();
+ this.lastColumn = tableStyleInfo.getShowLastColumn();
+ this.style = stylesTable.getTableStyle(tableStyleInfo.getName());
+ }
+
+ public boolean isShowColumnStripes() {
+ return columnStripes;
+ }
+
+ public boolean isShowRowStripes() {
+ return rowStripes;
+ }
+
+ public boolean isShowFirstColumn() {
+ return firstColumn;
+ }
+
+ public boolean isShowLastColumn() {
+ return lastColumn;
+ }
+
+ public String getName() {
+ return style.getName();
+ }
+
+ public TableStyle getStyle() {
+ return style;
+ }
+
+}
Propchange:
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTableStyleInfo.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestTableStyles.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestTableStyles.java?rev=1795002&view=auto
==============================================================================
---
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestTableStyles.java
(added)
+++
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestTableStyles.java
Fri May 12 18:01:32 2017
@@ -0,0 +1,62 @@
+package org.apache.poi.xssf.usermodel;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.poi.ss.usermodel.DifferentialStyleProvider;
+import org.apache.poi.ss.usermodel.FontFormatting;
+import org.apache.poi.ss.usermodel.PatternFormatting;
+import org.apache.poi.ss.usermodel.Table;
+import org.apache.poi.ss.usermodel.TableStyle;
+import org.apache.poi.ss.usermodel.TableStyleInfo;
+import org.apache.poi.ss.usermodel.TableStyleType;
+import org.apache.poi.xssf.XSSFTestDataSamples;
+import org.junit.Test;
+
+/**
+ * Test built-in table styles
+ */
+public class TestTableStyles {
+
+ /**
+ * Test that a built-in style is initialized properly
+ */
+ @Test
+ public void testBuiltinStyleInit() {
+ TableStyle style = XSSFBuiltinTableStyle.TableStyleMedium2.getStyle();
+ assertNotNull("no style found for Medium2", style);
+ assertNull("Should not have style info for blankRow",
style.getStyle(TableStyleType.blankRow));
+ DifferentialStyleProvider headerRow =
style.getStyle(TableStyleType.headerRow);
+ assertNotNull("no header row style", headerRow);
+ FontFormatting font = headerRow.getFontFormatting();
+ assertNotNull("No header row font formatting", font);
+ assertTrue("header row not bold", font.isBold());
+ PatternFormatting fill = headerRow.getPatternFormatting();
+ assertNotNull("No header fill", fill);
+ assertEquals("wrong header fill", 4, ((XSSFColor)
fill.getFillBackgroundColorColor()).getTheme());
+ }
+
+ @Test
+ public void testCustomStyle() throws Exception {
+ XSSFWorkbook wb =
XSSFTestDataSamples.openSampleWorkbook("tableStyle.xlsx");
+
+ Table table = wb.getTable("Table1");
+ assertNotNull("missing table", table);
+
+ TableStyleInfo style = table.getStyle();
+ assertNotNull("Missing table style info", style);
+ assertNotNull("Missing table style", style.getStyle());
+ assertEquals("Wrong name", "TestTableStyle", style.getName());
+ assertEquals("Wrong name", "TestTableStyle",
style.getStyle().getName());
+
+ DifferentialStyleProvider firstColumn =
style.getStyle().getStyle(TableStyleType.firstColumn);
+ assertNotNull("no first column style", firstColumn);
+ FontFormatting font = firstColumn.getFontFormatting();
+ assertNotNull("no first col font", font);
+ assertTrue("wrong first col bold", font.isBold());
+
+ wb.close();
+ }
+}
Propchange:
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestTableStyles.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]