From e2280c276d2631efce1d1a8e6de64110141cc665 Mon Sep 17 00:00:00 2001 From: Javen O'Neal Date: Tue, 5 Apr 2016 20:28:46 +0000 Subject: [PATCH] bug 59264: use BorderStyle for changing Cell border line style git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1737879 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/hssf/view/SVBorder.java | 140 +++++---- .../poi/hssf/view/SVTableCellRenderer.java | 10 +- .../poi/ss/examples/ExcelComparator.java | 17 +- .../apache/poi/ss/examples/html/ToHtml.java | 40 ++- .../hssf/usermodel/HSSFBorderFormatting.java | 70 ++++- .../poi/hssf/usermodel/HSSFCellStyle.java | 117 ++++---- .../poi/ss/usermodel/BorderFormatting.java | 129 +++++++-- .../apache/poi/ss/usermodel/BorderStyle.java | 22 +- .../apache/poi/ss/usermodel/CellStyle.java | 113 +++----- src/java/org/apache/poi/ss/util/CellUtil.java | 40 ++- .../xssf/usermodel/XSSFBorderFormatting.java | 106 +++++-- .../poi/xssf/usermodel/XSSFCellStyle.java | 137 ++++----- .../poi/ss/usermodel/TestXSSFBorderStyle.java | 30 ++ .../poi/xssf/usermodel/TestXSSFCellStyle.java | 269 +++++++----------- .../hssf/converter/AbstractExcelUtils.java | 35 +-- .../hssf/converter/ExcelToFoConverter.java | 13 +- .../hssf/converter/ExcelToHtmlConverter.java | 5 +- .../apache/poi/hssf/usermodel/TestBugs.java | 3 +- .../poi/hssf/usermodel/TestCellStyle.java | 37 +-- .../poi/hssf/usermodel/TestHSSFOptimiser.java | 14 +- .../poi/hssf/usermodel/TestRowStyle.java | 21 +- .../poi/ss/usermodel/BaseTestBorderStyle.java | 82 ++++++ .../apache/poi/ss/usermodel/BaseTestCell.java | 20 +- .../BaseTestConditionalFormatting.java | 120 +++++--- .../poi/ss/usermodel/TestHSSFBorderStyle.java | 30 ++ .../org/apache/poi/ss/util/TestCellUtil.java | 18 +- test-data/spreadsheet/59264.xls | Bin 0 -> 27648 bytes test-data/spreadsheet/59264.xlsx | Bin 0 -> 9548 bytes 28 files changed, 968 insertions(+), 670 deletions(-) create mode 100644 src/ooxml/testcases/org/apache/poi/ss/usermodel/TestXSSFBorderStyle.java create mode 100644 src/testcases/org/apache/poi/ss/usermodel/BaseTestBorderStyle.java create mode 100644 src/testcases/org/apache/poi/ss/usermodel/TestHSSFBorderStyle.java create mode 100644 test-data/spreadsheet/59264.xls create mode 100644 test-data/spreadsheet/59264.xlsx diff --git a/src/examples/src/org/apache/poi/hssf/view/SVBorder.java b/src/examples/src/org/apache/poi/hssf/view/SVBorder.java index 083b9cc18e..97a4689663 100644 --- a/src/examples/src/org/apache/poi/hssf/view/SVBorder.java +++ b/src/examples/src/org/apache/poi/hssf/view/SVBorder.java @@ -22,7 +22,7 @@ import java.awt.*; import javax.swing.border.AbstractBorder; -import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.ss.usermodel.BorderStyle; /** * This is an attempt to implement Excel style borders for the SheetViewer. @@ -37,10 +37,10 @@ public class SVBorder extends AbstractBorder { private Color eastColor = null; private Color southColor = null; private Color westColor = null; - private int northBorderType = HSSFCellStyle.BORDER_NONE; - private int eastBorderType =HSSFCellStyle.BORDER_NONE; - private int southBorderType = HSSFCellStyle.BORDER_NONE; - private int westBorderType = HSSFCellStyle.BORDER_NONE; + private BorderStyle northBorderType = BorderStyle.NONE; + private BorderStyle eastBorderType = BorderStyle.NONE; + private BorderStyle southBorderType = BorderStyle.NONE; + private BorderStyle westBorderType = BorderStyle.NONE; private boolean northBorder=false; private boolean eastBorder=false; private boolean southBorder=false; @@ -49,8 +49,8 @@ public class SVBorder extends AbstractBorder { public void setBorder(Color northColor, Color eastColor, Color southColor, Color westColor, - int northBorderType, int eastBorderType, - int southBorderType, int westBorderType, + BorderStyle northBorderType, BorderStyle eastBorderType, + BorderStyle southBorderType, BorderStyle westBorderType, boolean selected) { this.eastColor = eastColor; this.southColor = southColor; @@ -59,10 +59,10 @@ public class SVBorder extends AbstractBorder { this.eastBorderType = eastBorderType; this.southBorderType = southBorderType; this.westBorderType = westBorderType; - this.northBorder=northBorderType != HSSFCellStyle.BORDER_NONE; - this.eastBorder=eastBorderType != HSSFCellStyle.BORDER_NONE; - this.southBorder=southBorderType != HSSFCellStyle.BORDER_NONE; - this.westBorder=westBorderType != HSSFCellStyle.BORDER_NONE; + this.northBorder=northBorderType != BorderStyle.NONE; + this.eastBorder=eastBorderType != BorderStyle.NONE; + this.southBorder=southBorderType != BorderStyle.NONE; + this.westBorder=westBorderType != BorderStyle.NONE; this.selected = selected; } @@ -109,9 +109,9 @@ public class SVBorder extends AbstractBorder { int height) { if (northBorder && - ((northBorderType == HSSFCellStyle.BORDER_THIN) || - (northBorderType == HSSFCellStyle.BORDER_MEDIUM) || - (northBorderType == HSSFCellStyle.BORDER_THICK) + ((northBorderType == BorderStyle.THIN) || + (northBorderType == BorderStyle.MEDIUM) || + (northBorderType == BorderStyle.THICK) ) ) { @@ -125,9 +125,9 @@ public class SVBorder extends AbstractBorder { } if (eastBorder && - ((eastBorderType == HSSFCellStyle.BORDER_THIN) || - (eastBorderType == HSSFCellStyle.BORDER_MEDIUM) || - (eastBorderType == HSSFCellStyle.BORDER_THICK) + ((eastBorderType == BorderStyle.THIN) || + (eastBorderType == BorderStyle.MEDIUM) || + (eastBorderType == BorderStyle.THICK) ) ) { @@ -141,9 +141,9 @@ public class SVBorder extends AbstractBorder { } if (southBorder && - ((southBorderType == HSSFCellStyle.BORDER_THIN) || - (southBorderType == HSSFCellStyle.BORDER_MEDIUM) || - (southBorderType == HSSFCellStyle.BORDER_THICK) + ((southBorderType == BorderStyle.THIN) || + (southBorderType == BorderStyle.MEDIUM) || + (southBorderType == BorderStyle.THICK) ) ) { @@ -156,9 +156,9 @@ public class SVBorder extends AbstractBorder { } if (westBorder && - ((westBorderType == HSSFCellStyle.BORDER_THIN) || - (westBorderType == HSSFCellStyle.BORDER_MEDIUM) || - (westBorderType == HSSFCellStyle.BORDER_THICK) + ((westBorderType == BorderStyle.THIN) || + (westBorderType == BorderStyle.MEDIUM) || + (westBorderType == BorderStyle.THICK) ) ) { @@ -179,7 +179,7 @@ public class SVBorder extends AbstractBorder { private void paintDottedBorders(Graphics g, int x, int y, int width, int height) { if (northBorder && - northBorderType == HSSFCellStyle.BORDER_DOTTED) { + northBorderType == BorderStyle.DOTTED) { int thickness = getThickness(northBorderType); g.setColor(northColor); @@ -192,7 +192,7 @@ public class SVBorder extends AbstractBorder { } if (eastBorder && - eastBorderType == HSSFCellStyle.BORDER_DOTTED + eastBorderType == BorderStyle.DOTTED ) { int thickness = getThickness(eastBorderType); @@ -208,7 +208,7 @@ public class SVBorder extends AbstractBorder { } if (southBorder && - southBorderType == HSSFCellStyle.BORDER_DOTTED + southBorderType == BorderStyle.DOTTED ) { int thickness = getThickness(southBorderType); @@ -222,7 +222,7 @@ public class SVBorder extends AbstractBorder { } if (westBorder && - westBorderType == HSSFCellStyle.BORDER_DOTTED + westBorderType == BorderStyle.DOTTED ) { int thickness = getThickness(westBorderType); @@ -245,14 +245,14 @@ public class SVBorder extends AbstractBorder { private void paintDashedBorders(Graphics g, int x, int y, int width, int height) { if (northBorder && - ((northBorderType == HSSFCellStyle.BORDER_DASHED) || - (northBorderType == HSSFCellStyle.BORDER_HAIR)) + ((northBorderType == BorderStyle.DASHED) || + (northBorderType == BorderStyle.HAIR)) ) { int thickness = getThickness(northBorderType); int dashlength = 1; - if (northBorderType == HSSFCellStyle.BORDER_DASHED) + if (northBorderType == BorderStyle.DASHED) dashlength = 2; g.setColor(northColor); @@ -265,8 +265,8 @@ public class SVBorder extends AbstractBorder { } if (eastBorder && - ((eastBorderType == HSSFCellStyle.BORDER_DASHED) || - (eastBorderType == HSSFCellStyle.BORDER_HAIR)) + ((eastBorderType == BorderStyle.DASHED) || + (eastBorderType == BorderStyle.HAIR)) ) { int thickness = getThickness(eastBorderType); @@ -275,7 +275,7 @@ public class SVBorder extends AbstractBorder { int dashlength = 1; - if (eastBorderType == HSSFCellStyle.BORDER_DASHED) + if (eastBorderType == BorderStyle.DASHED) dashlength = 2; g.setColor(eastColor); @@ -288,8 +288,8 @@ public class SVBorder extends AbstractBorder { } if (southBorder && - ((southBorderType == HSSFCellStyle.BORDER_DASHED) || - (southBorderType == HSSFCellStyle.BORDER_HAIR)) + ((southBorderType == BorderStyle.DASHED) || + (southBorderType == BorderStyle.HAIR)) ) { int thickness = getThickness(southBorderType); @@ -297,7 +297,7 @@ public class SVBorder extends AbstractBorder { int dashlength = 1; - if (southBorderType == HSSFCellStyle.BORDER_DASHED) + if (southBorderType == BorderStyle.DASHED) dashlength = 2; g.setColor(southColor); @@ -309,8 +309,8 @@ public class SVBorder extends AbstractBorder { } if (westBorder && - ((westBorderType == HSSFCellStyle.BORDER_DASHED) || - (westBorderType == HSSFCellStyle.BORDER_HAIR)) + ((westBorderType == BorderStyle.DASHED) || + (westBorderType == BorderStyle.HAIR)) ) { int thickness = getThickness(westBorderType); @@ -318,7 +318,7 @@ public class SVBorder extends AbstractBorder { int dashlength = 1; - if (westBorderType == HSSFCellStyle.BORDER_DASHED) + if (westBorderType == BorderStyle.DASHED) dashlength = 2; g.setColor(westColor); @@ -338,7 +338,7 @@ public class SVBorder extends AbstractBorder { private void paintDoubleBorders(Graphics g, int x, int y, int width, int height) { if (northBorder && - northBorderType == HSSFCellStyle.BORDER_DOUBLE) { + northBorderType == BorderStyle.DOUBLE) { g.setColor(northColor); @@ -358,7 +358,7 @@ public class SVBorder extends AbstractBorder { } if (eastBorder && - eastBorderType == HSSFCellStyle.BORDER_DOUBLE + eastBorderType == BorderStyle.DOUBLE ) { int thickness = getThickness(eastBorderType); @@ -380,7 +380,7 @@ public class SVBorder extends AbstractBorder { } if (southBorder && - southBorderType == HSSFCellStyle.BORDER_DOUBLE + southBorderType == BorderStyle.DOUBLE ) { g.setColor(southColor); @@ -400,7 +400,7 @@ public class SVBorder extends AbstractBorder { } if (westBorder && - westBorderType == HSSFCellStyle.BORDER_DOUBLE + westBorderType == BorderStyle.DOUBLE ) { int thickness = getThickness(westBorderType); @@ -429,8 +429,8 @@ public class SVBorder extends AbstractBorder { private void paintDashDotDotBorders(Graphics g, int x, int y, int width, int height) { if (northBorder && - ((northBorderType == HSSFCellStyle.BORDER_DASH_DOT_DOT) || - (northBorderType == HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT)) + ((northBorderType == BorderStyle.DASH_DOT_DOT) || + (northBorderType == BorderStyle.MEDIUM_DASH_DOT_DOT)) ) { int thickness = getThickness(northBorderType); @@ -442,8 +442,8 @@ public class SVBorder extends AbstractBorder { } if (eastBorder && - ((eastBorderType == HSSFCellStyle.BORDER_DASH_DOT_DOT) || - (eastBorderType == HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT)) + ((eastBorderType == BorderStyle.DASH_DOT_DOT) || + (eastBorderType == BorderStyle.MEDIUM_DASH_DOT_DOT)) ) { int thickness = getThickness(eastBorderType); @@ -457,8 +457,8 @@ public class SVBorder extends AbstractBorder { } if (southBorder && - ((southBorderType == HSSFCellStyle.BORDER_DASH_DOT_DOT) || - (southBorderType == HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT)) + ((southBorderType == BorderStyle.DASH_DOT_DOT) || + (southBorderType == BorderStyle.MEDIUM_DASH_DOT_DOT)) ) { int thickness = getThickness(southBorderType); @@ -472,8 +472,8 @@ public class SVBorder extends AbstractBorder { } if (westBorder && - ((westBorderType == HSSFCellStyle.BORDER_DASH_DOT_DOT) || - (westBorderType == HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT)) + ((westBorderType == BorderStyle.DASH_DOT_DOT) || + (westBorderType == BorderStyle.MEDIUM_DASH_DOT_DOT)) ) { int thickness = getThickness(westBorderType); @@ -530,34 +530,22 @@ public class SVBorder extends AbstractBorder { /** * @returns the line thickness for a border based on border type */ - private int getThickness(int thickness) { - int retval=1; + private int getThickness(BorderStyle thickness) { switch (thickness) { - case HSSFCellStyle.BORDER_THIN: - retval=2; - break; - case HSSFCellStyle.BORDER_MEDIUM: - retval=3; - break; - case HSSFCellStyle.BORDER_THICK: - retval=4; - break; - case HSSFCellStyle.BORDER_DASHED: - retval=1; - break; - case HSSFCellStyle.BORDER_DASH_DOT_DOT: - retval=1; - break; - case HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT: - retval=3; - break; - case HSSFCellStyle.BORDER_HAIR: - retval=1; - break; + case DASH_DOT_DOT: + case DASHED: + case HAIR: + return 1; + case THIN: + return 2; + case MEDIUM: + case MEDIUM_DASH_DOT_DOT: + return 3; + case THICK: + return 4; default: - retval=1; + return 1; } - return retval; } diff --git a/src/examples/src/org/apache/poi/hssf/view/SVTableCellRenderer.java b/src/examples/src/org/apache/poi/hssf/view/SVTableCellRenderer.java index 4b2e634bb3..db7f6304f7 100644 --- a/src/examples/src/org/apache/poi/hssf/view/SVTableCellRenderer.java +++ b/src/examples/src/org/apache/poi/hssf/view/SVTableCellRenderer.java @@ -26,11 +26,11 @@ import javax.swing.border.*; import java.awt.Component; import java.awt.Color; import java.awt.Rectangle; - import java.io.Serializable; import java.text.*; import org.apache.poi.hssf.usermodel.*; +import org.apache.poi.ss.usermodel.BorderStyle; /** @@ -224,10 +224,10 @@ public class SVTableCellRenderer extends JLabel SVTableUtils.black, SVTableUtils.black, SVTableUtils.black, - HSSFCellStyle.BORDER_NONE, - HSSFCellStyle.BORDER_NONE, - HSSFCellStyle.BORDER_NONE, - HSSFCellStyle.BORDER_NONE, + BorderStyle.NONE, + BorderStyle.NONE, + BorderStyle.NONE, + BorderStyle.NONE, isSelected); setBorder(cellBorder); } diff --git a/src/examples/src/org/apache/poi/ss/examples/ExcelComparator.java b/src/examples/src/org/apache/poi/ss/examples/ExcelComparator.java index 7833dbce1c..74e09ae94a 100644 --- a/src/examples/src/org/apache/poi/ss/examples/ExcelComparator.java +++ b/src/examples/src/org/apache/poi/ss/examples/ExcelComparator.java @@ -23,6 +23,7 @@ import java.util.Iterator; import java.util.List; import java.util.Locale; +import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Color; import org.apache.poi.ss.usermodel.DateUtil; @@ -362,23 +363,23 @@ public class ExcelComparator { String borderName; switch (borderSide) { case 't': default: - b1 = style1.getBorderTop() == 1; - b2 = style2.getBorderTop() == 1; + b1 = style1.getBorderTop() == BorderStyle.THIN; + b2 = style2.getBorderTop() == BorderStyle.THIN; borderName = "TOP"; break; case 'b': - b1 = style1.getBorderBottom() == 1; - b2 = style2.getBorderBottom() == 1; + b1 = style1.getBorderBottom() == BorderStyle.THIN; + b2 = style2.getBorderBottom() == BorderStyle.THIN; borderName = "BOTTOM"; break; case 'l': - b1 = style1.getBorderLeft() == 1; - b2 = style2.getBorderLeft() == 1; + b1 = style1.getBorderLeft() == BorderStyle.THIN; + b2 = style2.getBorderLeft() == BorderStyle.THIN; borderName = "LEFT"; break; case 'r': - b1 = style1.getBorderRight() == 1; - b2 = style2.getBorderRight() == 1; + b1 = style1.getBorderRight() == BorderStyle.THIN; + b2 = style2.getBorderRight() == BorderStyle.THIN; borderName = "RIGHT"; break; } diff --git a/src/examples/src/org/apache/poi/ss/examples/html/ToHtml.java b/src/examples/src/org/apache/poi/ss/examples/html/ToHtml.java index 74e129eee5..d59d4666df 100644 --- a/src/examples/src/org/apache/poi/ss/examples/html/ToHtml.java +++ b/src/examples/src/org/apache/poi/ss/examples/html/ToHtml.java @@ -62,22 +62,34 @@ public class ToHtml { private static final String COL_HEAD_CLASS = "colHeader"; private static final String ROW_HEAD_CLASS = "rowHeader"; - private static final Map ALIGN = mapFor(ALIGN_LEFT, "left", - ALIGN_CENTER, "center", ALIGN_RIGHT, "right", ALIGN_FILL, "left", - ALIGN_JUSTIFY, "left", ALIGN_CENTER_SELECTION, "center"); + private static final Map ALIGN = mapFor( + ALIGN_LEFT, "left", + ALIGN_CENTER, "center", + ALIGN_RIGHT, "right", + ALIGN_FILL, "left", + ALIGN_JUSTIFY, "left", + ALIGN_CENTER_SELECTION, "center"); private static final Map VERTICAL_ALIGN = mapFor( - VERTICAL_BOTTOM, "bottom", VERTICAL_CENTER, "middle", VERTICAL_TOP, - "top"); - - private static final Map BORDER = mapFor(BORDER_DASH_DOT, - "dashed 1pt", BORDER_DASH_DOT_DOT, "dashed 1pt", BORDER_DASHED, - "dashed 1pt", BORDER_DOTTED, "dotted 1pt", BORDER_DOUBLE, - "double 3pt", BORDER_HAIR, "solid 1px", BORDER_MEDIUM, "solid 2pt", - BORDER_MEDIUM_DASH_DOT, "dashed 2pt", BORDER_MEDIUM_DASH_DOT_DOT, - "dashed 2pt", BORDER_MEDIUM_DASHED, "dashed 2pt", BORDER_NONE, - "none", BORDER_SLANTED_DASH_DOT, "dashed 2pt", BORDER_THICK, - "solid 3pt", BORDER_THIN, "dashed 1pt"); + VERTICAL_BOTTOM, "bottom", + VERTICAL_CENTER, "middle", + VERTICAL_TOP, "top"); + + private static final Map BORDER = mapFor( + BorderStyle.DASH_DOT, "dashed 1pt", + BorderStyle.DASH_DOT_DOT, "dashed 1pt", + BorderStyle.DASHED, "dashed 1pt", + BorderStyle.DOTTED, "dotted 1pt", + BorderStyle.DOUBLE, "double 3pt", + BorderStyle.HAIR, "solid 1px", + BorderStyle.MEDIUM, "solid 2pt", + BorderStyle.MEDIUM_DASH_DOT, "dashed 2pt", + BorderStyle.MEDIUM_DASH_DOT_DOT, "dashed 2pt", + BorderStyle.MEDIUM_DASHED, "dashed 2pt", + BorderStyle.NONE, "none", + BorderStyle.SLANTED_DASH_DOT, "dashed 2pt", + BorderStyle.THICK, "solid 3pt", + BorderStyle.THIN, "dashed 1pt"); @SuppressWarnings({"unchecked"}) private static Map mapFor(Object... mapping) { diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFBorderFormatting.java b/src/java/org/apache/poi/hssf/usermodel/HSSFBorderFormatting.java index c5c9964563..d06c9f179b 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFBorderFormatting.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFBorderFormatting.java @@ -20,6 +20,7 @@ package org.apache.poi.hssf.usermodel; import org.apache.poi.hssf.record.CFRuleBase; import org.apache.poi.hssf.record.cf.BorderFormatting; import org.apache.poi.hssf.util.HSSFColor; +import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.Color; /** @@ -41,65 +42,80 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B return borderFormatting; } - public short getBorderBottom() { - return (short)borderFormatting.getBorderBottom(); + @Override + public BorderStyle getBorderBottom() { + return BorderStyle.valueOf((short)borderFormatting.getBorderBottom()); } - public short getBorderDiagonal() { - return (short)borderFormatting.getBorderDiagonal(); + @Override + public BorderStyle getBorderDiagonal() { + return BorderStyle.valueOf((short)borderFormatting.getBorderDiagonal()); } - public short getBorderLeft() { - return (short)borderFormatting.getBorderLeft(); + @Override + public BorderStyle getBorderLeft() { + return BorderStyle.valueOf((short)borderFormatting.getBorderLeft()); } - public short getBorderRight() { - return (short)borderFormatting.getBorderRight(); + @Override + public BorderStyle getBorderRight() { + return BorderStyle.valueOf((short)borderFormatting.getBorderRight()); } - public short getBorderTop() { - return (short)borderFormatting.getBorderTop(); + @Override + public BorderStyle getBorderTop() { + return BorderStyle.valueOf((short)borderFormatting.getBorderTop()); } + @Override public short getBottomBorderColor() { return (short)borderFormatting.getBottomBorderColor(); } + @Override public HSSFColor getBottomBorderColorColor() { return workbook.getCustomPalette().getColor( borderFormatting.getBottomBorderColor() ); } + @Override public short getDiagonalBorderColor() { return (short)borderFormatting.getDiagonalBorderColor(); } + @Override public HSSFColor getDiagonalBorderColorColor() { return workbook.getCustomPalette().getColor( borderFormatting.getDiagonalBorderColor() ); } + @Override public short getLeftBorderColor() { return (short)borderFormatting.getLeftBorderColor(); } + @Override public HSSFColor getLeftBorderColorColor() { return workbook.getCustomPalette().getColor( borderFormatting.getLeftBorderColor() ); } + @Override public short getRightBorderColor() { return (short)borderFormatting.getRightBorderColor(); } + @Override public HSSFColor getRightBorderColorColor() { return workbook.getCustomPalette().getColor( borderFormatting.getRightBorderColor() ); } + @Override public short getTopBorderColor() { return (short)borderFormatting.getTopBorderColor(); } + @Override public HSSFColor getTopBorderColorColor() { return workbook.getCustomPalette().getColor( borderFormatting.getTopBorderColor() @@ -126,6 +142,7 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B } } + @Override public void setBorderBottom(short border) { borderFormatting.setBorderBottom(border); if (border != 0) { @@ -134,7 +151,12 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B cfRuleRecord.setBottomBorderModified(false); } } + @Override + public void setBorderBottom(BorderStyle border) { + setBorderBottom(border.getCode()); + } + @Override public void setBorderDiagonal(short border) { borderFormatting.setBorderDiagonal(border); if (border != 0) { @@ -145,7 +167,12 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B cfRuleRecord.setTopLeftBottomRightBorderModified(false); } } + @Override + public void setBorderDiagonal(BorderStyle border) { + setBorderDiagonal(border.getCode()); + } + @Override public void setBorderLeft(short border) { borderFormatting.setBorderLeft(border); if (border != 0) { @@ -154,7 +181,12 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B cfRuleRecord.setLeftBorderModified(false); } } + @Override + public void setBorderLeft(BorderStyle border) { + setBorderLeft(border.getCode()); + } + @Override public void setBorderRight(short border) { borderFormatting.setBorderRight(border); if (border != 0) { @@ -163,7 +195,12 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B cfRuleRecord.setRightBorderModified(false); } } + @Override + public void setBorderRight(BorderStyle border) { + setBorderRight(border.getCode()); + } + @Override public void setBorderTop(short border) { borderFormatting.setBorderTop(border); if (border != 0) { @@ -172,7 +209,12 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B cfRuleRecord.setTopBorderModified(false); } } + @Override + public void setBorderTop(BorderStyle border) { + setBorderTop(border.getCode()); + } + @Override public void setBottomBorderColor(short color) { borderFormatting.setBottomBorderColor(color); if (color != 0) { @@ -190,6 +232,7 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B } } + @Override public void setDiagonalBorderColor(short color) { borderFormatting.setDiagonalBorderColor(color); if (color != 0) { @@ -200,6 +243,7 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B cfRuleRecord.setTopLeftBottomRightBorderModified(false); } } + @Override public void setDiagonalBorderColor(Color color) { HSSFColor hcolor = HSSFColor.toHSSFColor(color); if (hcolor == null) { @@ -209,6 +253,7 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B } } + @Override public void setLeftBorderColor(short color) { borderFormatting.setLeftBorderColor(color); if (color != 0) { @@ -217,6 +262,7 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B cfRuleRecord.setLeftBorderModified(false); } } + @Override public void setLeftBorderColor(Color color) { HSSFColor hcolor = HSSFColor.toHSSFColor(color); if (hcolor == null) { @@ -226,6 +272,7 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B } } + @Override public void setRightBorderColor(short color) { borderFormatting.setRightBorderColor(color); if (color != 0) { @@ -234,6 +281,7 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B cfRuleRecord.setRightBorderModified(false); } } + @Override public void setRightBorderColor(Color color) { HSSFColor hcolor = HSSFColor.toHSSFColor(color); if (hcolor == null) { @@ -243,6 +291,7 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B } } + @Override public void setTopBorderColor(short color) { borderFormatting.setTopBorderColor(color); if (color != 0) { @@ -251,6 +300,7 @@ public final class HSSFBorderFormatting implements org.apache.poi.ss.usermodel.B cfRuleRecord.setTopBorderModified(false); } } + @Override public void setTopBorderColor(Color color) { HSSFColor hcolor = HSSFColor.toHSSFColor(color); if (hcolor == null) { diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java b/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java index 25e3b371c0..a77361dd72 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java @@ -26,6 +26,7 @@ import org.apache.poi.hssf.record.FontRecord; import org.apache.poi.hssf.record.FormatRecord; import org.apache.poi.hssf.record.StyleRecord; import org.apache.poi.hssf.util.HSSFColor; +import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; @@ -410,6 +411,7 @@ public final class HSSFCellStyle implements CellStyle { * @see #BORDER_DASH_DOT_DOT * @see #BORDER_MEDIUM_DASH_DOT_DOT * @see #BORDER_SLANTED_DASH_DOT + * @deprecated 3.15 beta 1 */ @Override public void setBorderLeft(short border) @@ -417,29 +419,25 @@ public final class HSSFCellStyle implements CellStyle { _format.setIndentNotParentBorder(true); _format.setBorderLeft(border); } + + /** + * set the type of border to use for the left border of the cell + * @param border type + */ + @Override + public void setBorderLeft(BorderStyle border) + { + setBorderLeft(border.getCode()); + } /** * get the type of border to use for the left border of the cell * @return border type - * @see #BORDER_NONE - * @see #BORDER_THIN - * @see #BORDER_MEDIUM - * @see #BORDER_DASHED - * @see #BORDER_DOTTED - * @see #BORDER_THICK - * @see #BORDER_DOUBLE - * @see #BORDER_HAIR - * @see #BORDER_MEDIUM_DASHED - * @see #BORDER_DASH_DOT - * @see #BORDER_MEDIUM_DASH_DOT - * @see #BORDER_DASH_DOT_DOT - * @see #BORDER_MEDIUM_DASH_DOT_DOT - * @see #BORDER_SLANTED_DASH_DOT */ @Override - public short getBorderLeft() + public BorderStyle getBorderLeft() { - return _format.getBorderLeft(); + return BorderStyle.valueOf(_format.getBorderLeft()); } /** @@ -459,6 +457,7 @@ public final class HSSFCellStyle implements CellStyle { * @see #BORDER_DASH_DOT_DOT * @see #BORDER_MEDIUM_DASH_DOT_DOT * @see #BORDER_SLANTED_DASH_DOT + * @deprecated 3.15 beta 1 */ @Override public void setBorderRight(short border) @@ -466,29 +465,25 @@ public final class HSSFCellStyle implements CellStyle { _format.setIndentNotParentBorder(true); _format.setBorderRight(border); } + + /** + * set the type of border to use for the right border of the cell + * @param border type + */ + @Override + public void setBorderRight(BorderStyle border) + { + setBorderRight(border.getCode()); + } /** * get the type of border to use for the right border of the cell * @return border type - * @see #BORDER_NONE - * @see #BORDER_THIN - * @see #BORDER_MEDIUM - * @see #BORDER_DASHED - * @see #BORDER_DOTTED - * @see #BORDER_THICK - * @see #BORDER_DOUBLE - * @see #BORDER_HAIR - * @see #BORDER_MEDIUM_DASHED - * @see #BORDER_DASH_DOT - * @see #BORDER_MEDIUM_DASH_DOT - * @see #BORDER_DASH_DOT_DOT - * @see #BORDER_MEDIUM_DASH_DOT_DOT - * @see #BORDER_SLANTED_DASH_DOT */ @Override - public short getBorderRight() + public BorderStyle getBorderRight() { - return _format.getBorderRight(); + return BorderStyle.valueOf(_format.getBorderRight()); } /** @@ -508,6 +503,7 @@ public final class HSSFCellStyle implements CellStyle { * @see #BORDER_DASH_DOT_DOT * @see #BORDER_MEDIUM_DASH_DOT_DOT * @see #BORDER_SLANTED_DASH_DOT + * @deprecated 3.15 beta 1 */ @Override public void setBorderTop(short border) @@ -515,29 +511,25 @@ public final class HSSFCellStyle implements CellStyle { _format.setIndentNotParentBorder(true); _format.setBorderTop(border); } + + /** + * set the type of border to use for the top border of the cell + * @param border type + */ + @Override + public void setBorderTop(BorderStyle border) + { + setBorderTop(border.getCode()); + } /** * get the type of border to use for the top border of the cell * @return border type - * @see #BORDER_NONE - * @see #BORDER_THIN - * @see #BORDER_MEDIUM - * @see #BORDER_DASHED - * @see #BORDER_DOTTED - * @see #BORDER_THICK - * @see #BORDER_DOUBLE - * @see #BORDER_HAIR - * @see #BORDER_MEDIUM_DASHED - * @see #BORDER_DASH_DOT - * @see #BORDER_MEDIUM_DASH_DOT - * @see #BORDER_DASH_DOT_DOT - * @see #BORDER_MEDIUM_DASH_DOT_DOT - * @see #BORDER_SLANTED_DASH_DOT */ @Override - public short getBorderTop() + public BorderStyle getBorderTop() { - return _format.getBorderTop(); + return BorderStyle.valueOf(_format.getBorderTop()); } /** @@ -557,6 +549,7 @@ public final class HSSFCellStyle implements CellStyle { * @see #BORDER_DASH_DOT_DOT * @see #BORDER_MEDIUM_DASH_DOT_DOT * @see #BORDER_SLANTED_DASH_DOT + * @deprecated 3.15 beta 1 */ @Override public void setBorderBottom(short border) @@ -564,29 +557,25 @@ public final class HSSFCellStyle implements CellStyle { _format.setIndentNotParentBorder(true); _format.setBorderBottom(border); } + + /** + * set the type of border to use for the bottom border of the cell + * @param border type + */ + @Override + public void setBorderBottom(BorderStyle border) + { + setBorderBottom(border.getCode()); + } /** * get the type of border to use for the bottom border of the cell * @return border type - * @see #BORDER_NONE - * @see #BORDER_THIN - * @see #BORDER_MEDIUM - * @see #BORDER_DASHED - * @see #BORDER_DOTTED - * @see #BORDER_THICK - * @see #BORDER_DOUBLE - * @see #BORDER_HAIR - * @see #BORDER_MEDIUM_DASHED - * @see #BORDER_DASH_DOT - * @see #BORDER_MEDIUM_DASH_DOT - * @see #BORDER_DASH_DOT_DOT - * @see #BORDER_MEDIUM_DASH_DOT_DOT - * @see #BORDER_SLANTED_DASH_DOT */ @Override - public short getBorderBottom() + public BorderStyle getBorderBottom() { - return _format.getBorderBottom(); + return BorderStyle.valueOf(_format.getBorderBottom()); } /** diff --git a/src/java/org/apache/poi/ss/usermodel/BorderFormatting.java b/src/java/org/apache/poi/ss/usermodel/BorderFormatting.java index 91a6f41797..044d344879 100644 --- a/src/java/org/apache/poi/ss/usermodel/BorderFormatting.java +++ b/src/java/org/apache/poi/ss/usermodel/BorderFormatting.java @@ -24,44 +24,86 @@ package org.apache.poi.ss.usermodel; * of Conditional Formatting settings */ public interface BorderFormatting { - /** No border */ + /** No border + * @deprecated 3.15 beta 1. Use {@link BorderStyle} + */ short BORDER_NONE = 0x0; - /** Thin border */ + + /** Thin border + * @deprecated 3.15 beta 1. Use {@link BorderStyle} + */ short BORDER_THIN = 0x1; - /** Medium border */ + + /** Medium border + * @deprecated 3.15 beta 1. Use {@link BorderStyle} + */ short BORDER_MEDIUM = 0x2; - /** dash border */ + + /** dash border + * @deprecated 3.15 beta 1. Use {@link BorderStyle} + */ short BORDER_DASHED = 0x3; - /** dot border */ - short BORDER_HAIR = 0x4; - /** Thick border */ + + /** dot border + * @deprecated 3.15 beta 1. Use {@link BorderStyle} + */ + short BORDER_DOTTED = 0x4; + + /** Thick border + * @deprecated 3.15 beta 1. Use {@link BorderStyle} + */ short BORDER_THICK = 0x5; - /** double-line border */ + + /** double-line border + * @deprecated 3.15 beta 1. Use {@link BorderStyle} + */ short BORDER_DOUBLE = 0x6; - /** hair-line border */ - short BORDER_DOTTED = 0x7; - /** Medium dashed border */ + + /** hair-line border + * @deprecated 3.15 beta 1. Use {@link BorderStyle} + */ + short BORDER_HAIR = 0x7; + + /** Medium dashed border + * @deprecated 3.15 beta 1. Use {@link BorderStyle} + */ short BORDER_MEDIUM_DASHED = 0x8; - /** dash-dot border */ + + + /** dash-dot border + * @deprecated 3.15 beta 1. Use {@link BorderStyle} + */ short BORDER_DASH_DOT = 0x9; - /** medium dash-dot border */ + + /** medium dash-dot border + * @deprecated 3.15 beta 1. Use {@link BorderStyle} + */ short BORDER_MEDIUM_DASH_DOT = 0xA; - /** dash-dot-dot border */ + + /** dash-dot-dot border + * @deprecated 3.15 beta 1. Use {@link BorderStyle} + */ short BORDER_DASH_DOT_DOT = 0xB; - /** medium dash-dot-dot border */ + + /** medium dash-dot-dot border + * @deprecated 3.15 beta 1. Use {@link BorderStyle} + */ short BORDER_MEDIUM_DASH_DOT_DOT = 0xC; - /** slanted dash-dot border */ + + /** slanted dash-dot border + * @deprecated 3.15 beta 1. Use {@link BorderStyle} + */ short BORDER_SLANTED_DASH_DOT = 0xD; - short getBorderBottom(); + BorderStyle getBorderBottom(); - short getBorderDiagonal(); + BorderStyle getBorderDiagonal(); - short getBorderLeft(); + BorderStyle getBorderLeft(); - short getBorderRight(); + BorderStyle getBorderRight(); - short getBorderTop(); + BorderStyle getBorderTop(); short getBottomBorderColor(); Color getBottomBorderColorColor(); @@ -78,35 +120,80 @@ public interface BorderFormatting { short getTopBorderColor(); Color getTopBorderColorColor(); + /** + * Set bottom border. + * + * @param border MUST be a BORDER_* constant + * @deprecated 3.15 beta 1 + */ void setBorderBottom(short border); + /** + * Set bottom border. + * + * @param border + */ + void setBorderBottom(BorderStyle border); + /** * Set diagonal border. * * @param border MUST be a BORDER_* constant + * @deprecated 3.15 beta 1 */ void setBorderDiagonal(short border); + + /** + * Set diagonal border. + * + * @param border + */ + void setBorderDiagonal(BorderStyle border); /** * Set left border. * * @param border MUST be a BORDER_* constant + * @deprecated 3.15 beta 1 */ void setBorderLeft(short border); + + /** + * Set left border. + * + * @param border + */ + void setBorderLeft(BorderStyle border); /** * Set right border. * * @param border MUST be a BORDER_* constant + * @deprecated 3.15 beta 1 */ void setBorderRight(short border); + + /** + * Set right border. + * + * @param border + */ + void setBorderRight(BorderStyle border); /** * Set top border. * * @param border MUST be a BORDER_* constant + * @deprecated 3.15 beta 1 */ void setBorderTop(short border); + + /** + * Set top border. + * + * @param border + */ + void setBorderTop(BorderStyle border); void setBottomBorderColor(short color); void setBottomBorderColor(Color color); diff --git a/src/java/org/apache/poi/ss/usermodel/BorderStyle.java b/src/java/org/apache/poi/ss/usermodel/BorderStyle.java index c44fb657c5..9fd5d15cbd 100644 --- a/src/java/org/apache/poi/ss/usermodel/BorderStyle.java +++ b/src/java/org/apache/poi/ss/usermodel/BorderStyle.java @@ -19,13 +19,13 @@ package org.apache.poi.ss.usermodel; /** * The enumeration value indicating the line style of a border in a cell, - * i.e., whether it is borded dash dot, dash dot dot, dashed, dotted, double, hair, medium, + * i.e., whether it is bordered dash dot, dash dot dot, dashed, dotted, double, hair, medium, * medium dash dot, medium dash dot dot, medium dashed, none, slant dash dot, thick or thin. */ public enum BorderStyle { /** - * No border + * No border (default) */ NONE(0x0), @@ -86,24 +86,32 @@ package org.apache.poi.ss.usermodel; /** * medium dash-dot-dot border - * @deprecated POI 3.15 beta 1. Use {@link MEDIUM_DASH_DOT_DOT} instead. */ - MEDIUM_DASH_DOT_DOTC(0xC), MEDIUM_DASH_DOT_DOT(0xC), /** * slanted dash-dot border */ SLANTED_DASH_DOT(0xD); - - + private final short code; - BorderStyle(int code) { + private BorderStyle(int code) { this.code = (short)code; } public short getCode() { return code; } + + private static final BorderStyle[] _table = new BorderStyle[0xD + 1]; + static { + for (BorderStyle c : values()) { + _table[c.getCode()] = c; + } + } + + public static BorderStyle valueOf(short code) { + return _table[code]; + } } diff --git a/src/java/org/apache/poi/ss/usermodel/CellStyle.java b/src/java/org/apache/poi/ss/usermodel/CellStyle.java index 644e813407..1f39bd0bc2 100644 --- a/src/java/org/apache/poi/ss/usermodel/CellStyle.java +++ b/src/java/org/apache/poi/ss/usermodel/CellStyle.java @@ -87,84 +87,98 @@ public interface CellStyle { /** * No border + * @deprecated Use {@link BorderStyle} */ short BORDER_NONE = 0x0; /** * Thin border + * @deprecated Use {@link BorderStyle} */ short BORDER_THIN = 0x1; /** * Medium border + * @deprecated Use {@link BorderStyle} */ short BORDER_MEDIUM = 0x2; /** * dash border + * @deprecated Use {@link BorderStyle} */ short BORDER_DASHED = 0x3; /** * dot border + * @deprecated Use {@link BorderStyle} */ short BORDER_DOTTED = 0x4; /** * Thick border + * @deprecated Use {@link BorderStyle} */ short BORDER_THICK = 0x5; /** * double-line border + * @deprecated Use {@link BorderStyle} */ short BORDER_DOUBLE = 0x6; /** * hair-line border + * @deprecated Use {@link BorderStyle} */ short BORDER_HAIR = 0x7; /** * Medium dashed border + * @deprecated Use {@link BorderStyle} */ short BORDER_MEDIUM_DASHED = 0x8; /** * dash-dot border + * @deprecated Use {@link BorderStyle} */ short BORDER_DASH_DOT = 0x9; /** * medium dash-dot border + * @deprecated Use {@link BorderStyle} */ short BORDER_MEDIUM_DASH_DOT = 0xA; /** * dash-dot-dot border + * @deprecated Use {@link BorderStyle} */ short BORDER_DASH_DOT_DOT = 0xB; /** * medium dash-dot-dot border + * @deprecated Use {@link BorderStyle} */ short BORDER_MEDIUM_DASH_DOT_DOT = 0xC; /** * slanted dash-dot border + * @deprecated Use {@link BorderStyle} */ short BORDER_SLANTED_DASH_DOT = 0xD; @@ -416,30 +430,21 @@ public interface CellStyle { * @see #BORDER_DASH_DOT_DOT * @see #BORDER_MEDIUM_DASH_DOT_DOT * @see #BORDER_SLANTED_DASH_DOT + * @deprecated 3.15 beta 1 */ - void setBorderLeft(short border); + + /** + * set the type of border to use for the left border of the cell + * @param border type + */ + void setBorderLeft(BorderStyle border); /** * get the type of border to use for the left border of the cell * @return border type - * @see #BORDER_NONE - * @see #BORDER_THIN - * @see #BORDER_MEDIUM - * @see #BORDER_DASHED - * @see #BORDER_DOTTED - * @see #BORDER_THICK - * @see #BORDER_DOUBLE - * @see #BORDER_HAIR - * @see #BORDER_MEDIUM_DASHED - * @see #BORDER_DASH_DOT - * @see #BORDER_MEDIUM_DASH_DOT - * @see #BORDER_DASH_DOT_DOT - * @see #BORDER_MEDIUM_DASH_DOT_DOT - * @see #BORDER_SLANTED_DASH_DOT */ - - short getBorderLeft(); + BorderStyle getBorderLeft(); /** * set the type of border to use for the right border of the cell @@ -458,30 +463,21 @@ public interface CellStyle { * @see #BORDER_DASH_DOT_DOT * @see #BORDER_MEDIUM_DASH_DOT_DOT * @see #BORDER_SLANTED_DASH_DOT + * @deprecated 3.15 beta 1 */ - void setBorderRight(short border); + + /** + * set the type of border to use for the right border of the cell + * @param border type + */ + void setBorderRight(BorderStyle border); /** * get the type of border to use for the right border of the cell * @return border type - * @see #BORDER_NONE - * @see #BORDER_THIN - * @see #BORDER_MEDIUM - * @see #BORDER_DASHED - * @see #BORDER_DOTTED - * @see #BORDER_THICK - * @see #BORDER_DOUBLE - * @see #BORDER_HAIR - * @see #BORDER_MEDIUM_DASHED - * @see #BORDER_DASH_DOT - * @see #BORDER_MEDIUM_DASH_DOT - * @see #BORDER_DASH_DOT_DOT - * @see #BORDER_MEDIUM_DASH_DOT_DOT - * @see #BORDER_SLANTED_DASH_DOT */ - - short getBorderRight(); + BorderStyle getBorderRight(); /** * set the type of border to use for the top border of the cell @@ -500,30 +496,21 @@ public interface CellStyle { * @see #BORDER_DASH_DOT_DOT * @see #BORDER_MEDIUM_DASH_DOT_DOT * @see #BORDER_SLANTED_DASH_DOT + * @deprecated 3.15 beta 1 */ - void setBorderTop(short border); + + /** + * set the type of border to use for the top border of the cell + * @param border type + */ + void setBorderTop(BorderStyle border); /** * get the type of border to use for the top border of the cell * @return border type - * @see #BORDER_NONE - * @see #BORDER_THIN - * @see #BORDER_MEDIUM - * @see #BORDER_DASHED - * @see #BORDER_DOTTED - * @see #BORDER_THICK - * @see #BORDER_DOUBLE - * @see #BORDER_HAIR - * @see #BORDER_MEDIUM_DASHED - * @see #BORDER_DASH_DOT - * @see #BORDER_MEDIUM_DASH_DOT - * @see #BORDER_DASH_DOT_DOT - * @see #BORDER_MEDIUM_DASH_DOT_DOT - * @see #BORDER_SLANTED_DASH_DOT */ - - short getBorderTop(); + BorderStyle getBorderTop(); /** * set the type of border to use for the bottom border of the cell @@ -542,29 +529,21 @@ public interface CellStyle { * @see #BORDER_DASH_DOT_DOT * @see #BORDER_MEDIUM_DASH_DOT_DOT * @see #BORDER_SLANTED_DASH_DOT + * @deprecated 3.15 beta 1 */ - void setBorderBottom(short border); + + /** + * set the type of border to use for the bottom border of the cell + * @param border type + */ + void setBorderBottom(BorderStyle border); /** * get the type of border to use for the bottom border of the cell * @return border type - * @see #BORDER_NONE - * @see #BORDER_THIN - * @see #BORDER_MEDIUM - * @see #BORDER_DASHED - * @see #BORDER_DOTTED - * @see #BORDER_THICK - * @see #BORDER_DOUBLE - * @see #BORDER_HAIR - * @see #BORDER_MEDIUM_DASHED - * @see #BORDER_DASH_DOT - * @see #BORDER_MEDIUM_DASH_DOT - * @see #BORDER_DASH_DOT_DOT - * @see #BORDER_MEDIUM_DASH_DOT_DOT - * @see #BORDER_SLANTED_DASH_DOT */ - short getBorderBottom(); + BorderStyle getBorderBottom(); /** * set the color to use for the left border diff --git a/src/java/org/apache/poi/ss/util/CellUtil.java b/src/java/org/apache/poi/ss/util/CellUtil.java index 0ac220928d..ad3425aac1 100644 --- a/src/java/org/apache/poi/ss/util/CellUtil.java +++ b/src/java/org/apache/poi/ss/util/CellUtil.java @@ -22,6 +22,7 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; +import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; @@ -277,10 +278,10 @@ public final class CellUtil { private static Map getFormatProperties(CellStyle style) { Map properties = new HashMap(); putShort(properties, ALIGNMENT, style.getAlignment()); - putShort(properties, BORDER_BOTTOM, style.getBorderBottom()); - putShort(properties, BORDER_LEFT, style.getBorderLeft()); - putShort(properties, BORDER_RIGHT, style.getBorderRight()); - putShort(properties, BORDER_TOP, style.getBorderTop()); + putBorderStyle(properties, BORDER_BOTTOM, style.getBorderBottom()); + putBorderStyle(properties, BORDER_LEFT, style.getBorderLeft()); + putBorderStyle(properties, BORDER_RIGHT, style.getBorderRight()); + putBorderStyle(properties, BORDER_TOP, style.getBorderTop()); putShort(properties, BOTTOM_BORDER_COLOR, style.getBottomBorderColor()); putShort(properties, DATA_FORMAT, style.getDataFormat()); putShort(properties, FILL_BACKGROUND_COLOR, style.getFillBackgroundColor()); @@ -309,10 +310,10 @@ public final class CellUtil { */ private static void setFormatProperties(CellStyle style, Workbook workbook, Map properties) { style.setAlignment(getShort(properties, ALIGNMENT)); - style.setBorderBottom(getShort(properties, BORDER_BOTTOM)); - style.setBorderLeft(getShort(properties, BORDER_LEFT)); - style.setBorderRight(getShort(properties, BORDER_RIGHT)); - style.setBorderTop(getShort(properties, BORDER_TOP)); + style.setBorderBottom(getBorderStyle(properties, BORDER_BOTTOM)); + style.setBorderLeft(getBorderStyle(properties, BORDER_LEFT)); + style.setBorderRight(getBorderStyle(properties, BORDER_RIGHT)); + style.setBorderTop(getBorderStyle(properties, BORDER_TOP)); style.setBottomBorderColor(getShort(properties, BOTTOM_BORDER_COLOR)); style.setDataFormat(getShort(properties, DATA_FORMAT)); style.setFillBackgroundColor(getShort(properties, FILL_BACKGROUND_COLOR)); @@ -345,6 +346,18 @@ public final class CellUtil { } return 0; } + + /** + * Utility method that returns the named BorderStyle value form the given map. + * + * @param properties map of named properties (String -> Object) + * @param name property name + * @return Border style if set, otherwise {@link BorderStyle#NONE} + */ + private static BorderStyle getBorderStyle(Map properties, String name) { + BorderStyle value = (BorderStyle) properties.get(name); + return (value != null) ? value : BorderStyle.NONE; + } /** * Utility method that returns the named boolean value form the given map. @@ -373,6 +386,17 @@ public final class CellUtil { private static void putShort(Map properties, String name, short value) { properties.put(name, Short.valueOf(value)); } + + /** + * Utility method that puts the named short value to the given map. + * + * @param properties map of properties (String -> Object) + * @param name property name + * @param value property value + */ + private static void putBorderStyle(Map properties, String name, BorderStyle border) { + properties.put(name, border); + } /** * Utility method that puts the named boolean value to the given map. diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFBorderFormatting.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFBorderFormatting.java index e307a4a303..72329cf203 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFBorderFormatting.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFBorderFormatting.java @@ -17,6 +17,7 @@ package org.apache.poi.xssf.usermodel; import org.apache.poi.ss.usermodel.BorderFormatting; +import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.Color; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorder; import org.openxmlformats.schemas.spreadsheetml.x2006.main.STBorderStyle; @@ -34,126 +35,183 @@ public class XSSFBorderFormatting implements BorderFormatting { _border = border; } - public short getBorderBottom() { + @Override + public BorderStyle getBorderBottom() { STBorderStyle.Enum ptrn = _border.isSetBottom() ? _border.getBottom().getStyle() : null; - return ptrn == null ? BORDER_NONE : (short)(ptrn.intValue() - 1); + return ptrn == null ? BorderStyle.NONE : BorderStyle.valueOf((short)(ptrn.intValue() - 1)); } - public short getBorderDiagonal() { + @Override + public BorderStyle getBorderDiagonal() { STBorderStyle.Enum ptrn = _border.isSetDiagonal() ? _border.getDiagonal().getStyle() : null; - return ptrn == null ? BORDER_NONE : (short)(ptrn.intValue() - 1); + return ptrn == null ? BorderStyle.NONE : BorderStyle.valueOf((short)(ptrn.intValue() - 1)); } - public short getBorderLeft() { + @Override + public BorderStyle getBorderLeft() { STBorderStyle.Enum ptrn = _border.isSetLeft() ? _border.getLeft().getStyle() : null; - return ptrn == null ? BORDER_NONE : (short)(ptrn.intValue() - 1); + return ptrn == null ? BorderStyle.NONE : BorderStyle.valueOf((short)(ptrn.intValue() - 1)); } - public short getBorderRight() { + @Override + public BorderStyle getBorderRight() { STBorderStyle.Enum ptrn = _border.isSetRight() ? _border.getRight().getStyle() : null; - return ptrn == null ? BORDER_NONE : (short)(ptrn.intValue() - 1); + return ptrn == null ? BorderStyle.NONE : BorderStyle.valueOf((short)(ptrn.intValue() - 1)); } - public short getBorderTop() { + @Override + public BorderStyle getBorderTop() { STBorderStyle.Enum ptrn = _border.isSetTop() ? _border.getTop().getStyle() : null; - return ptrn == null ? BORDER_NONE : (short)(ptrn.intValue() - 1); + return ptrn == null ? BorderStyle.NONE : BorderStyle.valueOf((short)(ptrn.intValue() - 1)); } + @Override public XSSFColor getBottomBorderColorColor() { if(!_border.isSetBottom()) return null; CTBorderPr pr = _border.getBottom(); return new XSSFColor(pr.getColor()); } + @Override public short getBottomBorderColor() { XSSFColor color = getBottomBorderColorColor(); if (color == null) return 0; return color.getIndexed(); } + @Override public XSSFColor getDiagonalBorderColorColor() { if(!_border.isSetDiagonal()) return null; CTBorderPr pr = _border.getDiagonal(); return new XSSFColor(pr.getColor()); } + @Override public short getDiagonalBorderColor() { XSSFColor color = getDiagonalBorderColorColor(); if (color == null) return 0; return color.getIndexed(); } + @Override public XSSFColor getLeftBorderColorColor() { if(!_border.isSetLeft()) return null; CTBorderPr pr = _border.getLeft(); return new XSSFColor(pr.getColor()); } + @Override public short getLeftBorderColor() { XSSFColor color = getLeftBorderColorColor(); if (color == null) return 0; return color.getIndexed(); } + @Override public XSSFColor getRightBorderColorColor() { if(!_border.isSetRight()) return null; CTBorderPr pr = _border.getRight(); return new XSSFColor(pr.getColor()); } + @Override public short getRightBorderColor() { XSSFColor color = getRightBorderColorColor(); if (color == null) return 0; return color.getIndexed(); } + @Override public XSSFColor getTopBorderColorColor() { if(!_border.isSetTop()) return null; CTBorderPr pr = _border.getTop(); return new XSSFColor(pr.getColor()); } + @Override public short getTopBorderColor() { XSSFColor color = getRightBorderColorColor(); if (color == null) return 0; return color.getIndexed(); } + /** + * @deprecated 3.15 beta 1. Use {@link #setBorderBottom(BorderStyle)} + */ + @Override public void setBorderBottom(short border) { + setBorderBottom(BorderStyle.valueOf(border)); + } + @Override + public void setBorderBottom(BorderStyle border) { CTBorderPr pr = _border.isSetBottom() ? _border.getBottom() : _border.addNewBottom(); - if(border == BORDER_NONE) _border.unsetBottom(); - else pr.setStyle(STBorderStyle.Enum.forInt(border + 1)); + if(border == BorderStyle.NONE) _border.unsetBottom(); + else pr.setStyle(STBorderStyle.Enum.forInt(border.getCode() + 1)); } + /** + * @deprecated 3.15 beta 1. Use {@link #setBorderDiagonal(BorderStyle)} + */ + @Override public void setBorderDiagonal(short border) { + setBorderDiagonal(BorderStyle.valueOf(border)); + } + @Override + public void setBorderDiagonal(BorderStyle border) { CTBorderPr pr = _border.isSetDiagonal() ? _border.getDiagonal() : _border.addNewDiagonal(); - if(border == BORDER_NONE) _border.unsetDiagonal(); - else pr.setStyle(STBorderStyle.Enum.forInt(border + 1)); + if(border == BorderStyle.NONE) _border.unsetDiagonal(); + else pr.setStyle(STBorderStyle.Enum.forInt(border.getCode() + 1)); } + /** + * @deprecated 3.15 beta 1. Use {@link #setBorderLeft(BorderStyle)} + */ + @Override public void setBorderLeft(short border) { + setBorderLeft(BorderStyle.valueOf(border)); + } + @Override + public void setBorderLeft(BorderStyle border) { CTBorderPr pr = _border.isSetLeft() ? _border.getLeft() : _border.addNewLeft(); - if(border == BORDER_NONE) _border.unsetLeft(); - else pr.setStyle(STBorderStyle.Enum.forInt(border + 1)); + if(border == BorderStyle.NONE) _border.unsetLeft(); + else pr.setStyle(STBorderStyle.Enum.forInt(border.getCode() + 1)); } + /** + * @deprecated 3.15 beta 1. Use {@link #setBorderRight(BorderStyle)} + */ + @Override public void setBorderRight(short border) { + setBorderRight(BorderStyle.valueOf(border)); + } + @Override + public void setBorderRight(BorderStyle border) { CTBorderPr pr = _border.isSetRight() ? _border.getRight() : _border.addNewRight(); - if(border == BORDER_NONE) _border.unsetRight(); - else pr.setStyle(STBorderStyle.Enum.forInt(border + 1)); + if(border == BorderStyle.NONE) _border.unsetRight(); + else pr.setStyle(STBorderStyle.Enum.forInt(border.getCode() + 1)); } + /** + * @deprecated 3.15 beta 1. Use {@link #setBorderTop(BorderStyle)} + */ + @Override public void setBorderTop(short border) { + setBorderTop(BorderStyle.valueOf(border)); + } + @Override + public void setBorderTop(BorderStyle border) { CTBorderPr pr = _border.isSetTop() ? _border.getTop() : _border.addNewTop(); - if(border == BORDER_NONE) _border.unsetTop(); - else pr.setStyle(STBorderStyle.Enum.forInt(border + 1)); + if(border == BorderStyle.NONE) _border.unsetTop(); + else pr.setStyle(STBorderStyle.Enum.forInt(border.getCode() + 1)); } + @Override public void setBottomBorderColor(Color color) { XSSFColor xcolor = XSSFColor.toXSSFColor(color); if (xcolor == null) setBottomBorderColor((CTColor)null); else setBottomBorderColor(xcolor.getCTColor()); } + @Override public void setBottomBorderColor(short color) { CTColor ctColor = CTColor.Factory.newInstance(); ctColor.setIndexed(color); @@ -168,11 +226,13 @@ public class XSSFBorderFormatting implements BorderFormatting { } } + @Override public void setDiagonalBorderColor(Color color) { XSSFColor xcolor = XSSFColor.toXSSFColor(color); if (xcolor == null) setDiagonalBorderColor((CTColor)null); else setDiagonalBorderColor(xcolor.getCTColor()); } + @Override public void setDiagonalBorderColor(short color) { CTColor ctColor = CTColor.Factory.newInstance(); ctColor.setIndexed(color); @@ -187,11 +247,13 @@ public class XSSFBorderFormatting implements BorderFormatting { } } + @Override public void setLeftBorderColor(Color color) { XSSFColor xcolor = XSSFColor.toXSSFColor(color); if (xcolor == null) setLeftBorderColor((CTColor)null); else setLeftBorderColor(xcolor.getCTColor()); } + @Override public void setLeftBorderColor(short color) { CTColor ctColor = CTColor.Factory.newInstance(); ctColor.setIndexed(color); @@ -206,11 +268,13 @@ public class XSSFBorderFormatting implements BorderFormatting { } } + @Override public void setRightBorderColor(Color color) { XSSFColor xcolor = XSSFColor.toXSSFColor(color); if (xcolor == null) setRightBorderColor((CTColor)null); else setRightBorderColor(xcolor.getCTColor()); } + @Override public void setRightBorderColor(short color) { CTColor ctColor = CTColor.Factory.newInstance(); ctColor.setIndexed(color); @@ -225,11 +289,13 @@ public class XSSFBorderFormatting implements BorderFormatting { } } + @Override public void setTopBorderColor(Color color) { XSSFColor xcolor = XSSFColor.toXSSFColor(color); if (xcolor == null) setTopBorderColor((CTColor)null); else setTopBorderColor(xcolor.getCTColor()); } + @Override public void setTopBorderColor(short color) { CTColor ctColor = CTColor.Factory.newInstance(); ctColor.setIndexed(color); diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java index 8e47990f12..7a43756b2c 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java @@ -251,158 +251,113 @@ public class XSSFCellStyle implements CellStyle { /** * Get the type of border to use for the bottom border of the cell * - * @return short - border type - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_NONE - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THIN - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASHED - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOTTED - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THICK - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOUBLE - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_HAIR - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASHED - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_SLANTED_DASH_DOT + * @return border type, default value is {@link org.apache.poi.ss.usermodel.BorderStyle#NONE} */ @Override - public short getBorderBottom() { - if(!_cellXf.getApplyBorder()) return BORDER_NONE; + public BorderStyle getBorderBottom() { + if(!_cellXf.getApplyBorder()) return BorderStyle.NONE; int idx = (int)_cellXf.getBorderId(); CTBorder ct = _stylesSource.getBorderAt(idx).getCTBorder(); STBorderStyle.Enum ptrn = ct.isSetBottom() ? ct.getBottom().getStyle() : null; - return ptrn == null ? BORDER_NONE : (short)(ptrn.intValue() - 1); + if (ptrn == null) { + return BorderStyle.NONE; + } + return BorderStyle.valueOf((short)(ptrn.intValue() - 1)); } /** * Get the type of border to use for the bottom border of the cell * * @return border type as Java enum - * @see BorderStyle + * @deprecated 3.15 beta 1. Use {@link #getBorderBottom} */ public BorderStyle getBorderBottomEnum() { - int style = getBorderBottom(); - return BorderStyle.values()[style]; + return getBorderBottom(); } /** * Get the type of border to use for the left border of the cell * - * @return short - border type, default value is {@link org.apache.poi.ss.usermodel.CellStyle#BORDER_NONE} - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_NONE - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THIN - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASHED - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOTTED - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THICK - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOUBLE - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_HAIR - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASHED - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_SLANTED_DASH_DOT + * @return border type, default value is {@link org.apache.poi.ss.usermodel.BorderStyle#NONE} */ @Override - public short getBorderLeft() { - if(!_cellXf.getApplyBorder()) return BORDER_NONE; + public BorderStyle getBorderLeft() { + if(!_cellXf.getApplyBorder()) return BorderStyle.NONE; int idx = (int)_cellXf.getBorderId(); CTBorder ct = _stylesSource.getBorderAt(idx).getCTBorder(); STBorderStyle.Enum ptrn = ct.isSetLeft() ? ct.getLeft().getStyle() : null; - return ptrn == null ? BORDER_NONE : (short)(ptrn.intValue() - 1); + if (ptrn == null) { + return BorderStyle.NONE; + } + return BorderStyle.valueOf((short)(ptrn.intValue() - 1)); } /** * Get the type of border to use for the left border of the cell * * @return border type, default value is {@link org.apache.poi.ss.usermodel.BorderStyle#NONE} + * @deprecated 3.15 beta 1. Use {@link #getBorderLeft} */ public BorderStyle getBorderLeftEnum() { - int style = getBorderLeft(); - return BorderStyle.values()[style]; + return getBorderLeft(); } /** * Get the type of border to use for the right border of the cell * - * @return short - border type, default value is {@link org.apache.poi.ss.usermodel.CellStyle#BORDER_NONE} - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_NONE - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THIN - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASHED - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOTTED - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THICK - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOUBLE - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_HAIR - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASHED - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_SLANTED_DASH_DOT + * @return border type, default value is {@link org.apache.poi.ss.usermodel.BorderStyle#NONE} */ @Override - public short getBorderRight() { - if(!_cellXf.getApplyBorder()) return BORDER_NONE; + public BorderStyle getBorderRight() { + if(!_cellXf.getApplyBorder()) return BorderStyle.NONE; int idx = (int)_cellXf.getBorderId(); CTBorder ct = _stylesSource.getBorderAt(idx).getCTBorder(); STBorderStyle.Enum ptrn = ct.isSetRight() ? ct.getRight().getStyle() : null; - return ptrn == null ? BORDER_NONE : (short)(ptrn.intValue() - 1); + if (ptrn == null) { + return BorderStyle.NONE; + } + return BorderStyle.valueOf((short)(ptrn.intValue() - 1)); } /** * Get the type of border to use for the right border of the cell * * @return border type, default value is {@link org.apache.poi.ss.usermodel.BorderStyle#NONE} + * @deprecated 3.15 beta 1. Use {@link #getBorderRight} */ public BorderStyle getBorderRightEnum() { - int style = getBorderRight(); - return BorderStyle.values()[style]; + return getBorderRight(); } /** * Get the type of border to use for the top border of the cell * - * @return short - border type, default value is {@link org.apache.poi.ss.usermodel.CellStyle#BORDER_NONE} - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_NONE - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THIN - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASHED - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOTTED - * @see org.apache.poi.ss.usermodel.CellStyle #BORDER_THICK - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOUBLE - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_HAIR - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASHED - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT_DOT - * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_SLANTED_DASH_DOT + * @return border type, default value is {@link org.apache.poi.ss.usermodel.BorderStyle#NONE} */ @Override - public short getBorderTop() { - if(!_cellXf.getApplyBorder()) return BORDER_NONE; + public BorderStyle getBorderTop() { + if(!_cellXf.getApplyBorder()) return BorderStyle.NONE; int idx = (int)_cellXf.getBorderId(); CTBorder ct = _stylesSource.getBorderAt(idx).getCTBorder(); STBorderStyle.Enum ptrn = ct.isSetTop() ? ct.getTop().getStyle() : null; - return ptrn == null ? BORDER_NONE : (short)(ptrn.intValue() - 1); + if (ptrn == null) { + return BorderStyle.NONE; + } + return BorderStyle.valueOf((short) (ptrn.intValue() - 1)); } /** * Get the type of border to use for the top border of the cell * * @return border type, default value is {@link org.apache.poi.ss.usermodel.BorderStyle#NONE} + * @deprecated 3.15 beta 1. Use {@link #getBorderTop} */ public BorderStyle getBorderTopEnum() { - int style = getBorderTop(); - return BorderStyle.values()[style]; + return getBorderTop(); } /** @@ -849,6 +804,7 @@ public class XSSFCellStyle implements CellStyle { * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT_DOT * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT_DOT * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_SLANTED_DASH_DOT + * @deprecated 3.15 beta 1 */ @Override public void setBorderBottom(short border) { @@ -869,8 +825,9 @@ public class XSSFCellStyle implements CellStyle { * @param border - type of border to use * @see org.apache.poi.ss.usermodel.BorderStyle */ + @Override public void setBorderBottom(BorderStyle border) { - setBorderBottom((short)border.ordinal()); + setBorderBottom(border.getCode()); } /** @@ -890,6 +847,7 @@ public class XSSFCellStyle implements CellStyle { * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT_DOT * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT_DOT * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_SLANTED_DASH_DOT + * @deprecated 3.15 beta 1 */ @Override public void setBorderLeft(short border) { @@ -909,8 +867,9 @@ public class XSSFCellStyle implements CellStyle { * * @param border the type of border to use */ + @Override public void setBorderLeft(BorderStyle border) { - setBorderLeft((short)border.ordinal()); + setBorderLeft(border.getCode()); } /** @@ -931,6 +890,7 @@ public class XSSFCellStyle implements CellStyle { * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT_DOT * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT_DOT * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_SLANTED_DASH_DOT + * @deprecated 3.15 beta 1 */ @Override public void setBorderRight(short border) { @@ -950,8 +910,9 @@ public class XSSFCellStyle implements CellStyle { * * @param border the type of border to use */ + @Override public void setBorderRight(BorderStyle border) { - setBorderRight((short)border.ordinal()); + setBorderRight(border.getCode()); } /** @@ -972,9 +933,10 @@ public class XSSFCellStyle implements CellStyle { * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT_DOT * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT_DOT * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_SLANTED_DASH_DOT + * @deprecated 3.15 beta 1 */ - @Override -public void setBorderTop(short border) { + @Override + public void setBorderTop(short border) { CTBorder ct = getCTBorder(); CTBorderPr pr = ct.isSetTop() ? ct.getTop() : ct.addNewTop(); if(border == BORDER_NONE) ct.unsetTop(); @@ -991,8 +953,9 @@ public void setBorderTop(short border) { * * @param border the type of border to use */ + @Override public void setBorderTop(BorderStyle border) { - setBorderTop((short)border.ordinal()); + setBorderTop(border.getCode()); } /** diff --git a/src/ooxml/testcases/org/apache/poi/ss/usermodel/TestXSSFBorderStyle.java b/src/ooxml/testcases/org/apache/poi/ss/usermodel/TestXSSFBorderStyle.java new file mode 100644 index 0000000000..2e9334b1ab --- /dev/null +++ b/src/ooxml/testcases/org/apache/poi/ss/usermodel/TestXSSFBorderStyle.java @@ -0,0 +1,30 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.ss.usermodel; + +import org.apache.poi.xssf.XSSFITestDataProvider; + +/** + * @author Yegor Kozlov + */ +public final class TestXSSFBorderStyle extends BaseTestBorderStyle { + + public TestXSSFBorderStyle() { + super(XSSFITestDataProvider.instance); + } +} \ No newline at end of file diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java index 5b29d7911d..69e1191228 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java @@ -104,11 +104,11 @@ public class TestXSSFCellStyle { @Test public void testGetSetBorderBottom() { //default values - assertEquals(CellStyle.BORDER_NONE, cellStyle.getBorderBottom()); + assertEquals(BorderStyle.NONE, cellStyle.getBorderBottom()); int num = stylesTable.getBorders().size(); - cellStyle.setBorderBottom(CellStyle.BORDER_MEDIUM); - assertEquals(CellStyle.BORDER_MEDIUM, cellStyle.getBorderBottom()); + cellStyle.setBorderBottom(BorderStyle.MEDIUM); + assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderBottom()); //a new border has been added assertEquals(num + 1, stylesTable.getBorders().size()); //id of the created border @@ -121,15 +121,15 @@ public class TestXSSFCellStyle { num = stylesTable.getBorders().size(); //setting the same border multiple times should not change borderId for (int i = 0; i < 3; i++) { - cellStyle.setBorderBottom(CellStyle.BORDER_MEDIUM); - assertEquals(CellStyle.BORDER_MEDIUM, cellStyle.getBorderBottom()); + cellStyle.setBorderBottom(BorderStyle.MEDIUM); + assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderBottom()); } assertEquals(borderId, cellStyle.getCoreXf().getBorderId()); assertEquals(num, stylesTable.getBorders().size()); assertSame(ctBorder, stylesTable.getBorderAt(borderId).getCTBorder()); //setting border to none removes the element - cellStyle.setBorderBottom(CellStyle.BORDER_NONE); + cellStyle.setBorderBottom(BorderStyle.NONE); assertEquals(num, stylesTable.getBorders().size()); borderId = (int)cellStyle.getCoreXf().getBorderId(); ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); @@ -139,11 +139,11 @@ public class TestXSSFCellStyle { @Test public void testGetSetBorderRight() { //default values - assertEquals(CellStyle.BORDER_NONE, cellStyle.getBorderRight()); + assertEquals(BorderStyle.NONE, cellStyle.getBorderRight()); int num = stylesTable.getBorders().size(); - cellStyle.setBorderRight(CellStyle.BORDER_MEDIUM); - assertEquals(CellStyle.BORDER_MEDIUM, cellStyle.getBorderRight()); + cellStyle.setBorderRight(BorderStyle.MEDIUM); + assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderRight()); //a new border has been added assertEquals(num + 1, stylesTable.getBorders().size()); //id of the created border @@ -156,15 +156,15 @@ public class TestXSSFCellStyle { num = stylesTable.getBorders().size(); //setting the same border multiple times should not change borderId for (int i = 0; i < 3; i++) { - cellStyle.setBorderRight(CellStyle.BORDER_MEDIUM); - assertEquals(CellStyle.BORDER_MEDIUM, cellStyle.getBorderRight()); + cellStyle.setBorderRight(BorderStyle.MEDIUM); + assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderRight()); } assertEquals(borderId, cellStyle.getCoreXf().getBorderId()); assertEquals(num, stylesTable.getBorders().size()); assertSame(ctBorder, stylesTable.getBorderAt(borderId).getCTBorder()); //setting border to none removes the element - cellStyle.setBorderRight(CellStyle.BORDER_NONE); + cellStyle.setBorderRight(BorderStyle.NONE); assertEquals(num, stylesTable.getBorders().size()); borderId = (int)cellStyle.getCoreXf().getBorderId(); ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); @@ -174,11 +174,11 @@ public class TestXSSFCellStyle { @Test public void testGetSetBorderLeft() { //default values - assertEquals(CellStyle.BORDER_NONE, cellStyle.getBorderLeft()); + assertEquals(BorderStyle.NONE, cellStyle.getBorderLeft()); int num = stylesTable.getBorders().size(); - cellStyle.setBorderLeft(CellStyle.BORDER_MEDIUM); - assertEquals(CellStyle.BORDER_MEDIUM, cellStyle.getBorderLeft()); + cellStyle.setBorderLeft(BorderStyle.MEDIUM); + assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderLeft()); //a new border has been added assertEquals(num + 1, stylesTable.getBorders().size()); //id of the created border @@ -191,15 +191,15 @@ public class TestXSSFCellStyle { num = stylesTable.getBorders().size(); //setting the same border multiple times should not change borderId for (int i = 0; i < 3; i++) { - cellStyle.setBorderLeft(CellStyle.BORDER_MEDIUM); - assertEquals(CellStyle.BORDER_MEDIUM, cellStyle.getBorderLeft()); + cellStyle.setBorderLeft(BorderStyle.MEDIUM); + assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderLeft()); } assertEquals(borderId, cellStyle.getCoreXf().getBorderId()); assertEquals(num, stylesTable.getBorders().size()); assertSame(ctBorder, stylesTable.getBorderAt(borderId).getCTBorder()); //setting border to none removes the element - cellStyle.setBorderLeft(CellStyle.BORDER_NONE); + cellStyle.setBorderLeft(BorderStyle.NONE); assertEquals(num, stylesTable.getBorders().size()); borderId = (int)cellStyle.getCoreXf().getBorderId(); ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); @@ -209,11 +209,11 @@ public class TestXSSFCellStyle { @Test public void testGetSetBorderTop() { //default values - assertEquals(CellStyle.BORDER_NONE, cellStyle.getBorderTop()); + assertEquals(BorderStyle.NONE, cellStyle.getBorderTop()); int num = stylesTable.getBorders().size(); - cellStyle.setBorderTop(CellStyle.BORDER_MEDIUM); - assertEquals(CellStyle.BORDER_MEDIUM, cellStyle.getBorderTop()); + cellStyle.setBorderTop(BorderStyle.MEDIUM); + assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderTop()); //a new border has been added assertEquals(num + 1, stylesTable.getBorders().size()); //id of the created border @@ -226,165 +226,112 @@ public class TestXSSFCellStyle { num = stylesTable.getBorders().size(); //setting the same border multiple times should not change borderId for (int i = 0; i < 3; i++) { - cellStyle.setBorderTop(CellStyle.BORDER_MEDIUM); - assertEquals(CellStyle.BORDER_MEDIUM, cellStyle.getBorderTop()); + cellStyle.setBorderTop(BorderStyle.MEDIUM); + assertEquals(BorderStyle.MEDIUM, cellStyle.getBorderTop()); } assertEquals(borderId, cellStyle.getCoreXf().getBorderId()); assertEquals(num, stylesTable.getBorders().size()); assertSame(ctBorder, stylesTable.getBorderAt(borderId).getCTBorder()); //setting border to none removes the element - cellStyle.setBorderTop(CellStyle.BORDER_NONE); + cellStyle.setBorderTop(BorderStyle.NONE); assertEquals(num, stylesTable.getBorders().size()); borderId = (int)cellStyle.getCoreXf().getBorderId(); ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); assertFalse(ctBorder.isSetTop()); - } - - @Test - public void testGetSetBorderThin() { - cellStyle.setBorderTop(CellStyle.BORDER_THIN); - assertEquals(CellStyle.BORDER_THIN, cellStyle.getBorderTop()); + } + + private void testGetSetBorderXMLBean(BorderStyle border, STBorderStyle.Enum expected) { + cellStyle.setBorderTop(border); + assertEquals(border, cellStyle.getBorderTop()); int borderId = (int)cellStyle.getCoreXf().getBorderId(); assertTrue(borderId > 0); //check changes in the underlying xml bean CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); - assertEquals(STBorderStyle.THIN, ctBorder.getTop().getStyle()); - } - - @Test - public void testGetSetBorderMedium() { - cellStyle.setBorderTop(CellStyle.BORDER_MEDIUM); - assertEquals(CellStyle.BORDER_MEDIUM, cellStyle.getBorderTop()); + assertEquals(expected, ctBorder.getTop().getStyle()); + } + + + // Border Styles, in BorderStyle/STBorderStyle enum order + @Test + public void testGetSetBorderNone() { + cellStyle.setBorderTop(BorderStyle.NONE); + assertEquals(BorderStyle.NONE, cellStyle.getBorderTop()); int borderId = (int)cellStyle.getCoreXf().getBorderId(); assertTrue(borderId > 0); //check changes in the underlying xml bean CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); - assertEquals(STBorderStyle.MEDIUM, ctBorder.getTop().getStyle()); - } - - @Test + assertNull(ctBorder.getTop()); + // no border style and STBorderStyle.NONE are equivalent + // POI prefers to unset the border style than explicitly set it STBorderStyle.NONE + } + + @Test + public void testGetSetBorderThin() { + testGetSetBorderXMLBean(BorderStyle.THIN, STBorderStyle.THIN); + } + + @Test + public void testGetSetBorderMedium() { + testGetSetBorderXMLBean(BorderStyle.MEDIUM, STBorderStyle.MEDIUM); + } + + @Test + public void testGetSetBorderDashed() { + testGetSetBorderXMLBean(BorderStyle.DASHED, STBorderStyle.DASHED); + } + + @Test + public void testGetSetBorderDotted() { + testGetSetBorderXMLBean(BorderStyle.DOTTED, STBorderStyle.DOTTED); + } + + @Test public void testGetSetBorderThick() { - cellStyle.setBorderTop(CellStyle.BORDER_THICK); - assertEquals(CellStyle.BORDER_THICK, cellStyle.getBorderTop()); - int borderId = (int)cellStyle.getCoreXf().getBorderId(); - assertTrue(borderId > 0); - //check changes in the underlying xml bean - CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); - assertEquals(STBorderStyle.THICK, ctBorder.getTop().getStyle()); - } - - @Test + testGetSetBorderXMLBean(BorderStyle.THICK, STBorderStyle.THICK); + } + + @Test + public void testGetSetBorderDouble() { + testGetSetBorderXMLBean(BorderStyle.DOUBLE, STBorderStyle.DOUBLE); + } + + @Test public void testGetSetBorderHair() { - cellStyle.setBorderTop(CellStyle.BORDER_HAIR); - assertEquals(CellStyle.BORDER_HAIR, cellStyle.getBorderTop()); - int borderId = (int)cellStyle.getCoreXf().getBorderId(); - assertTrue(borderId > 0); - //check changes in the underlying xml bean - CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); - assertEquals(STBorderStyle.HAIR, ctBorder.getTop().getStyle()); - } - - @Test - public void testGetSetBorderDotted() { - cellStyle.setBorderTop(CellStyle.BORDER_DOTTED); - assertEquals(CellStyle.BORDER_DOTTED, cellStyle.getBorderTop()); - int borderId = (int)cellStyle.getCoreXf().getBorderId(); - assertTrue(borderId > 0); - //check changes in the underlying xml bean - CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); - assertEquals(STBorderStyle.DOTTED, ctBorder.getTop().getStyle()); - } - - @Test - public void testGetSetBorderDashed() { - cellStyle.setBorderTop(CellStyle.BORDER_DASHED); - assertEquals(CellStyle.BORDER_DASHED, cellStyle.getBorderTop()); - int borderId = (int)cellStyle.getCoreXf().getBorderId(); - assertTrue(borderId > 0); - //check changes in the underlying xml bean - CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); - assertEquals(STBorderStyle.DASHED, ctBorder.getTop().getStyle()); - } - - @Test + testGetSetBorderXMLBean(BorderStyle.HAIR, STBorderStyle.HAIR); + } + + @Test + public void testGetSetBorderMediumDashed() { + testGetSetBorderXMLBean(BorderStyle.MEDIUM_DASHED, STBorderStyle.MEDIUM_DASHED); + } + + @Test public void testGetSetBorderDashDot() { - cellStyle.setBorderTop(CellStyle.BORDER_DASH_DOT); - assertEquals(CellStyle.BORDER_DASH_DOT, cellStyle.getBorderTop()); - int borderId = (int)cellStyle.getCoreXf().getBorderId(); - assertTrue(borderId > 0); - //check changes in the underlying xml bean - CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); - assertEquals(STBorderStyle.DASH_DOT, ctBorder.getTop().getStyle()); - } - - @Test - public void testGetSetBorderDashDotDot() { - cellStyle.setBorderTop(CellStyle.BORDER_DASH_DOT_DOT); - assertEquals(CellStyle.BORDER_DASH_DOT_DOT, cellStyle.getBorderTop()); - int borderId = (int)cellStyle.getCoreXf().getBorderId(); - assertTrue(borderId > 0); - //check changes in the underlying xml bean - CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); - assertEquals(STBorderStyle.DASH_DOT_DOT, ctBorder.getTop().getStyle()); - } - - @Test + testGetSetBorderXMLBean(BorderStyle.DASH_DOT, STBorderStyle.DASH_DOT); + } + + @Test public void testGetSetBorderMediumDashDot() { - cellStyle.setBorderTop(CellStyle.BORDER_MEDIUM_DASH_DOT); - assertEquals(CellStyle.BORDER_MEDIUM_DASH_DOT, cellStyle.getBorderTop()); - int borderId = (int)cellStyle.getCoreXf().getBorderId(); - assertTrue(borderId > 0); - //check changes in the underlying xml bean - CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); - assertEquals(STBorderStyle.MEDIUM_DASH_DOT, ctBorder.getTop().getStyle()); - } - - @Test + testGetSetBorderXMLBean(BorderStyle.MEDIUM_DASH_DOT, STBorderStyle.MEDIUM_DASH_DOT); + } + + @Test + public void testGetSetBorderDashDotDot() { + testGetSetBorderXMLBean(BorderStyle.DASH_DOT_DOT, STBorderStyle.DASH_DOT_DOT); + } + + @Test public void testGetSetBorderMediumDashDotDot() { - cellStyle.setBorderTop(CellStyle.BORDER_MEDIUM_DASH_DOT_DOT); - assertEquals(CellStyle.BORDER_MEDIUM_DASH_DOT_DOT, cellStyle.getBorderTop()); - int borderId = (int)cellStyle.getCoreXf().getBorderId(); - assertTrue(borderId > 0); - //check changes in the underlying xml bean - CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); - assertEquals(STBorderStyle.MEDIUM_DASH_DOT_DOT, ctBorder.getTop().getStyle()); - } - - @Test - public void testGetSetBorderMediumDashed() { - cellStyle.setBorderTop(CellStyle.BORDER_MEDIUM_DASHED); - assertEquals(CellStyle.BORDER_MEDIUM_DASHED, cellStyle.getBorderTop()); - int borderId = (int)cellStyle.getCoreXf().getBorderId(); - assertTrue(borderId > 0); - //check changes in the underlying xml bean - CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); - assertEquals(STBorderStyle.MEDIUM_DASHED, ctBorder.getTop().getStyle()); - } - - @Test + testGetSetBorderXMLBean(BorderStyle.MEDIUM_DASH_DOT_DOT, STBorderStyle.MEDIUM_DASH_DOT_DOT); + } + + @Test public void testGetSetBorderSlantDashDot() { - cellStyle.setBorderTop(CellStyle.BORDER_SLANTED_DASH_DOT); - assertEquals(CellStyle.BORDER_SLANTED_DASH_DOT, cellStyle.getBorderTop()); - int borderId = (int)cellStyle.getCoreXf().getBorderId(); - assertTrue(borderId > 0); - //check changes in the underlying xml bean - CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); - assertEquals(STBorderStyle.SLANT_DASH_DOT, ctBorder.getTop().getStyle()); - } - - @Test - public void testGetSetBorderDouble() { - cellStyle.setBorderTop(CellStyle.BORDER_DOUBLE); - assertEquals(CellStyle.BORDER_DOUBLE, cellStyle.getBorderTop()); - int borderId = (int)cellStyle.getCoreXf().getBorderId(); - assertTrue(borderId > 0); - //check changes in the underlying xml bean - CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder(); - assertEquals(STBorderStyle.DOUBLE, ctBorder.getTop().getStyle()); - } - - @Test + testGetSetBorderXMLBean(BorderStyle.SLANTED_DASH_DOT, STBorderStyle.SLANT_DASH_DOT); + } + + @Test public void testGetSetBottomBorderColor() { //defaults assertEquals(IndexedColors.BLACK.getIndex(), cellStyle.getBottomBorderColor()); @@ -780,21 +727,21 @@ public class TestXSSFCellStyle { assertEquals(2, wb.getNumberOfFonts()); XSSFCellStyle orig = wb.createCellStyle(); - orig.setAlignment(HSSFCellStyle.ALIGN_RIGHT); + orig.setAlignment(CellStyle.ALIGN_RIGHT); orig.setFont(fnt); orig.setDataFormat((short)18); - assertTrue(HSSFCellStyle.ALIGN_RIGHT == orig.getAlignment()); + assertTrue(CellStyle.ALIGN_RIGHT == orig.getAlignment()); assertTrue(fnt == orig.getFont()); assertTrue(18 == orig.getDataFormat()); XSSFCellStyle clone = wb.createCellStyle(); - assertFalse(HSSFCellStyle.ALIGN_RIGHT == clone.getAlignment()); + assertFalse(CellStyle.ALIGN_RIGHT == clone.getAlignment()); assertFalse(fnt == clone.getFont()); assertFalse(18 == clone.getDataFormat()); clone.cloneStyleFrom(orig); - assertTrue(HSSFCellStyle.ALIGN_RIGHT == clone.getAlignment()); + assertTrue(CellStyle.ALIGN_RIGHT == clone.getAlignment()); assertTrue(fnt == clone.getFont()); assertTrue(18 == clone.getDataFormat()); assertEquals(2, wb.getNumberOfFonts()); @@ -1104,5 +1051,7 @@ public class TestXSSFCellStyle { cellStyle.setRightBorderColor(null); assertNull(cellStyle.getRightBorderXSSFColor()); + + workbook.close(); } } diff --git a/src/scratchpad/src/org/apache/poi/hssf/converter/AbstractExcelUtils.java b/src/scratchpad/src/org/apache/poi/hssf/converter/AbstractExcelUtils.java index a45d856145..4f73f49a91 100644 --- a/src/scratchpad/src/org/apache/poi/hssf/converter/AbstractExcelUtils.java +++ b/src/scratchpad/src/org/apache/poi/hssf/converter/AbstractExcelUtils.java @@ -25,6 +25,7 @@ import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.hwpf.converter.AbstractWordUtils; +import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.Beta; import org.apache.poi.util.IOUtils; @@ -66,28 +67,28 @@ public class AbstractExcelUtils } } - public static String getBorderStyle( short xlsBorder ) + public static String getBorderStyle( BorderStyle xlsBorder ) { final String borderStyle; switch ( xlsBorder ) { - case HSSFCellStyle.BORDER_NONE: + case NONE: borderStyle = "none"; break; - case HSSFCellStyle.BORDER_DASH_DOT: - case HSSFCellStyle.BORDER_DASH_DOT_DOT: - case HSSFCellStyle.BORDER_DOTTED: - case HSSFCellStyle.BORDER_HAIR: - case HSSFCellStyle.BORDER_MEDIUM_DASH_DOT: - case HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT: - case HSSFCellStyle.BORDER_SLANTED_DASH_DOT: + case DASH_DOT: + case DASH_DOT_DOT: + case DOTTED: + case HAIR: + case MEDIUM_DASH_DOT: + case MEDIUM_DASH_DOT_DOT: + case SLANTED_DASH_DOT: borderStyle = "dotted"; break; - case HSSFCellStyle.BORDER_DASHED: - case HSSFCellStyle.BORDER_MEDIUM_DASHED: + case DASHED: + case MEDIUM_DASHED: borderStyle = "dashed"; break; - case HSSFCellStyle.BORDER_DOUBLE: + case DOUBLE: borderStyle = "double"; break; default: @@ -97,17 +98,17 @@ public class AbstractExcelUtils return borderStyle; } - public static String getBorderWidth( short xlsBorder ) + public static String getBorderWidth( BorderStyle xlsBorder ) { final String borderWidth; switch ( xlsBorder ) { - case HSSFCellStyle.BORDER_MEDIUM_DASH_DOT: - case HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT: - case HSSFCellStyle.BORDER_MEDIUM_DASHED: + case MEDIUM_DASH_DOT: + case MEDIUM_DASH_DOT_DOT: + case MEDIUM_DASHED: borderWidth = "2pt"; break; - case HSSFCellStyle.BORDER_THICK: + case THICK: borderWidth = "thick"; break; default: diff --git a/src/scratchpad/src/org/apache/poi/hssf/converter/ExcelToFoConverter.java b/src/scratchpad/src/org/apache/poi/hssf/converter/ExcelToFoConverter.java index f5ba5f1ea0..eff2f218d3 100644 --- a/src/scratchpad/src/org/apache/poi/hssf/converter/ExcelToFoConverter.java +++ b/src/scratchpad/src/org/apache/poi/hssf/converter/ExcelToFoConverter.java @@ -38,6 +38,7 @@ import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.hwpf.converter.FoDocumentFacade; import org.apache.poi.hwpf.converter.FontReplacer.Triplet; import org.apache.poi.ss.formula.eval.ErrorEval; +import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.Beta; @@ -192,10 +193,10 @@ public class ExcelToFoConverter extends AbstractExcelConverter protected boolean isEmptyStyle( CellStyle cellStyle ) { return cellStyle == null || ( cellStyle.getFillPattern() == 0 - && cellStyle.getBorderTop() == HSSFCellStyle.BORDER_NONE - && cellStyle.getBorderRight() == HSSFCellStyle.BORDER_NONE - && cellStyle.getBorderBottom() == HSSFCellStyle.BORDER_NONE - && cellStyle.getBorderLeft() == HSSFCellStyle.BORDER_NONE + && cellStyle.getBorderTop() == BorderStyle.NONE + && cellStyle.getBorderRight() == BorderStyle.NONE + && cellStyle.getBorderBottom() == BorderStyle.NONE + && cellStyle.getBorderLeft() == BorderStyle.NONE ); } @@ -374,9 +375,9 @@ public class ExcelToFoConverter extends AbstractExcelConverter } protected void processCellStyleBorder( HSSFWorkbook workbook, - Element cellTarget, String type, short xlsBorder, short borderColor ) + Element cellTarget, String type, BorderStyle xlsBorder, short borderColor ) { - if ( xlsBorder == HSSFCellStyle.BORDER_NONE ) + if ( xlsBorder == BorderStyle.NONE ) return; StringBuilder borderStyle = new StringBuilder(); diff --git a/src/scratchpad/src/org/apache/poi/hssf/converter/ExcelToHtmlConverter.java b/src/scratchpad/src/org/apache/poi/hssf/converter/ExcelToHtmlConverter.java index c61f05d9a2..222e362c3c 100644 --- a/src/scratchpad/src/org/apache/poi/hssf/converter/ExcelToHtmlConverter.java +++ b/src/scratchpad/src/org/apache/poi/hssf/converter/ExcelToHtmlConverter.java @@ -42,6 +42,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.hwpf.converter.HtmlDocumentFacade; import org.apache.poi.ss.formula.eval.ErrorEval; +import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.Beta; import org.apache.poi.util.POILogFactory; @@ -190,9 +191,9 @@ public class ExcelToHtmlConverter extends AbstractExcelConverter } private void buildStyle_border( HSSFWorkbook workbook, StringBuilder style, - String type, short xlsBorder, short borderColor ) + String type, BorderStyle xlsBorder, short borderColor ) { - if ( xlsBorder == HSSFCellStyle.BORDER_NONE ) { + if ( xlsBorder == BorderStyle.NONE ) { return; } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index 17861e289a..56071f6d93 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -68,6 +68,7 @@ import org.apache.poi.ss.formula.ptg.Area3DPtg; import org.apache.poi.ss.formula.ptg.DeletedArea3DPtg; import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.ss.usermodel.BaseTestBugzillaIssues; +import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType; @@ -2564,7 +2565,7 @@ public final class TestBugs extends BaseTestBugzillaIssues { HSSFSheet sheet = wb.getSheetAt(0); HSSFRow row = sheet.getRow(0); HSSFCellStyle rstyle = row.getRowStyle(); - assertEquals(rstyle.getBorderBottom(), CellStyle.BORDER_DOUBLE); + assertEquals(BorderStyle.DOUBLE, rstyle.getBorderBottom()); wb.close(); } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java b/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java index 8d7fd012a6..428d2bf967 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java @@ -24,6 +24,7 @@ import java.util.Calendar; import java.util.Date; import org.apache.poi.hssf.HSSFTestDataSamples; +import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; @@ -180,10 +181,10 @@ public final class TestCellStyle extends TestCase { HSSFCellStyle cs = wb.createCellStyle(); HSSFCellStyle cs2 = wb.createCellStyle(); - cs.setBorderBottom(HSSFCellStyle.BORDER_THIN); - cs.setBorderLeft(HSSFCellStyle.BORDER_THIN); - cs.setBorderRight(HSSFCellStyle.BORDER_THIN); - cs.setBorderTop(HSSFCellStyle.BORDER_THIN); + cs.setBorderBottom(BorderStyle.THIN); + cs.setBorderLeft(BorderStyle.THIN); + cs.setBorderRight(BorderStyle.THIN); + cs.setBorderTop(BorderStyle.THIN); cs.setFillForegroundColor(( short ) 0xA); cs.setFillPattern(( short ) 1); fnt.setColor(( short ) 0xf); @@ -346,40 +347,40 @@ public final class TestCellStyle extends TestCase { HSSFCellStyle cs; cs = s.getRow(0).getCell(0).getCellStyle(); - assertEquals(CellStyle.BORDER_HAIR, cs.getBorderRight()); + assertEquals(BorderStyle.HAIR, cs.getBorderRight()); cs = s.getRow(1).getCell(1).getCellStyle(); - assertEquals(CellStyle.BORDER_DOTTED, cs.getBorderRight()); + assertEquals(BorderStyle.DOTTED, cs.getBorderRight()); cs = s.getRow(2).getCell(2).getCellStyle(); - assertEquals(CellStyle.BORDER_DASH_DOT_DOT, cs.getBorderRight()); + assertEquals(BorderStyle.DASH_DOT_DOT, cs.getBorderRight()); cs = s.getRow(3).getCell(3).getCellStyle(); - assertEquals(CellStyle.BORDER_DASHED, cs.getBorderRight()); + assertEquals(BorderStyle.DASHED, cs.getBorderRight()); cs = s.getRow(4).getCell(4).getCellStyle(); - assertEquals(CellStyle.BORDER_THIN, cs.getBorderRight()); + assertEquals(BorderStyle.THIN, cs.getBorderRight()); cs = s.getRow(5).getCell(5).getCellStyle(); - assertEquals(CellStyle.BORDER_MEDIUM_DASH_DOT_DOT, cs.getBorderRight()); + assertEquals(BorderStyle.MEDIUM_DASH_DOT_DOT, cs.getBorderRight()); cs = s.getRow(6).getCell(6).getCellStyle(); - assertEquals(CellStyle.BORDER_SLANTED_DASH_DOT, cs.getBorderRight()); + assertEquals(BorderStyle.SLANTED_DASH_DOT, cs.getBorderRight()); cs = s.getRow(7).getCell(7).getCellStyle(); - assertEquals(CellStyle.BORDER_MEDIUM_DASH_DOT, cs.getBorderRight()); + assertEquals(BorderStyle.MEDIUM_DASH_DOT, cs.getBorderRight()); cs = s.getRow(8).getCell(8).getCellStyle(); - assertEquals(CellStyle.BORDER_MEDIUM_DASHED, cs.getBorderRight()); + assertEquals(BorderStyle.MEDIUM_DASHED, cs.getBorderRight()); cs = s.getRow(9).getCell(9).getCellStyle(); - assertEquals(CellStyle.BORDER_MEDIUM, cs.getBorderRight()); + assertEquals(BorderStyle.MEDIUM, cs.getBorderRight()); cs = s.getRow(10).getCell(10).getCellStyle(); - assertEquals(CellStyle.BORDER_THICK, cs.getBorderRight()); + assertEquals(BorderStyle.THICK, cs.getBorderRight()); cs = s.getRow(11).getCell(11).getCellStyle(); - assertEquals(CellStyle.BORDER_DOUBLE, cs.getBorderRight()); + assertEquals(BorderStyle.DOUBLE, cs.getBorderRight()); } public void testShrinkToFit() { @@ -485,7 +486,7 @@ public final class TestCellStyle extends TestCase { font.setColor(Font.COLOR_RED); CellStyle style = wb.createCellStyle(); - style.setBorderBottom(CellStyle.BORDER_DOTTED); + style.setBorderBottom(BorderStyle.DOTTED); style.setFont(font); Cell cell = row.createCell(0); @@ -498,7 +499,7 @@ public final class TestCellStyle extends TestCase { newCell.setCellValue("2testtext2"); CellStyle newStyle = newCell.getCellStyle(); - assertEquals(CellStyle.BORDER_DOTTED, newStyle.getBorderBottom()); + assertEquals(BorderStyle.DOTTED, newStyle.getBorderBottom()); assertEquals(Font.COLOR_RED, ((HSSFCellStyle)newStyle).getFont(wb).getColor()); // OutputStream out = new FileOutputStream("/tmp/56959.xls"); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFOptimiser.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFOptimiser.java index d230185f73..059ab3f384 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFOptimiser.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFOptimiser.java @@ -16,6 +16,8 @@ ==================================================================== */ package org.apache.poi.hssf.usermodel; +import org.apache.poi.ss.usermodel.BorderStyle; + import junit.framework.TestCase; public final class TestHSSFOptimiser extends TestCase { @@ -278,13 +280,13 @@ public final class TestHSSFOptimiser extends TestCase { assertEquals(21, wb.getNumCellStyles()); HSSFCellStyle cs1 = wb.createCellStyle(); - cs1.setBorderBottom(HSSFCellStyle.BORDER_THICK); + cs1.setBorderBottom(BorderStyle.THICK); HSSFCellStyle cs2 = wb.createCellStyle(); - cs2.setBorderBottom(HSSFCellStyle.BORDER_DASH_DOT); + cs2.setBorderBottom(BorderStyle.DASH_DOT); HSSFCellStyle cs3 = wb.createCellStyle(); // = cs1 - cs3.setBorderBottom(HSSFCellStyle.BORDER_THICK); + cs3.setBorderBottom(BorderStyle.THICK); assertEquals(24, wb.getNumCellStyles()); @@ -306,8 +308,8 @@ public final class TestHSSFOptimiser extends TestCase { // Check assertEquals(23, wb.getNumCellStyles()); - assertEquals(HSSFCellStyle.BORDER_THICK, r.getCell(0).getCellStyle().getBorderBottom()); - assertEquals(HSSFCellStyle.BORDER_DASH_DOT, r.getCell(1).getCellStyle().getBorderBottom()); - assertEquals(HSSFCellStyle.BORDER_THICK, r.getCell(2).getCellStyle().getBorderBottom()); + assertEquals(BorderStyle.THICK, r.getCell(0).getCellStyle().getBorderBottom()); + assertEquals(BorderStyle.DASH_DOT, r.getCell(1).getCellStyle().getBorderBottom()); + assertEquals(BorderStyle.THICK, r.getCell(2).getCellStyle().getBorderBottom()); } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestRowStyle.java b/src/testcases/org/apache/poi/hssf/usermodel/TestRowStyle.java index 0eb2346e36..ba65d063ac 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestRowStyle.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestRowStyle.java @@ -20,6 +20,7 @@ package org.apache.poi.hssf.usermodel; import junit.framework.TestCase; import org.apache.poi.hssf.HSSFTestDataSamples; +import org.apache.poi.ss.usermodel.BorderStyle; /** * Class to test row styling functionality @@ -110,10 +111,10 @@ public final class TestRowStyle extends TestCase { HSSFCellStyle cs = wb.createCellStyle(); HSSFCellStyle cs2 = wb.createCellStyle(); - cs.setBorderBottom(HSSFCellStyle.BORDER_THIN); - cs.setBorderLeft(HSSFCellStyle.BORDER_THIN); - cs.setBorderRight(HSSFCellStyle.BORDER_THIN); - cs.setBorderTop(HSSFCellStyle.BORDER_THIN); + cs.setBorderBottom(BorderStyle.THIN); + cs.setBorderLeft(BorderStyle.THIN); + cs.setBorderRight(BorderStyle.THIN); + cs.setBorderTop(BorderStyle.THIN); cs.setFillForegroundColor(( short ) 0xA); cs.setFillPattern(( short ) 1); fnt.setColor(( short ) 0xf); @@ -150,12 +151,12 @@ public final class TestRowStyle extends TestCase { assertNotNull("Row is not null", r); cs = r.getRowStyle(); - assertEquals("FillForegroundColor for row: ", cs.getBorderBottom(), HSSFCellStyle.BORDER_THIN); - assertEquals("FillPattern for row: ", cs.getBorderLeft(), HSSFCellStyle.BORDER_THIN); - assertEquals("FillForegroundColor for row: ", cs.getBorderRight(), HSSFCellStyle.BORDER_THIN); - assertEquals("FillPattern for row: ", cs.getBorderTop(), HSSFCellStyle.BORDER_THIN); - assertEquals("FillForegroundColor for row: ", cs.getFillForegroundColor(), 0xA); - assertEquals("FillPattern for row: ", cs.getFillPattern(), (short) 0x1); + assertEquals("Bottom Border Style for row:", BorderStyle.THIN, cs.getBorderBottom()); + assertEquals("Left Border Style for row:", BorderStyle.THIN, cs.getBorderLeft()); + assertEquals("Right Border Style for row:", BorderStyle.THIN, cs.getBorderRight()); + assertEquals("Top Border Style for row:", BorderStyle.THIN, cs.getBorderTop()); + assertEquals("FillForegroundColor for row:", 0xA, cs.getFillForegroundColor()); + assertEquals("FillPattern for row:", 0x1, cs.getFillPattern()); rownum++; if (rownum >= 100) break; // I feel too lazy to check if this isreqd :-/ diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestBorderStyle.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestBorderStyle.java new file mode 100644 index 0000000000..5ea2280b2a --- /dev/null +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestBorderStyle.java @@ -0,0 +1,82 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + 2012 - Alfresco Software, Ltd. + Alfresco Software has modified source of this file + The details of changes as svn diff can be found in svn at location root/projects/3rd-party/src +==================================================================== */ + +package org.apache.poi.ss.usermodel; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; + +import org.apache.poi.ss.ITestDataProvider; +import org.junit.Test; + +/** + * Tests of {@link BorderStyle} + */ +public class BaseTestBorderStyle { + + private final ITestDataProvider _testDataProvider; + + protected BaseTestBorderStyle(ITestDataProvider testDataProvider) { + _testDataProvider = testDataProvider; + } + + /** + * Test that we use the specified locale when deciding + * how to format normal numbers + */ + @Test + public void testBorderStyle() throws IOException { + String ext = _testDataProvider.getStandardFileNameExtension(); + Workbook wb = _testDataProvider.openSampleWorkbook("59264."+ext); + Sheet sh = wb.getSheetAt(0); + + assertBorderStyleEquals(BorderStyle.NONE, getDiagonalCell(sh, 0)); + assertBorderStyleEquals(BorderStyle.THIN, getDiagonalCell(sh, 1)); + assertBorderStyleEquals(BorderStyle.MEDIUM, getDiagonalCell(sh, 2)); + assertBorderStyleEquals(BorderStyle.DASHED, getDiagonalCell(sh, 3)); + assertBorderStyleEquals(BorderStyle.DOTTED, getDiagonalCell(sh, 4)); + assertBorderStyleEquals(BorderStyle.THICK, getDiagonalCell(sh, 5)); + assertBorderStyleEquals(BorderStyle.DOUBLE, getDiagonalCell(sh, 6)); + assertBorderStyleEquals(BorderStyle.HAIR, getDiagonalCell(sh, 7)); + assertBorderStyleEquals(BorderStyle.MEDIUM_DASHED, getDiagonalCell(sh, 8)); + assertBorderStyleEquals(BorderStyle.DASH_DOT, getDiagonalCell(sh, 9)); + assertBorderStyleEquals(BorderStyle.MEDIUM_DASH_DOT, getDiagonalCell(sh, 10)); + assertBorderStyleEquals(BorderStyle.DASH_DOT_DOT, getDiagonalCell(sh, 11)); + assertBorderStyleEquals(BorderStyle.MEDIUM_DASH_DOT_DOT, getDiagonalCell(sh, 12)); + assertBorderStyleEquals(BorderStyle.SLANTED_DASH_DOT, getDiagonalCell(sh, 13)); + + wb.close(); + } + + private Cell getDiagonalCell(Sheet sheet, int n) { + return sheet.getRow(n).getCell(n); + } + + protected void assertBorderStyleEquals(BorderStyle expected, Cell cell) { + CellStyle style = cell.getCellStyle(); + assertEquals(expected, style.getBorderTop()); + assertEquals(expected, style.getBorderBottom()); + assertEquals(expected, style.getBorderLeft()); + assertEquals(expected, style.getBorderRight()); + } + +} diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java index 67693e4d6a..c9c1d55d3f 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java @@ -254,10 +254,10 @@ public abstract class BaseTestCell { f.setFontName("Arial Unicode MS"); cs.setFillBackgroundColor((short)3); cs.setFont(f); - cs.setBorderTop((short)1); - cs.setBorderRight((short)1); - cs.setBorderLeft((short)1); - cs.setBorderBottom((short)1); + cs.setBorderTop(BorderStyle.THIN); + cs.setBorderRight(BorderStyle.THIN); + cs.setBorderLeft(BorderStyle.THIN); + cs.setBorderBottom(BorderStyle.THIN); r = s.createRow(0); c=r.createCell(0); @@ -270,15 +270,15 @@ public abstract class BaseTestCell { r = s.getRow(0); c = r.getCell(0); - assertTrue("Formula Cell at 0,0", (c.getCellType()==Cell.CELL_TYPE_FORMULA)); + assertEquals("Formula Cell at 0,0", Cell.CELL_TYPE_FORMULA, c.getCellType()); cs = c.getCellStyle(); assertNotNull("Formula Cell Style", cs); - assertTrue("Font Index Matches", (cs.getFontIndex() == f.getIndex())); - assertTrue("Top Border", (cs.getBorderTop() == (short)1)); - assertTrue("Left Border", (cs.getBorderLeft() == (short)1)); - assertTrue("Right Border", (cs.getBorderRight() == (short)1)); - assertTrue("Bottom Border", (cs.getBorderBottom() == (short)1)); + assertEquals("Font Index Matches", f.getIndex(), cs.getFontIndex()); + assertEquals("Top Border", BorderStyle.THIN, cs.getBorderTop()); + assertEquals("Left Border", BorderStyle.THIN, cs.getBorderLeft()); + assertEquals("Right Border", BorderStyle.THIN, cs.getBorderRight()); + assertEquals("Bottom Border", BorderStyle.THIN, cs.getBorderBottom()); wb2.close(); } diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java index de7b298609..72691ff69f 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java @@ -323,10 +323,10 @@ public abstract class BaseTestConditionalFormatting { fontFmt.setFontStyle(true, false); BorderFormatting bordFmt = rule1.createBorderFormatting(); - bordFmt.setBorderBottom(BorderFormatting.BORDER_THIN); - bordFmt.setBorderTop(BorderFormatting.BORDER_THICK); - bordFmt.setBorderLeft(BorderFormatting.BORDER_DASHED); - bordFmt.setBorderRight(BorderFormatting.BORDER_DOTTED); + bordFmt.setBorderBottom(BorderStyle.THIN); + bordFmt.setBorderTop(BorderStyle.THICK); + bordFmt.setBorderLeft(BorderStyle.DASHED); + bordFmt.setBorderRight(BorderStyle.DOTTED); PatternFormatting patternFmt = rule1.createPatternFormatting(); patternFmt.setFillBackgroundColor(IndexedColors.YELLOW.index); @@ -376,10 +376,10 @@ public abstract class BaseTestConditionalFormatting { BorderFormatting r1bf = rule1.getBorderFormatting(); assertNotNull(r1bf); - assertEquals(BorderFormatting.BORDER_THIN, r1bf.getBorderBottom()); - assertEquals(BorderFormatting.BORDER_THICK,r1bf.getBorderTop()); - assertEquals(BorderFormatting.BORDER_DASHED,r1bf.getBorderLeft()); - assertEquals(BorderFormatting.BORDER_DOTTED,r1bf.getBorderRight()); + assertEquals(BorderStyle.THIN, r1bf.getBorderBottom()); + assertEquals(BorderStyle.THICK,r1bf.getBorderTop()); + assertEquals(BorderStyle.DASHED,r1bf.getBorderLeft()); + assertEquals(BorderStyle.DOTTED,r1bf.getBorderRight()); PatternFormatting r1pf = rule1.getPatternFormatting(); assertNotNull(r1pf); @@ -453,7 +453,7 @@ public abstract class BaseTestConditionalFormatting { ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule( ComparisonOperator.BETWEEN, "SUM(A10:A15)", "1+SUM(B16:B30)"); BorderFormatting borderFmt = rule2.createBorderFormatting(); - borderFmt.setBorderDiagonal((short) 2); + borderFmt.setBorderDiagonal(BorderStyle.MEDIUM); CellRangeAddress [] regions = { new CellRangeAddress(2, 4, 0, 0), // A3:A5 @@ -1019,6 +1019,38 @@ public abstract class BaseTestConditionalFormatting { workbook.close(); } + + @Test + public void testAllCreateBorderFormatting() throws IOException { + // Make sure it is possible to create a conditional formatting rule + // with every type of Border Style + Workbook workbook = _testDataProvider.createWorkbook(); + Sheet sheet = workbook.createSheet(); + + SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); + + ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.EQUAL, "7"); + BorderFormatting borderFmt = rule1.createBorderFormatting(); + + for (BorderStyle border : BorderStyle.values()) { + borderFmt.setBorderTop(border); + assertEquals(border, borderFmt.getBorderTop()); + + borderFmt.setBorderBottom(border); + assertEquals(border, borderFmt.getBorderBottom()); + + borderFmt.setBorderLeft(border); + assertEquals(border, borderFmt.getBorderLeft()); + + borderFmt.setBorderRight(border); + assertEquals(border, borderFmt.getBorderRight()); + + borderFmt.setBorderDiagonal(border); + assertEquals(border, borderFmt.getBorderDiagonal()); + } + + workbook.close(); + } @Test public void testCreateBorderFormatting() throws IOException { @@ -1030,37 +1062,37 @@ public abstract class BaseTestConditionalFormatting { ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.EQUAL, "7"); BorderFormatting borderFmt = rule1.createBorderFormatting(); - assertEquals(BorderFormatting.BORDER_NONE, borderFmt.getBorderBottom()); - borderFmt.setBorderBottom(BorderFormatting.BORDER_DOTTED); - assertEquals(BorderFormatting.BORDER_DOTTED, borderFmt.getBorderBottom()); - borderFmt.setBorderBottom(BorderFormatting.BORDER_NONE); - assertEquals(BorderFormatting.BORDER_NONE, borderFmt.getBorderBottom()); - borderFmt.setBorderBottom(BorderFormatting.BORDER_THICK); - assertEquals(BorderFormatting.BORDER_THICK, borderFmt.getBorderBottom()); - - assertEquals(BorderFormatting.BORDER_NONE, borderFmt.getBorderTop()); - borderFmt.setBorderTop(BorderFormatting.BORDER_DOTTED); - assertEquals(BorderFormatting.BORDER_DOTTED, borderFmt.getBorderTop()); - borderFmt.setBorderTop(BorderFormatting.BORDER_NONE); - assertEquals(BorderFormatting.BORDER_NONE, borderFmt.getBorderTop()); - borderFmt.setBorderTop(BorderFormatting.BORDER_THICK); - assertEquals(BorderFormatting.BORDER_THICK, borderFmt.getBorderTop()); - - assertEquals(BorderFormatting.BORDER_NONE, borderFmt.getBorderLeft()); - borderFmt.setBorderLeft(BorderFormatting.BORDER_DOTTED); - assertEquals(BorderFormatting.BORDER_DOTTED, borderFmt.getBorderLeft()); - borderFmt.setBorderLeft(BorderFormatting.BORDER_NONE); - assertEquals(BorderFormatting.BORDER_NONE, borderFmt.getBorderLeft()); - borderFmt.setBorderLeft(BorderFormatting.BORDER_THIN); - assertEquals(BorderFormatting.BORDER_THIN, borderFmt.getBorderLeft()); - - assertEquals(BorderFormatting.BORDER_NONE, borderFmt.getBorderRight()); - borderFmt.setBorderRight(BorderFormatting.BORDER_DOTTED); - assertEquals(BorderFormatting.BORDER_DOTTED, borderFmt.getBorderRight()); - borderFmt.setBorderRight(BorderFormatting.BORDER_NONE); - assertEquals(BorderFormatting.BORDER_NONE, borderFmt.getBorderRight()); - borderFmt.setBorderRight(BorderFormatting.BORDER_HAIR); - assertEquals(BorderFormatting.BORDER_HAIR, borderFmt.getBorderRight()); + assertEquals(BorderStyle.NONE, borderFmt.getBorderBottom()); + borderFmt.setBorderBottom(BorderStyle.DOTTED); + assertEquals(BorderStyle.DOTTED, borderFmt.getBorderBottom()); + borderFmt.setBorderBottom(BorderStyle.NONE); + assertEquals(BorderStyle.NONE, borderFmt.getBorderBottom()); + borderFmt.setBorderBottom(BorderStyle.THICK); + assertEquals(BorderStyle.THICK, borderFmt.getBorderBottom()); + + assertEquals(BorderStyle.NONE, borderFmt.getBorderTop()); + borderFmt.setBorderTop(BorderStyle.DOTTED); + assertEquals(BorderStyle.DOTTED, borderFmt.getBorderTop()); + borderFmt.setBorderTop(BorderStyle.NONE); + assertEquals(BorderStyle.NONE, borderFmt.getBorderTop()); + borderFmt.setBorderTop(BorderStyle.THICK); + assertEquals(BorderStyle.THICK, borderFmt.getBorderTop()); + + assertEquals(BorderStyle.NONE, borderFmt.getBorderLeft()); + borderFmt.setBorderLeft(BorderStyle.DOTTED); + assertEquals(BorderStyle.DOTTED, borderFmt.getBorderLeft()); + borderFmt.setBorderLeft(BorderStyle.NONE); + assertEquals(BorderStyle.NONE, borderFmt.getBorderLeft()); + borderFmt.setBorderLeft(BorderStyle.THIN); + assertEquals(BorderStyle.THIN, borderFmt.getBorderLeft()); + + assertEquals(BorderStyle.NONE, borderFmt.getBorderRight()); + borderFmt.setBorderRight(BorderStyle.DOTTED); + assertEquals(BorderStyle.DOTTED, borderFmt.getBorderRight()); + borderFmt.setBorderRight(BorderStyle.NONE); + assertEquals(BorderStyle.NONE, borderFmt.getBorderRight()); + borderFmt.setBorderRight(BorderStyle.HAIR); + assertEquals(BorderStyle.HAIR, borderFmt.getBorderRight()); ConditionalFormattingRule [] cfRules = { rule1 }; @@ -1076,10 +1108,10 @@ public abstract class BaseTestConditionalFormatting { BorderFormatting r1fp = cf.getRule(0).getBorderFormatting(); assertNotNull(r1fp); - assertEquals(BorderFormatting.BORDER_THICK, r1fp.getBorderBottom()); - assertEquals(BorderFormatting.BORDER_THICK, r1fp.getBorderTop()); - assertEquals(BorderFormatting.BORDER_THIN, r1fp.getBorderLeft()); - assertEquals(BorderFormatting.BORDER_HAIR, r1fp.getBorderRight()); + assertEquals(BorderStyle.THICK, r1fp.getBorderBottom()); + assertEquals(BorderStyle.THICK, r1fp.getBorderTop()); + assertEquals(BorderStyle.THIN, r1fp.getBorderLeft()); + assertEquals(BorderStyle.HAIR, r1fp.getBorderRight()); workbook.close(); } diff --git a/src/testcases/org/apache/poi/ss/usermodel/TestHSSFBorderStyle.java b/src/testcases/org/apache/poi/ss/usermodel/TestHSSFBorderStyle.java new file mode 100644 index 0000000000..721464573f --- /dev/null +++ b/src/testcases/org/apache/poi/ss/usermodel/TestHSSFBorderStyle.java @@ -0,0 +1,30 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.ss.usermodel; + +import org.apache.poi.hssf.HSSFITestDataProvider; + +/** + * @author Yegor Kozlov + */ +public final class TestHSSFBorderStyle extends BaseTestBorderStyle { + + public TestHSSFBorderStyle() { + super(HSSFITestDataProvider.instance); + } +} \ No newline at end of file diff --git a/src/testcases/org/apache/poi/ss/util/TestCellUtil.java b/src/testcases/org/apache/poi/ss/util/TestCellUtil.java index ebefd7d337..eddb6ac9ee 100644 --- a/src/testcases/org/apache/poi/ss/util/TestCellUtil.java +++ b/src/testcases/org/apache/poi/ss/util/TestCellUtil.java @@ -29,13 +29,13 @@ import java.util.HashMap; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; - import org.junit.Test; /** @@ -53,13 +53,13 @@ public final class TestCellUtil { // Add a border should create a new style int styCnt1 = wb.getNumCellStyles(); - CellUtil.setCellStyleProperty(c, wb, CellUtil.BORDER_BOTTOM, CellStyle.BORDER_THIN); + CellUtil.setCellStyleProperty(c, wb, CellUtil.BORDER_BOTTOM, BorderStyle.THIN); int styCnt2 = wb.getNumCellStyles(); assertEquals(styCnt2, styCnt1+1); // Add same border to another cell, should not create another style c = r.createCell(1); - CellUtil.setCellStyleProperty(c, wb, CellUtil.BORDER_BOTTOM, CellStyle.BORDER_THIN); + CellUtil.setCellStyleProperty(c, wb, CellUtil.BORDER_BOTTOM, BorderStyle.THIN); int styCnt3 = wb.getNumCellStyles(); assertEquals(styCnt3, styCnt2); @@ -76,19 +76,19 @@ public final class TestCellUtil { // Add multiple border properties to cell should create a single new style int styCnt1 = wb.getNumCellStyles(); Map props = new HashMap(); - props.put(CellUtil.BORDER_TOP, CellStyle.BORDER_THIN); - props.put(CellUtil.BORDER_BOTTOM, CellStyle.BORDER_THIN); - props.put(CellUtil.BORDER_LEFT, CellStyle.BORDER_THIN); - props.put(CellUtil.BORDER_RIGHT, CellStyle.BORDER_THIN); + props.put(CellUtil.BORDER_TOP, BorderStyle.THIN); + props.put(CellUtil.BORDER_BOTTOM, BorderStyle.THIN); + props.put(CellUtil.BORDER_LEFT, BorderStyle.THIN); + props.put(CellUtil.BORDER_RIGHT, BorderStyle.THIN); CellUtil.setCellStyleProperties(c, props); int styCnt2 = wb.getNumCellStyles(); - assertEquals(styCnt2, styCnt1+1); + assertEquals(styCnt1+1, styCnt2); // Add same border another to same cell, should not create another style c = r.createCell(1); CellUtil.setCellStyleProperties(c, props); int styCnt3 = wb.getNumCellStyles(); - assertEquals(styCnt3, styCnt2); + assertEquals(styCnt2, styCnt3); wb.close(); } diff --git a/test-data/spreadsheet/59264.xls b/test-data/spreadsheet/59264.xls new file mode 100644 index 0000000000000000000000000000000000000000..dcbaf2bb65c3817e6c563bad3b6e6407cf2c22aa GIT binary patch literal 27648 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 YpPpMq0S?MR=u`&!q50|EDSqz#5B6SB4gdfE literal 0 HcmV?d00001 -- 2.39.5