Browse Source

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
tags/REL_3_8_BETA2
Nick Burch 13 years ago
parent
commit
dd1af3acd9

+ 1
- 0
src/documentation/content/xdocs/status.xml 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>

+ 9
- 2
src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java 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);

+ 18
- 3
src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellBorder.java View File

@@ -38,19 +38,34 @@ 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;
}
/**
* The enumeration value indicating the side being used for a cell border.
*/

+ 18
- 4
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java 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);
// 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();
// Check the one that isn't
assertEquals(0, colorS.getTheme());
assertEquals("FFFF0000", colorS.getARGBHex());
}
/**

+ 2
- 2
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java 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();

+ 1
- 1
src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFBorder.java 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());

BIN
test-data/spreadsheet/50846-border_colours.xlsx View File


Loading…
Cancel
Save