Fix bug #50846 - XSSFCellBorder needs a theme table too, but as it gets created early switch it to the same model as XSSFFont for getting it later

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1082946 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2011-03-18 15:18:45 +00:00
parent 70f869b105
commit dd1af3acd9
7 changed files with 49 additions and 12 deletions

View File

@ -34,6 +34,7 @@
<changes>
<release version="3.8-beta2" date="2011-??-??">
<action dev="poi-developers" type="fix">50846 - More XSSFColor theme improvements, this time for Cell Borders</action>
<action dev="poi-developers" type="fix">50939 - ChartEndObjectRecord is supposed to have 6 bytes at the end, but handle it not</action>
<action dev="poi-developers" type="add">HMEF - New component which supports TNEF (Transport Neutral Encoding Format), aka winmail.dat</action>
<action dev="poi-developers" type="fix">50313 - support for getting HWPFDocument fields</action>

View File

@ -98,9 +98,15 @@ public class StylesTable extends POIXMLDocumentPart {
public void setTheme(ThemesTable theme) {
this.theme = theme;
// Pass the themes table along to things which need to
// know about it, but have already been created by now
for(XSSFFont font : fonts) {
font.setThemesTable(theme);
}
for(XSSFCellBorder border : borders) {
border.setThemesTable(theme);
}
}
/**
@ -144,7 +150,7 @@ public class StylesTable extends POIXMLDocumentPart {
CTBorders ctborders = styleSheet.getBorders();
if(ctborders != null) {
for (CTBorder border : ctborders.getBorderArray()) {
borders.add(new XSSFCellBorder(border, theme));
borders.add(new XSSFCellBorder(border));
}
}
@ -251,6 +257,7 @@ public class StylesTable extends POIXMLDocumentPart {
return idx;
}
borders.add(border);
border.setThemesTable(theme);
return borders.size() - 1;
}
@ -437,7 +444,7 @@ public class StylesTable extends POIXMLDocumentPart {
fills.add(new XSSFCellFill(ctFill[1]));
CTBorder ctBorder = createDefaultBorder();
borders.add(new XSSFCellBorder(ctBorder, theme));
borders.add(new XSSFCellBorder(ctBorder));
CTXf styleXf = createDefaultXf();
styleXfs.add(styleXf);

View File

@ -38,17 +38,32 @@ public class XSSFCellBorder {
* Creates a Cell Border from the supplied XML definition
*/
public XSSFCellBorder(CTBorder border, ThemesTable theme) {
this.border = border;
this(border);
this._theme = theme;
}
/**
* Creates a Cell Border from the supplied XML definition
*/
public XSSFCellBorder(CTBorder border) {
this.border = border;
}
/**
* Creates a new, empty Cell Border.
* You need to attach this to the Styles Table
*/
public XSSFCellBorder(ThemesTable theme) {
public XSSFCellBorder() {
border = CTBorder.Factory.newInstance();
this._theme = theme;
}
/**
* Records the Themes Table that is associated with
* the current font, used when looking up theme
* based colours and properties.
*/
public void setThemesTable(ThemesTable themes) {
this._theme = themes;
}
/**

View File

@ -742,12 +742,26 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
* should still be able to get colours
*/
public void test50846() throws Exception {
// TODO Get file and test
//Workbook wb = XSSFTestDataSamples.openSampleWorkbook("50846.xlsx");
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50846-border_colours.xlsx");
// Check the style that is theme based
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row = sheet.getRow(0);
// Check the one that isn't
// Border from a theme, brown
XSSFCell cellT = row.getCell(0);
XSSFCellStyle styleT = cellT.getCellStyle();
XSSFColor colorT = styleT.getBottomBorderXSSFColor();
assertEquals(5, colorT.getTheme());
assertEquals("FFC0504D", colorT.getARGBHex());
// Border from a style direct, red
XSSFCell cellS = row.getCell(1);
XSSFCellStyle styleS = cellS.getCellStyle();
XSSFColor colorS = styleS.getBottomBorderXSSFColor();
assertEquals(0, colorS.getTheme());
assertEquals("FFFF0000", colorS.getARGBHex());
}
/**

View File

@ -59,11 +59,11 @@ public class TestXSSFCellStyle extends TestCase {
ctStylesheet = stylesTable.getCTStylesheet();
ctBorderA = CTBorder.Factory.newInstance();
XSSFCellBorder borderA = new XSSFCellBorder(ctBorderA, null);
XSSFCellBorder borderA = new XSSFCellBorder(ctBorderA);
long borderId = stylesTable.putBorder(borderA);
assertEquals(1, borderId);
XSSFCellBorder borderB = new XSSFCellBorder(null);
XSSFCellBorder borderB = new XSSFCellBorder();
assertEquals(1, stylesTable.putBorder(borderB));
ctFill = CTFill.Factory.newInstance();

View File

@ -40,7 +40,7 @@ public class TestXSSFBorder extends TestCase {
right.setStyle(STBorderStyle.NONE);
bottom.setStyle(STBorderStyle.THIN);
XSSFCellBorder cellBorderStyle = new XSSFCellBorder(border, null);
XSSFCellBorder cellBorderStyle = new XSSFCellBorder(border);
assertEquals("DASH_DOT", cellBorderStyle.getBorderStyle(BorderSide.TOP).toString());
assertEquals("NONE", cellBorderStyle.getBorderStyle(BorderSide.RIGHT).toString());

Binary file not shown.