You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2011/03/04 15:38:13 UTC
svn commit: r1077968 - in /poi/trunk/src: documentation/content/xdocs/
ooxml/java/org/apache/poi/xssf/model/
ooxml/java/org/apache/poi/xssf/usermodel/
ooxml/java/org/apache/poi/xssf/usermodel/extensions/
ooxml/testcases/org/apache/poi/xssf/usermodel/ o...
Author: nick
Date: Fri Mar 4 14:38:13 2011
New Revision: 1077968
URL: http://svn.apache.org/viewvc?rev=1077968&view=rev
Log:
Hopefully fix bug #50846 - Improve how XSSFColor inherits from Themes, by pushing the logic out of XSSFCellStyle and into ThemesTable + make it easier to call
Modified:
poi/trunk/src/documentation/content/xdocs/status.xml
poi/trunk/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFColor.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellBorder.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFColor.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFBorder.java
Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=1077968&r1=1077967&r2=1077968&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Fri Mar 4 14:38:13 2011
@@ -34,6 +34,7 @@
<changes>
<release version="3.8-beta2" date="2011-??-??">
+ <action dev="poi-developers" type="fix">50846 - Improve how XSSFColor inherits from Themes</action>
<action dev="poi-developers" type="fix">50847 - XSSFFont now accepts the full range of Charsets from FontChartset</action>
<action dev="poi-developers" type="fix">50786 - Speed up calls to HSSFColor.getIndexHash() by returning a cached, unmodifiable Map. HSSFColor.getModifiableIndexHash() provides access to the old (slow but modifiable) functionality</action>
<action dev="poi-developers" type="fix">47100 - Change related formulas and named ranges when XSSFWorkbook.setSheetName is called</action>
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=1077968&r1=1077967&r2=1077968&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 Mar 4 14:38:13 2011
@@ -140,7 +140,7 @@ public class StylesTable extends POIXMLD
CTBorders ctborders = styleSheet.getBorders();
if(ctborders != null) {
for (CTBorder border : ctborders.getBorderArray()) {
- borders.add(new XSSFCellBorder(border));
+ borders.add(new XSSFCellBorder(border, theme));
}
}
@@ -433,7 +433,7 @@ public class StylesTable extends POIXMLD
fills.add(new XSSFCellFill(ctFill[1]));
CTBorder ctBorder = createDefaultBorder();
- borders.add(new XSSFCellBorder(ctBorder));
+ borders.add(new XSSFCellBorder(ctBorder, theme));
CTXf styleXf = createDefaultXf();
styleXfs.add(styleXf);
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java?rev=1077968&r1=1077967&r2=1077968&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java Fri Mar 4 14:38:13 2011
@@ -68,4 +68,27 @@ public class ThemesTable extends POIXMLD
}
return null;
}
+
+ /**
+ * If the colour is based on a theme, then inherit
+ * information (currently just colours) from it as
+ * required.
+ */
+ public void inheritFromThemeAsRequired(XSSFColor color) {
+ if(color == null) {
+ // Nothing for us to do
+ return;
+ }
+ if(! color.getCTColor().isSetTheme()) {
+ // No theme set, nothing to do
+ return;
+ }
+
+ // Get the theme colour
+ XSSFColor themeColor = getThemeColor(color.getTheme());
+ // Set the raw colour, not the adjusted one
+ color.setRgb(themeColor.getCTColor().getRgb());
+
+ // All done
+ }
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java?rev=1077968&r1=1077967&r2=1077968&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java Fri Mar 4 14:38:13 2011
@@ -441,8 +441,8 @@ public class XSSFCellStyle implements Ce
XSSFCellFill fg = _stylesSource.getFillAt(fillIndex);
XSSFColor fillBackgroundColor = fg.getFillBackgroundColor();
- if (fillBackgroundColor != null && fillBackgroundColor.getCTColor().isSetTheme() && _theme != null) {
- extractColorFromTheme(fillBackgroundColor);
+ if (fillBackgroundColor != null && _theme != null) {
+ _theme.inheritFromThemeAsRequired(fillBackgroundColor);
}
return fillBackgroundColor;
}
@@ -477,8 +477,8 @@ public class XSSFCellStyle implements Ce
XSSFCellFill fg = _stylesSource.getFillAt(fillIndex);
XSSFColor fillForegroundColor = fg.getFillForegroundColor();
- if (fillForegroundColor != null && fillForegroundColor.getCTColor().isSetTheme() && _theme != null) {
- extractColorFromTheme(fillForegroundColor);
+ if (fillForegroundColor != null && _theme != null) {
+ _theme.inheritFromThemeAsRequired(fillForegroundColor);
}
return fillForegroundColor;
}
@@ -766,7 +766,7 @@ public class XSSFCellStyle implements Ce
if(border == BORDER_NONE) ct.unsetBottom();
else pr.setStyle(STBorderStyle.Enum.forInt(border + 1));
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct));
+ int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
_cellXf.setBorderId(idx);
_cellXf.setApplyBorder(true);
@@ -806,7 +806,7 @@ public class XSSFCellStyle implements Ce
if(border == BORDER_NONE) ct.unsetLeft();
else pr.setStyle(STBorderStyle.Enum.forInt(border + 1));
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct));
+ int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
_cellXf.setBorderId(idx);
_cellXf.setApplyBorder(true);
@@ -846,7 +846,7 @@ public class XSSFCellStyle implements Ce
if(border == BORDER_NONE) ct.unsetRight();
else pr.setStyle(STBorderStyle.Enum.forInt(border + 1));
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct));
+ int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
_cellXf.setBorderId(idx);
_cellXf.setApplyBorder(true);
@@ -886,7 +886,7 @@ public class XSSFCellStyle implements Ce
if(border == BORDER_NONE) ct.unsetTop();
else pr.setStyle(STBorderStyle.Enum.forInt(border + 1));
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct));
+ int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
_cellXf.setBorderId(idx);
_cellXf.setApplyBorder(true);
@@ -925,7 +925,7 @@ public class XSSFCellStyle implements Ce
if(color != null) pr.setColor(color.getCTColor());
else pr.unsetColor();
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct));
+ int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
_cellXf.setBorderId(idx);
_cellXf.setApplyBorder(true);
@@ -1194,7 +1194,7 @@ public class XSSFCellStyle implements Ce
if(color != null) pr.setColor(color.getCTColor());
else pr.unsetColor();
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct));
+ int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
_cellXf.setBorderId(idx);
_cellXf.setApplyBorder(true);
@@ -1234,7 +1234,7 @@ public class XSSFCellStyle implements Ce
if(color != null) pr.setColor(color.getCTColor());
else pr.unsetColor();
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct));
+ int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
_cellXf.setBorderId(idx);
_cellXf.setApplyBorder(true);
@@ -1284,7 +1284,7 @@ public class XSSFCellStyle implements Ce
if(color != null) pr.setColor(color.getCTColor());
else pr.unsetColor();
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct));
+ int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
_cellXf.setBorderId(idx);
_cellXf.setApplyBorder(true);
@@ -1445,14 +1445,4 @@ public class XSSFCellStyle implements Ce
int indexXf = _stylesSource.putCellXf(xf);
return new XSSFCellStyle(indexXf-1, xfSize-1, _stylesSource, _theme);
}
-
- /**
- * Extracts RGB form theme color.
- * @param originalColor Color that refers to theme.
- */
- private void extractColorFromTheme(XSSFColor originalColor){
- XSSFColor themeColor = _theme.getThemeColor(originalColor.getTheme());
- // Set the raw colour, not the adjusted one
- originalColor.setRgb(themeColor.getCTColor().getRgb());
- }
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFColor.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFColor.java?rev=1077968&r1=1077967&r2=1077968&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFColor.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFColor.java Fri Mar 4 14:38:13 2011
@@ -16,10 +16,10 @@
==================================================================== */
package org.apache.poi.xssf.usermodel;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Color;
import org.apache.poi.util.Internal;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
/**
* Represents a color in SpreadsheetML
@@ -329,7 +329,7 @@ public class XSSFColor implements Color
public CTColor getCTColor(){
return ctColor;
}
-
+
public int hashCode(){
return ctColor.toString().hashCode();
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellBorder.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellBorder.java?rev=1077968&r1=1077967&r2=1077968&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellBorder.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellBorder.java Fri Mar 4 14:38:13 2011
@@ -18,6 +18,7 @@ package org.apache.poi.xssf.usermodel.ex
import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.xssf.model.ThemesTable;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.util.Internal;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorder;
@@ -30,22 +31,24 @@ import org.openxmlformats.schemas.spread
* Color is optional.
*/
public class XSSFCellBorder {
-
+ private ThemesTable _theme;
private CTBorder border;
/**
* Creates a Cell Border from the supplied XML definition
*/
- public XSSFCellBorder(CTBorder border) {
+ public XSSFCellBorder(CTBorder border, ThemesTable theme) {
this.border = border;
+ this._theme = theme;
}
/**
- * Creates a new, empty Cell Border, on the
- * given Styles Table
+ * Creates a new, empty Cell Border.
+ * You need to attach this to the Styles Table
*/
- public XSSFCellBorder() {
+ public XSSFCellBorder(ThemesTable theme) {
border = CTBorder.Factory.newInstance();
+ this._theme = theme;
}
/**
@@ -97,8 +100,17 @@ public class XSSFCellBorder {
*/
public XSSFColor getBorderColor(BorderSide side) {
CTBorderPr borderPr = getBorder(side);
- return borderPr != null && borderPr.isSetColor() ?
- new XSSFColor(borderPr.getColor()) : null;
+
+ if(borderPr != null && borderPr.isSetColor()) {
+ XSSFColor clr = new XSSFColor(borderPr.getColor());
+ if(_theme != null) {
+ _theme.inheritFromThemeAsRequired(clr);
+ }
+ return clr;
+ } else {
+ // No border set
+ return null;
+ }
}
/**
@@ -155,5 +167,4 @@ public class XSSFCellBorder {
XSSFCellBorder cf = (XSSFCellBorder) o;
return border.toString().equals(cf.getCTBorder().toString());
}
-
}
\ No newline at end of file
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java?rev=1077968&r1=1077967&r2=1077968&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java Fri Mar 4 14:38:13 2011
@@ -726,6 +726,19 @@ public final class TestXSSFBugs extends
}
/**
+ * If the border colours are set with themes, then we
+ * should still be able to get colours
+ */
+ public void test50846() throws Exception {
+ // TODO Get file and test
+ //Workbook wb = XSSFTestDataSamples.openSampleWorkbook("50846.xlsx");
+
+ // Check the style that is theme based
+
+ // Check the one that isn't
+ }
+
+ /**
* Fonts where their colours come from the theme rather
* then being set explicitly still should allow the
* fetching of the RGB.
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java?rev=1077968&r1=1077967&r2=1077968&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java Fri Mar 4 14:38:13 2011
@@ -59,11 +59,11 @@ public class TestXSSFCellStyle extends T
ctStylesheet = stylesTable.getCTStylesheet();
ctBorderA = CTBorder.Factory.newInstance();
- XSSFCellBorder borderA = new XSSFCellBorder(ctBorderA);
+ XSSFCellBorder borderA = new XSSFCellBorder(ctBorderA, null);
long borderId = stylesTable.putBorder(borderA);
assertEquals(1, borderId);
- XSSFCellBorder borderB = new XSSFCellBorder();
+ XSSFCellBorder borderB = new XSSFCellBorder(null);
assertEquals(1, stylesTable.putBorder(borderB));
ctFill = CTFill.Factory.newInstance();
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFColor.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFColor.java?rev=1077968&r1=1077967&r2=1077968&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFColor.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFColor.java Fri Mar 4 14:38:13 2011
@@ -19,21 +19,7 @@ package org.apache.poi.xssf.usermodel;
import junit.framework.TestCase;
-import org.apache.poi.ss.usermodel.*;
-import org.apache.poi.xssf.XSSFITestDataProvider;
import org.apache.poi.xssf.XSSFTestDataSamples;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBooleanProperty;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontName;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontScheme;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontSize;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTIntProperty;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTUnderlineProperty;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTVerticalAlignFontProperty;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STFontScheme;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STUnderlineValues;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STVerticalAlignRun;
public final class TestXSSFColor extends TestCase {
public void testIndexedColour() throws Exception {
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFBorder.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFBorder.java?rev=1077968&r1=1077967&r2=1077968&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFBorder.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFBorder.java Fri Mar 4 14:38:13 2011
@@ -40,7 +40,7 @@ public class TestXSSFBorder extends Test
right.setStyle(STBorderStyle.NONE);
bottom.setStyle(STBorderStyle.THIN);
- XSSFCellBorder cellBorderStyle = new XSSFCellBorder(border);
+ XSSFCellBorder cellBorderStyle = new XSSFCellBorder(border, null);
assertEquals("DASH_DOT", cellBorderStyle.getBorderStyle(BorderSide.TOP).toString());
assertEquals("NONE", cellBorderStyle.getBorderStyle(BorderSide.RIGHT).toString());
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org