You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2008/10/05 15:56:29 UTC

svn commit: r701797 [2/2] - in /poi/branches/ooxml/src: examples/src/org/apache/poi/xssf/usermodel/examples/ ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/ ooxml/java/org/apache/poi/xssf/model/ ooxml/java/org/apache/poi/xssf/usermodel/ ooxml/java/...

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellBorder.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellBorder.java?rev=701797&r1=701796&r2=701797&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellBorder.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellBorder.java Sun Oct  5 06:56:28 2008
@@ -22,76 +22,96 @@
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorder;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorderPr;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.STBorderStyle;
+import org.apache.poi.xssf.usermodel.BorderStyle;
 
 
 public class XSSFCellBorder {
-	private CTBorder border;
-	
-	/**
-	 * Creates a Cell Border from the supplied XML definition
-	 */
-	public XSSFCellBorder(CTBorder border) {
-		this.border = border;
-	}
-	/**
-	 * Creates a new, empty Cell Border, on the
-	 *  given Styles Table
-	 */
-	public XSSFCellBorder() {
-		border = CTBorder.Factory.newInstance();
-	}
-	
-	public static enum BorderSide {
-		TOP, RIGHT, BOTTOM, LEFT
-	}
-	
-	public long putBorder(LinkedList<CTBorder> borders) {
-		if(borders.contains(border)) {
-			return borders.indexOf(border);
-		}
-		borders.add(border);
-		return borders.size() - 1;
-	}
-	
-	public STBorderStyle.Enum getBorderStyle(BorderSide side) {
-		return getBorder(side).getStyle();
-	}
-	
-	public void setBorderStyle(BorderSide side, STBorderStyle.Enum style) {
-		getBorder(side).setStyle(style);
-	}
-	
-	public XSSFColor getBorderColor(BorderSide side) {
-		CTBorderPr borderPr = getBorder(side);
-		if (!borderPr.isSetColor()) {
-			borderPr.addNewColor();
-		}
-		return new XSSFColor(getBorder(side).getColor());
-	}
-
-	public void setBorderColor(BorderSide side, XSSFColor color) {
-		getBorder(side).setColor(color.getCTColor());
-	}
-	
-	private CTBorderPr getBorder(BorderSide side) {
-		switch (side) {
-		case TOP: {
-		    CTBorderPr borderPr = border.isSetTop() ? border.getTop() : border.addNewTop();
-		    return borderPr;
-		}
-		case RIGHT: {
-			    CTBorderPr borderPr = border.isSetRight() ? border.getRight() : border.addNewRight();
-			    return borderPr;
-		}
-		case BOTTOM:{
-			    CTBorderPr borderPr = border.isSetBottom() ? border.getBottom() : border.addNewBottom();
-			    return borderPr;
-		}
-		case LEFT:{
-			    CTBorderPr borderPr = border.isSetLeft() ? border.getLeft() : border.addNewLeft();
-			    return borderPr;
-			}
-		default: throw new IllegalArgumentException("No suitable side specified for the border");
-		}
-	}
+
+    private CTBorder border;
+
+    /**
+     * Creates a Cell Border from the supplied XML definition
+     */
+    public XSSFCellBorder(CTBorder border) {
+        this.border = border;
+    }
+    /**
+     * Creates a new, empty Cell Border, on the
+     *  given Styles Table
+     */
+    public XSSFCellBorder() {
+        border = CTBorder.Factory.newInstance();
+    }
+
+    public static enum BorderSide {
+        TOP, RIGHT, BOTTOM, LEFT
+    }
+
+    public CTBorder getCTBorder() {
+        return border;
+    }
+
+    public BorderStyle getBorderStyle(BorderSide side) {
+        CTBorderPr ctBorder = getBorder(side);
+        STBorderStyle.Enum border = ctBorder == null ? STBorderStyle.NONE : ctBorder.getStyle();
+        return BorderStyle.values()[border.intValue() - 1];
+    }
+
+    public void setBorderStyle(BorderSide side, BorderStyle style) {
+        getBorder(side, true).setStyle(STBorderStyle.Enum.forInt(style.ordinal() + 1));
+    }
+
+    public XSSFColor getBorderColor(BorderSide side) {
+        CTBorderPr borderPr = getBorder(side);
+        return borderPr != null && borderPr.isSetColor() ?
+                new XSSFColor(borderPr.getColor()) : null;
+    }
+
+    public void setBorderColor(BorderSide side, XSSFColor color) {
+        CTBorderPr borderPr = getBorder(side, true);
+        if(color == null) borderPr.unsetColor();
+        else borderPr.setColor(color.getCTColor());
+    }
+
+    private CTBorderPr getBorder(BorderSide side) {
+        return getBorder(side, false);
+    }
+
+    private CTBorderPr getBorder(BorderSide side, boolean ensure) {
+        CTBorderPr borderPr;
+        switch (side) {
+            case TOP:
+                borderPr = border.getTop();
+                if(ensure && borderPr == null) borderPr = border.addNewTop();
+                break;
+            case RIGHT:
+                borderPr = border.getRight();
+                if(ensure && borderPr == null) borderPr = border.addNewRight();
+                break;
+            case BOTTOM:
+                borderPr = border.getBottom();
+                if(ensure && borderPr == null) borderPr = border.addNewBottom();
+                break;
+            case LEFT:
+                borderPr = border.getLeft();
+                if(ensure && borderPr == null) borderPr = border.addNewLeft();
+                break;
+            default:
+                throw new IllegalArgumentException("No suitable side specified for the border");
+        }
+        return borderPr;
+    }
+
+
+    public int hashCode(){
+        return border.toString().hashCode();
+    }
+
+    public boolean equals(Object o){
+        if(!(o instanceof XSSFCellBorder)) return false;
+
+        XSSFCellBorder cf = (XSSFCellBorder)o;
+        return border.toString().equals(cf.getCTBorder().toString());
+    }
+
 }
\ No newline at end of file

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellFill.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellFill.java?rev=701797&r1=701796&r2=701797&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellFill.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellFill.java Sun Oct  5 06:56:28 2008
@@ -22,6 +22,7 @@
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFill;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPatternFill;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPatternType;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPatternType.Enum;
 
 public final class XSSFCellFill {
@@ -37,41 +38,54 @@
 	}
 	
 	public XSSFColor getFillBackgroundColor() {
-		CTColor ctColor = getPatternFill().getBgColor();
-		if (ctColor == null) {
-			XSSFColor result = new XSSFColor();
-			result.setIndexed(IndexedColors.AUTOMATIC.getIndex());
-			return result;
-		}
-		return new XSSFColor(ctColor);
-	}
+        CTPatternFill ptrn = _fill.getPatternFill();
+        if(ptrn == null) return null;
 
-	public XSSFColor getFillForegroundColor() {
-		CTColor ctColor = getPatternFill().getFgColor();
-		if (ctColor == null) {
-			XSSFColor result = new XSSFColor();
-			result.setIndexed(IndexedColors.AUTOMATIC.getIndex());
-			return result;
-		}
-		return new XSSFColor(ctColor);
+        CTColor ctColor = ptrn.getBgColor();
+		return ctColor == null ? null : new XSSFColor(ctColor);
 	}
 
-	public Enum getPatternType() {
-		return getPatternFill().getPatternType();
-	}
-	
-	/**
-	 * @return the index of the just added fill
-	 */
-	public int putFill(List<CTFill> fills) {
-		if (fills.contains(_fill)) {
-			return fills.indexOf(_fill);
-		}
-		fills.add(_fill);
-		return fills.size() - 1;
-	}
+    public void setFillBackgroundColor(int index) {
+        CTPatternFill ptrn = ensureCTPatternFill();
+        CTColor ctColor = ptrn.isSetBgColor() ? ptrn.getBgColor() : ptrn.addNewBgColor();
+        ctColor.setIndexed(index);
+    }
+
+    public void setFillBackgroundColor(XSSFColor color) {
+        CTPatternFill ptrn = ensureCTPatternFill();
+        ptrn.setBgColor(color.getCTColor());
+    }
+
+    public XSSFColor getFillForegroundColor() {
+        CTPatternFill ptrn = _fill.getPatternFill();
+        if(ptrn == null) return null;
+
+        CTColor ctColor = ptrn.getFgColor();
+        return ctColor == null ? null : new XSSFColor(ctColor);
+    }
+
+    public void setFillForegroundColor(int index) {
+        CTPatternFill ptrn = ensureCTPatternFill();
+        CTColor ctColor = ptrn.isSetFgColor() ? ptrn.getFgColor() : ptrn.addNewFgColor();
+        ctColor.setIndexed(index);
+    }
+
+    public void setFillForegroundColor(XSSFColor color) {
+        CTPatternFill ptrn = ensureCTPatternFill();
+        ptrn.setFgColor(color.getCTColor());
+    }
+
+	public STPatternType.Enum getPatternType() {
+        CTPatternFill ptrn = _fill.getPatternFill();
+		return ptrn == null ? null : ptrn.getPatternType();
+	}
+
+    public void setPatternType(STPatternType.Enum patternType) {
+        CTPatternFill ptrn = ensureCTPatternFill();
+        ptrn.setPatternType(patternType);
+    }
 
-	private CTPatternFill getPatternFill() {
+	private CTPatternFill ensureCTPatternFill() {
 		CTPatternFill patternFill = _fill.getPatternFill();
 		if (patternFill == null) {
 			patternFill = _fill.addNewPatternFill();
@@ -83,27 +97,14 @@
 		return _fill;
 	}
 	
-	public void setFillBackgroundColor(long index) {
-		CTColor ctColor=getPatternFill().addNewBgColor();
-		ctColor.setIndexed(index);
-		_fill.getPatternFill().setBgColor(ctColor);
-	}
-
-	public void setFillForegroundColor(long index) {
-		CTColor ctColor=getPatternFill().addNewFgColor();
-		ctColor.setIndexed(index);
-		_fill.getPatternFill().setFgColor(ctColor);
-	}
-	
-	public void setFillBackgroundRgbColor(XSSFColor color) {
-		_fill.getPatternFill().setBgColor(color.getCTColor());
-	}
-
-	public void setFillForegroundRgbColor(XSSFColor color) {
-		_fill.getPatternFill().setFgColor(color.getCTColor());
-	}
-	
-	public void setPatternType(Enum patternType) {
-		getPatternFill().setPatternType(patternType);
-	}
+    public int hashCode(){
+        return _fill.toString().hashCode();
+    }
+
+    public boolean equals(Object o){
+        if(!(o instanceof XSSFCellFill)) return false;
+
+        XSSFCellFill cf = (XSSFCellFill)o;
+        return _fill.toString().equals(cf.getCTFill().toString());
+    }
 }

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFColor.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFColor.java?rev=701797&r1=701796&r2=701797&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFColor.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFColor.java Sun Oct  5 06:56:28 2008
@@ -39,6 +39,11 @@
         this.ctColor = CTColor.Factory.newInstance();
     }
 
+    public XSSFColor(java.awt.Color clr) {
+        this();
+        ctColor.setRgb(new byte[]{(byte)clr.getRed(), (byte)clr.getGreen(), (byte)clr.getBlue()});
+    }
+
     /**
      * A boolean value indicating the ctColor is automatic and system ctColor dependent.
      */
@@ -56,8 +61,8 @@
     /**
      * Indexed ctColor value. Only used for backwards compatibility. References a ctColor in indexedColors.
      */
-    public int getIndexed() {
-		return (int)ctColor.getIndexed();
+    public short getIndexed() {
+		return (short)ctColor.getIndexed();
 	}
 	
     /**
@@ -195,4 +200,16 @@
     public CTColor getCTColor(){
         return ctColor;
     }
+
+    public int hashCode(){
+        return ctColor.toString().hashCode();
+    }
+
+    public boolean equals(Object o){
+        if(!(o instanceof XSSFColor)) return false;
+
+        XSSFColor cf = (XSSFColor)o;
+        return ctColor.toString().equals(cf.getCTColor().toString());
+    }
+
 }

Modified: poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java?rev=701797&r1=701796&r2=701797&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java (original)
+++ poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java Sun Oct  5 06:56:28 2008
@@ -26,12 +26,13 @@
 import org.apache.poi.xssf.usermodel.extensions.XSSFCellFill;
 import org.apache.poi.xssf.usermodel.extensions.XSSFColor;
 import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder.BorderSide;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;
 
 
 public class TestXSSFCellStyle extends TestCase {
 
-	private static final int AUTO_COLOR_INDEX = 64;
 	private StylesTable stylesTable;
 	private CTBorder ctBorderA;
 	private CTFill ctFill;
@@ -48,14 +49,13 @@
 		
 		ctStylesheet = stylesTable._getRawStylesheet();
 		
-		// Until we do XSSFBorder properly, cheat
 		ctBorderA = CTBorder.Factory.newInstance();
 		XSSFCellBorder borderA = new XSSFCellBorder(ctBorderA);
 		long borderId = stylesTable.putBorder(borderA);
 		assertEquals(1, borderId);
 
 		XSSFCellBorder borderB = new XSSFCellBorder();
-		assertEquals(2, stylesTable.putBorder(borderB));
+		assertEquals(1, stylesTable.putBorder(borderB));
 
 		ctFill = CTFill.Factory.newInstance();
 		XSSFCellFill fill = new XSSFCellFill(ctFill);
@@ -84,225 +84,430 @@
 	}
 
 	public void testGetSetBorderBottom() {
-		ctBorderA.addNewBottom().setStyle(STBorderStyle.THIN);
-		assertEquals((short)1, cellStyle.getBorderBottom());
-		cellStyle.setBorderBottom((short) 2);
-		assertEquals(STBorderStyle.THIN, ctBorderA.getBottom().getStyle());
-		cellStyle.setBorderBottomEnum(STBorderStyle.THICK);
-		assertEquals(6, ctBorderA.getBottom().getStyle().intValue());
-	}
-
-	public void testGetBorderBottomAsString() {
-		ctBorderA.addNewBottom().setStyle(STBorderStyle.THIN);
-		assertEquals("thin", cellStyle.getBorderBottomAsString());
-	}
-
-	public void testGetSetBorderRight() {
-		ctBorderA.addNewRight().setStyle(STBorderStyle.MEDIUM);
-		assertEquals((short)2, cellStyle.getBorderRight());
-		cellStyle.setBorderRight((short) 2);
-		assertEquals(STBorderStyle.THIN, ctBorderA.getRight().getStyle());
-		cellStyle.setBorderRightEnum(STBorderStyle.THICK);
-		assertEquals(6, ctBorderA.getRight().getStyle().intValue());
-	}
-
-	public void testGetBorderRightAsString() {
-		ctBorderA.addNewRight().setStyle(STBorderStyle.MEDIUM);
-		assertEquals("medium", cellStyle.getBorderRightAsString());
-	}
+        //default values
+        assertEquals(CellStyle.BORDER_NONE, cellStyle.getBorderBottom());
+
+        int num = stylesTable.getBorders().size();
+        cellStyle.setBorderBottom(CellStyle.BORDER_MEDIUM);
+        assertEquals(CellStyle.BORDER_MEDIUM, cellStyle.getBorderBottom());
+        //a new border has been added
+        assertEquals(num + 1, stylesTable.getBorders().size());
+        //id of the created border
+        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.getBottom().getStyle());
+
+        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());
+        }
+        assertEquals(borderId, cellStyle.getCoreXf().getBorderId());
+        assertEquals(num, stylesTable.getBorders().size());
+        assertSame(ctBorder, stylesTable.getBorderAt(borderId).getCTBorder());
+
+        //setting border to none removes the <bottom> element
+        cellStyle.setBorderBottom(CellStyle.BORDER_NONE);
+        assertEquals(num, stylesTable.getBorders().size());
+        borderId = (int)cellStyle.getCoreXf().getBorderId();
+        ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
+        assertFalse(ctBorder.isSetBottom());
+    }
+
+    public void testGetSetBorderRight() {
+        //default values
+        assertEquals(CellStyle.BORDER_NONE, cellStyle.getBorderRight());
+
+        int num = stylesTable.getBorders().size();
+        cellStyle.setBorderRight(CellStyle.BORDER_MEDIUM);
+        assertEquals(CellStyle.BORDER_MEDIUM, cellStyle.getBorderRight());
+        //a new border has been added
+        assertEquals(num + 1, stylesTable.getBorders().size());
+        //id of the created border
+        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.getRight().getStyle());
+
+        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());
+        }
+        assertEquals(borderId, cellStyle.getCoreXf().getBorderId());
+        assertEquals(num, stylesTable.getBorders().size());
+        assertSame(ctBorder, stylesTable.getBorderAt(borderId).getCTBorder());
+
+        //setting border to none removes the <right> element
+        cellStyle.setBorderRight(CellStyle.BORDER_NONE);
+        assertEquals(num, stylesTable.getBorders().size());
+        borderId = (int)cellStyle.getCoreXf().getBorderId();
+        ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
+        assertFalse(ctBorder.isSetRight());
+    }
 
 	public void testGetSetBorderLeft() {
-		ctBorderA.addNewLeft().setStyle(STBorderStyle.DASHED);
-		assertEquals((short)3, cellStyle.getBorderLeft());
-		cellStyle.setBorderLeft((short) 2);
-		assertEquals(STBorderStyle.THIN, ctBorderA.getLeft().getStyle());
-		cellStyle.setBorderLeftEnum(STBorderStyle.THICK);
-		assertEquals(6, ctBorderA.getLeft().getStyle().intValue());
-	}
+        //default values
+        assertEquals(CellStyle.BORDER_NONE, cellStyle.getBorderLeft());
 
-	public void testGetBorderLeftAsString() {
-		ctBorderA.addNewLeft().setStyle(STBorderStyle.DASHED);
-		assertEquals("dashed", cellStyle.getBorderLeftAsString());
+        int num = stylesTable.getBorders().size();
+        cellStyle.setBorderLeft(CellStyle.BORDER_MEDIUM);
+        assertEquals(CellStyle.BORDER_MEDIUM, cellStyle.getBorderLeft());
+        //a new border has been added
+        assertEquals(num + 1, stylesTable.getBorders().size());
+        //id of the created border
+        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.getLeft().getStyle());
+
+        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());
+        }
+        assertEquals(borderId, cellStyle.getCoreXf().getBorderId());
+        assertEquals(num, stylesTable.getBorders().size());
+        assertSame(ctBorder, stylesTable.getBorderAt(borderId).getCTBorder());
+
+        //setting border to none removes the <left> element
+        cellStyle.setBorderLeft(CellStyle.BORDER_NONE);
+        assertEquals(num, stylesTable.getBorders().size());
+        borderId = (int)cellStyle.getCoreXf().getBorderId();
+        ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
+        assertFalse(ctBorder.isSetLeft());
 	}
 
 	public void testGetSetBorderTop() {
-		ctBorderA.addNewTop().setStyle(STBorderStyle.HAIR);
-		assertEquals((short)7, cellStyle.getBorderTop());
-		cellStyle.setBorderTop((short) 2);
-		assertEquals(STBorderStyle.THIN, ctBorderA.getTop().getStyle());
-		cellStyle.setBorderTopEnum(STBorderStyle.THICK);
-		assertEquals(6, ctBorderA.getTop().getStyle().intValue());
-	}
+        //default values
+        assertEquals(CellStyle.BORDER_NONE, cellStyle.getBorderTop());
 
-	public void testGetBorderTopAsString() {
-		ctBorderA.addNewTop().setStyle(STBorderStyle.HAIR);
-		assertEquals("hair", cellStyle.getBorderTopAsString());
+        int num = stylesTable.getBorders().size();
+        cellStyle.setBorderTop(CellStyle.BORDER_MEDIUM);
+        assertEquals(CellStyle.BORDER_MEDIUM, cellStyle.getBorderTop());
+        //a new border has been added
+        assertEquals(num + 1, stylesTable.getBorders().size());
+        //id of the created border
+        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());
+
+        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());
+        }
+        assertEquals(borderId, cellStyle.getCoreXf().getBorderId());
+        assertEquals(num, stylesTable.getBorders().size());
+        assertSame(ctBorder, stylesTable.getBorderAt(borderId).getCTBorder());
+
+        //setting border to none removes the <top> element
+        cellStyle.setBorderTop(CellStyle.BORDER_NONE);
+        assertEquals(num, stylesTable.getBorders().size());
+        borderId = (int)cellStyle.getCoreXf().getBorderId();
+        ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
+        assertFalse(ctBorder.isSetTop());
 	}
 
 	public void testGetSetBottomBorderColor() {
-		CTColor ctColor = ctBorderA.addNewBottom().addNewColor();
-		ctColor.setIndexed(2);
-		assertEquals((short)2, cellStyle.getBottomBorderColor());
-		CTColor anotherCtColor = CTColor.Factory.newInstance();
-		anotherCtColor.setIndexed(4);
-		anotherCtColor.setTheme(3);
-		anotherCtColor.setRgb("1234".getBytes());
-		XSSFColor anotherColor = new XSSFColor(anotherCtColor);
-		cellStyle.setBorderColor(BorderSide.BOTTOM, anotherColor);
-		assertEquals((short)4, cellStyle.getBottomBorderColor());
-		assertEquals("1234", new String(cellStyle.getBorderColor(BorderSide.BOTTOM).getRgb()));
-	}
+        //defaults
+        assertEquals(IndexedColors.BLACK.getIndex(), cellStyle.getBottomBorderColor());
+        assertNull(cellStyle.getBottomBorderRgbColor());
+
+        int num = stylesTable.getBorders().size();
+
+        XSSFColor clr;
+
+        //setting indexed color
+        cellStyle.setBottomBorderColor(IndexedColors.BLUE_GREY.getIndex());
+        assertEquals(IndexedColors.BLUE_GREY.getIndex(), cellStyle.getBottomBorderColor());
+        clr = cellStyle.getBottomBorderRgbColor();
+        assertTrue(clr.getCTColor().isSetIndexed());
+        assertEquals(IndexedColors.BLUE_GREY.getIndex(), clr.getIndexed());
+        //a new border was added to the styles table
+        assertEquals(num + 1, stylesTable.getBorders().size());
+
+        //id of the created border
+        int borderId = (int)cellStyle.getCoreXf().getBorderId();
+        assertTrue(borderId > 0);
+        //check changes in the underlying xml bean
+        CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
+        assertEquals(IndexedColors.BLUE_GREY.getIndex(), ctBorder.getBottom().getColor().getIndexed());
+
+        //setting XSSFColor
+        num = stylesTable.getBorders().size();
+        clr = new XSSFColor(java.awt.Color.CYAN);
+        cellStyle.setBottomBorderColor(clr);
+        assertEquals(clr.getCTColor().toString(), cellStyle.getBottomBorderRgbColor().getCTColor().toString());
+        byte[] rgb = cellStyle.getBottomBorderRgbColor().getRgb();
+        assertEquals(java.awt.Color.CYAN, new java.awt.Color(rgb[0] & 0xFF, rgb[1] & 0xFF, rgb[2] & 0xFF));
+        //another border was added to the styles table
+        assertEquals(num + 1, stylesTable.getBorders().size());
+
+        //passing null unsets the color
+        cellStyle.setBottomBorderColor(null);
+        assertNull(cellStyle.getBottomBorderRgbColor());
+    }
 
 	public void testGetSetTopBorderColor() {
-		CTColor ctColor = ctBorderA.addNewTop().addNewColor();
-		ctColor.setIndexed(5);
-		assertEquals((short)5, cellStyle.getTopBorderColor());
-		CTColor anotherCtColor = CTColor.Factory.newInstance();
-		anotherCtColor.setIndexed(7);
-		anotherCtColor.setTheme(3);
-		anotherCtColor.setRgb("abcd".getBytes());
-		XSSFColor anotherColor = new XSSFColor(anotherCtColor);
-		cellStyle.setBorderColor(BorderSide.TOP, anotherColor);
-		assertEquals((short)7, cellStyle.getTopBorderColor());
-		assertEquals("abcd", new String(cellStyle.getBorderColor(BorderSide.TOP).getRgb()));
+        //defaults
+        assertEquals(IndexedColors.BLACK.getIndex(), cellStyle.getTopBorderColor());
+        assertNull(cellStyle.getTopBorderRgbColor());
+
+        int num = stylesTable.getBorders().size();
+
+        XSSFColor clr;
+
+        //setting indexed color
+        cellStyle.setTopBorderColor(IndexedColors.BLUE_GREY.getIndex());
+        assertEquals(IndexedColors.BLUE_GREY.getIndex(), cellStyle.getTopBorderColor());
+        clr = cellStyle.getTopBorderRgbColor();
+        assertTrue(clr.getCTColor().isSetIndexed());
+        assertEquals(IndexedColors.BLUE_GREY.getIndex(), clr.getIndexed());
+        //a new border was added to the styles table
+        assertEquals(num + 1, stylesTable.getBorders().size());
+
+        //id of the created border
+        int borderId = (int)cellStyle.getCoreXf().getBorderId();
+        assertTrue(borderId > 0);
+        //check changes in the underlying xml bean
+        CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
+        assertEquals(IndexedColors.BLUE_GREY.getIndex(), ctBorder.getTop().getColor().getIndexed());
+
+        //setting XSSFColor
+        num = stylesTable.getBorders().size();
+        clr = new XSSFColor(java.awt.Color.CYAN);
+        cellStyle.setTopBorderColor(clr);
+        assertEquals(clr.getCTColor().toString(), cellStyle.getTopBorderRgbColor().getCTColor().toString());
+        byte[] rgb = cellStyle.getTopBorderRgbColor().getRgb();
+        assertEquals(java.awt.Color.CYAN, new java.awt.Color(rgb[0] & 0xFF, rgb[1] & 0xFF, rgb[2] & 0xFF));
+        //another border was added to the styles table
+        assertEquals(num + 1, stylesTable.getBorders().size());
+
+        //passing null unsets the color
+        cellStyle.setTopBorderColor(null);
+        assertNull(cellStyle.getTopBorderRgbColor());
 	}
 
 	public void testGetSetLeftBorderColor() {
-		CTColor ctColor = ctBorderA.addNewLeft().addNewColor();
-		ctColor.setIndexed(2);
-		assertEquals((short)2, cellStyle.getLeftBorderColor());
-		CTColor anotherCtColor = CTColor.Factory.newInstance();
-		anotherCtColor.setIndexed(4);
-		anotherCtColor.setTheme(3);
-		anotherCtColor.setRgb("1234".getBytes());
-		XSSFColor anotherColor = new XSSFColor(anotherCtColor);
-		cellStyle.setBorderColor(BorderSide.LEFT, anotherColor);
-		assertEquals((short)4, cellStyle.getLeftBorderColor());
-		assertEquals("1234", new String(cellStyle.getBorderColor(BorderSide.LEFT).getRgb()));
+        //defaults
+        assertEquals(IndexedColors.BLACK.getIndex(), cellStyle.getLeftBorderColor());
+        assertNull(cellStyle.getLeftBorderRgbColor());
+
+        int num = stylesTable.getBorders().size();
+
+        XSSFColor clr;
+
+        //setting indexed color
+        cellStyle.setLeftBorderColor(IndexedColors.BLUE_GREY.getIndex());
+        assertEquals(IndexedColors.BLUE_GREY.getIndex(), cellStyle.getLeftBorderColor());
+        clr = cellStyle.getLeftBorderRgbColor();
+        assertTrue(clr.getCTColor().isSetIndexed());
+        assertEquals(IndexedColors.BLUE_GREY.getIndex(), clr.getIndexed());
+        //a new border was added to the styles table
+        assertEquals(num + 1, stylesTable.getBorders().size());
+
+        //id of the created border
+        int borderId = (int)cellStyle.getCoreXf().getBorderId();
+        assertTrue(borderId > 0);
+        //check changes in the underlying xml bean
+        CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
+        assertEquals(IndexedColors.BLUE_GREY.getIndex(), ctBorder.getLeft().getColor().getIndexed());
+
+        //setting XSSFColor
+        num = stylesTable.getBorders().size();
+        clr = new XSSFColor(java.awt.Color.CYAN);
+        cellStyle.setLeftBorderColor(clr);
+        assertEquals(clr.getCTColor().toString(), cellStyle.getLeftBorderRgbColor().getCTColor().toString());
+        byte[] rgb = cellStyle.getLeftBorderRgbColor().getRgb();
+        assertEquals(java.awt.Color.CYAN, new java.awt.Color(rgb[0] & 0xFF, rgb[1] & 0xFF, rgb[2] & 0xFF));
+        //another border was added to the styles table
+        assertEquals(num + 1, stylesTable.getBorders().size());
+
+        //passing null unsets the color
+        cellStyle.setLeftBorderColor(null);
+        assertNull(cellStyle.getLeftBorderRgbColor());
 	}
 
 	public void testGetSetRightBorderColor() {
-		CTColor ctColor = ctBorderA.addNewRight().addNewColor();
-		ctColor.setIndexed(8);
-		assertEquals((short)8, cellStyle.getRightBorderColor());
-		CTColor anotherCtColor = CTColor.Factory.newInstance();
-		anotherCtColor.setIndexed(14);
-		anotherCtColor.setTheme(3);
-		anotherCtColor.setRgb("af67".getBytes());
-		XSSFColor anotherColor = new XSSFColor(anotherCtColor);
-		cellStyle.setBorderColor(BorderSide.RIGHT, anotherColor);
-		assertEquals((short)14, cellStyle.getRightBorderColor());
-		assertEquals("af67", new String(cellStyle.getBorderColor(BorderSide.RIGHT).getRgb()));
-	}
-
-	public void testGetFillBackgroundColor() {
-
-		CTPatternFill ctPatternFill = ctFill.addNewPatternFill();
-		CTColor ctBgColor = ctPatternFill.addNewBgColor();
-		ctBgColor.setIndexed(IndexedColors.BRIGHT_GREEN.getIndex());
-		ctPatternFill.setBgColor(ctBgColor);
-
-		XSSFCellFill cellFill=new XSSFCellFill(ctFill);
-		long index=stylesTable.putFill(cellFill);
-		cellStyle.getCoreXf().setFillId(index);
-
-		assertEquals(2,cellStyle.getCoreXf().getFillId());
-		assertEquals(IndexedColors.BRIGHT_GREEN.getIndex(), cellStyle.getFillBackgroundColor());
-		
-		cellStyle.setFillBackgroundColor(IndexedColors.BLUE.getIndex());
-		assertEquals(IndexedColors.BLUE.getIndex(), ctFill.getPatternFill().getBgColor().getIndexed());
-		
-		//test rgb color - XSSFColor
-		CTColor ctColor=CTColor.Factory.newInstance();
-		ctColor.setRgb("FFFFFF".getBytes());
-		ctPatternFill.setBgColor(ctColor);
-		assertEquals(ctColor.toString(), cellStyle.getFillBackgroundRgbColor().getCTColor().toString());
-		
-		cellStyle.setFillBackgroundRgbColor(new XSSFColor(ctColor));
-		assertEquals(ctColor.getRgb()[0], ctPatternFill.getBgColor().getRgb()[0]);
-		assertEquals(ctColor.getRgb()[1], ctPatternFill.getBgColor().getRgb()[1]);
-		assertEquals(ctColor.getRgb()[2], ctPatternFill.getBgColor().getRgb()[2]);
-		assertEquals(ctColor.getRgb()[3], ctPatternFill.getBgColor().getRgb()[3]);
+        //defaults
+        assertEquals(IndexedColors.BLACK.getIndex(), cellStyle.getRightBorderColor());
+        assertNull(cellStyle.getRightBorderRgbColor());
+
+        int num = stylesTable.getBorders().size();
+
+        XSSFColor clr;
+
+        //setting indexed color
+        cellStyle.setRightBorderColor(IndexedColors.BLUE_GREY.getIndex());
+        assertEquals(IndexedColors.BLUE_GREY.getIndex(), cellStyle.getRightBorderColor());
+        clr = cellStyle.getRightBorderRgbColor();
+        assertTrue(clr.getCTColor().isSetIndexed());
+        assertEquals(IndexedColors.BLUE_GREY.getIndex(), clr.getIndexed());
+        //a new border was added to the styles table
+        assertEquals(num + 1, stylesTable.getBorders().size());
+
+        //id of the created border
+        int borderId = (int)cellStyle.getCoreXf().getBorderId();
+        assertTrue(borderId > 0);
+        //check changes in the underlying xml bean
+        CTBorder ctBorder = stylesTable.getBorderAt(borderId).getCTBorder();
+        assertEquals(IndexedColors.BLUE_GREY.getIndex(), ctBorder.getRight().getColor().getIndexed());
+
+        //setting XSSFColor
+        num = stylesTable.getBorders().size();
+        clr = new XSSFColor(java.awt.Color.CYAN);
+        cellStyle.setRightBorderColor(clr);
+        assertEquals(clr.getCTColor().toString(), cellStyle.getRightBorderRgbColor().getCTColor().toString());
+        byte[] rgb = cellStyle.getRightBorderRgbColor().getRgb();
+        assertEquals(java.awt.Color.CYAN, new java.awt.Color(rgb[0] & 0xFF, rgb[1] & 0xFF, rgb[2] & 0xFF));
+        //another border was added to the styles table
+        assertEquals(num + 1, stylesTable.getBorders().size());
+
+        //passing null unsets the color
+        cellStyle.setRightBorderColor(null);
+        assertNull(cellStyle.getRightBorderRgbColor());
+	}
+
+	public void testGetSetFillBackgroundColor() {
+
+        assertEquals(IndexedColors.AUTOMATIC.getIndex(), cellStyle.getFillBackgroundColor());
+        assertNull(cellStyle.getFillBackgroundRgbColor());
+
+        XSSFColor clr;
+
+        int num = stylesTable.getFills().size();
+
+        //setting indexed color
+        cellStyle.setFillBackgroundColor(IndexedColors.RED.getIndex());
+        assertEquals(IndexedColors.RED.getIndex(), cellStyle.getFillBackgroundColor());
+        clr = cellStyle.getFillBackgroundRgbColor();
+        assertTrue(clr.getCTColor().isSetIndexed());
+        assertEquals(IndexedColors.RED.getIndex(), clr.getIndexed());
+        //a new fill was added to the styles table
+        assertEquals(num + 1, stylesTable.getFills().size());
+
+        //id of the created border
+        int fillId = (int)cellStyle.getCoreXf().getFillId();
+        assertTrue(fillId > 0);
+        //check changes in the underlying xml bean
+        CTFill ctFill = stylesTable.getFillAt(fillId).getCTFill();
+        assertEquals(IndexedColors.RED.getIndex(), ctFill.getPatternFill().getBgColor().getIndexed());
+
+        //setting XSSFColor
+        num = stylesTable.getFills().size();
+        clr = new XSSFColor(java.awt.Color.CYAN);
+        cellStyle.setFillBackgroundColor(clr);
+        assertEquals(clr.getCTColor().toString(), cellStyle.getFillBackgroundRgbColor().getCTColor().toString());
+        byte[] rgb = cellStyle.getFillBackgroundRgbColor().getRgb();
+        assertEquals(java.awt.Color.CYAN, new java.awt.Color(rgb[0] & 0xFF, rgb[1] & 0xFF, rgb[2] & 0xFF));
+        //another border was added to the styles table
+        assertEquals(num + 1, stylesTable.getFills().size());
+
+        //passing null unsets the color
+        cellStyle.setFillBackgroundColor(null);
+        assertNull(cellStyle.getFillBackgroundRgbColor());
+        assertEquals(IndexedColors.AUTOMATIC.getIndex(), cellStyle.getFillBackgroundColor());
 	}
 	
-	public void testGetFillBackgroundColor_default() {
+	public void testDefaultStyles() {
 
-		XSSFWorkbook wb = new XSSFWorkbook();
+		XSSFWorkbook wb1 = new XSSFWorkbook();
 
-		XSSFCellStyle style = wb.createCellStyle();
-
-		short color;
-		try {
-			color = style.getFillBackgroundColor();
-		} catch (NullPointerException e) {
-			throw new AssertionFailedError("Identified bug 45898");
-		}
-		assertEquals(AUTO_COLOR_INDEX, color);
-		XSSFColor xcolor=style.getFillBackgroundRgbColor();
-		assertEquals(xcolor.getIndexed(), AUTO_COLOR_INDEX);
+		XSSFCellStyle style1 = wb1.createCellStyle();
+        assertEquals(IndexedColors.AUTOMATIC.getIndex(), style1.getFillBackgroundColor());
+        assertNull(style1.getFillBackgroundRgbColor());
+
+        //compatibility with HSSF
+        HSSFWorkbook wb2 = new HSSFWorkbook();
+        HSSFCellStyle style2 = wb2.createCellStyle();
+        assertEquals(style2.getFillBackgroundColor(), style1.getFillBackgroundColor());
+        assertEquals(style2.getFillForegroundColor(), style1.getFillForegroundColor());
+        assertEquals(style2.getFillPattern(), style1.getFillPattern());
+
+        assertEquals(style2.getLeftBorderColor(), style1.getLeftBorderColor());
+        assertEquals(style2.getTopBorderColor(), style1.getTopBorderColor());
+        assertEquals(style2.getRightBorderColor(), style1.getRightBorderColor());
+        assertEquals(style2.getBottomBorderColor(), style1.getBottomBorderColor());
+
+        assertEquals(style2.getBorderBottom(), style1.getBorderBottom());
+        assertEquals(style2.getBorderLeft(), style1.getBorderLeft());
+        assertEquals(style2.getBorderRight(), style1.getBorderRight());
+        assertEquals(style2.getBorderTop(), style1.getBorderTop());
 	}
 	
 
 	public void testGetFillForegroundColor() {
 
-		CTPatternFill ctPatternFill = ctFill.addNewPatternFill();
-		CTColor ctFgColor = ctPatternFill.addNewFgColor();
-		ctFgColor.setIndexed(IndexedColors.BRIGHT_GREEN.getIndex());
-		ctPatternFill.setFgColor(ctFgColor);
-
-		XSSFCellFill cellFill=new XSSFCellFill(ctFill);
-		long index=stylesTable.putFill(cellFill);
-		cellStyle.getCoreXf().setFillId(index);
-
-		assertEquals(2,cellStyle.getCoreXf().getFillId());
-		assertEquals(IndexedColors.BRIGHT_GREEN.getIndex(), cellStyle.getFillForegroundColor());
-		
-		cellStyle.setFillForegroundColor(IndexedColors.BLUE.getIndex());
-		assertEquals(IndexedColors.BLUE.getIndex(), ctFill.getPatternFill().getFgColor().getIndexed());
-		
-		//test rgb color - XSSFColor
-		CTColor ctColor=CTColor.Factory.newInstance();
-		ctColor.setRgb("FFFFFF".getBytes());
-		ctPatternFill.setFgColor(ctColor);
-		assertEquals(ctColor.toString(), cellStyle.getFillForegroundRgbColor().getCTColor().toString());
-		
-		cellStyle.setFillForegroundRgbColor(new XSSFColor(ctColor));
-		assertEquals(ctColor.getRgb()[0], ctPatternFill.getFgColor().getRgb()[0]);
-		assertEquals(ctColor.getRgb()[1], ctPatternFill.getFgColor().getRgb()[1]);
-		assertEquals(ctColor.getRgb()[2], ctPatternFill.getFgColor().getRgb()[2]);
-		assertEquals(ctColor.getRgb()[3], ctPatternFill.getFgColor().getRgb()[3]);
+        XSSFWorkbook wb = new XSSFWorkbook();
+        StylesTable styles = wb.getStylesSource();
+        assertEquals(1, wb.getNumCellStyles());
+        assertEquals(2, styles.getFills().size());
+
+        XSSFCellStyle defaultStyle = wb.getCellStyleAt((short)0);
+        assertEquals(IndexedColors.AUTOMATIC.getIndex(), defaultStyle.getFillForegroundColor());
+        assertEquals(null, defaultStyle.getFillForegroundRgbColor());
+        assertEquals(CellStyle.NO_FILL, defaultStyle.getFillPattern());
+
+        XSSFCellStyle customStyle = wb.createCellStyle();
+
+        customStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
+        assertEquals(CellStyle.SOLID_FOREGROUND, customStyle.getFillPattern());
+        assertEquals(3, styles.getFills().size());
+
+        customStyle.setFillForegroundColor(IndexedColors.BRIGHT_GREEN.getIndex());
+        assertEquals(IndexedColors.BRIGHT_GREEN.getIndex(), customStyle.getFillForegroundColor());
+        assertEquals(4, styles.getFills().size());
+
+        for (int i = 0; i < 3; i++) {
+            XSSFCellStyle style = wb.createCellStyle();
+
+            style.setFillPattern(CellStyle.SOLID_FOREGROUND);
+            assertEquals(CellStyle.SOLID_FOREGROUND, style.getFillPattern());
+            assertEquals(4, styles.getFills().size());
+
+            style.setFillForegroundColor(IndexedColors.BRIGHT_GREEN.getIndex());
+            assertEquals(IndexedColors.BRIGHT_GREEN.getIndex(), style.getFillForegroundColor());
+            assertEquals(4, styles.getFills().size());
+        }
 	}
 	
-	public void testGetFillForegroundColor_default() {
+	public void testGetFillPattern() {
 
-		XSSFWorkbook wb = new XSSFWorkbook();
+        assertEquals(CellStyle.NO_FILL, cellStyle.getFillPattern());
 
-		XSSFCellStyle style = wb.createCellStyle();
+        int num = stylesTable.getFills().size();
+        cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
+        assertEquals(CellStyle.SOLID_FOREGROUND, cellStyle.getFillPattern());
+        assertEquals(num + 1, stylesTable.getFills().size());
+        int fillId = (int)cellStyle.getCoreXf().getFillId();
+        assertTrue(fillId > 0);
+        //check changes in the underlying xml bean
+        CTFill ctFill = stylesTable.getFillAt(fillId).getCTFill();
+        assertEquals(STPatternType.SOLID, ctFill.getPatternFill().getPatternType());
+
+        //setting the same fill multiple time does not update the styles table
+        for (int i = 0; i < 3; i++) {
+            cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
+        }
+        assertEquals(num + 1, stylesTable.getFills().size());
+
+        cellStyle.setFillPattern(CellStyle.NO_FILL);
+        assertEquals(CellStyle.NO_FILL, cellStyle.getFillPattern());
+        fillId = (int)cellStyle.getCoreXf().getFillId();
+        ctFill = stylesTable.getFillAt(fillId).getCTFill();
+        assertFalse(ctFill.getPatternFill().isSetPatternType());
 
-		short color;
-		try {
-			color = style.getFillForegroundColor();
-		} catch (NullPointerException e) {
-			throw new AssertionFailedError("Identified bug 45898");
-		}
-		assertEquals(AUTO_COLOR_INDEX, color);
-		XSSFColor xcolor=style.getFillForegroundRgbColor();
-		assertEquals(xcolor.getIndexed(), AUTO_COLOR_INDEX);
-	}
-	
-
-	public void testGetFillPattern() {
-
-		CTPatternFill ctPatternFill = ctFill.addNewPatternFill();
-		ctPatternFill.setPatternType(STPatternType.DARK_DOWN);
-		XSSFCellFill cellFill=new XSSFCellFill(ctFill);
-		long index=stylesTable.putFill(cellFill);
-		cellStyle.getCoreXf().setFillId(index);
-	
-		assertEquals(CellStyle.THICK_FORWARD_DIAG, cellStyle.getFillPattern());
-		
-		cellStyle.setFillPattern(CellStyle.BRICKS);
-		assertEquals(STPatternType.INT_DARK_TRELLIS,ctPatternFill.getPatternType().intValue());
 	}
 
 	public void testGetFont() {

Modified: poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java?rev=701797&r1=701796&r2=701797&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java (original)
+++ poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java Sun Oct  5 06:56:28 2008
@@ -255,9 +255,11 @@
 		s1 = wb.getSheetAt(0);
 
 		assertEquals(2, wb.getNumberOfFonts());
-		assertNotNull(s1.getRow(0).getCell(0).getCellStyle().getFont(wb));
-		assertEquals(IndexedColors.YELLOW.getIndex(), s1.getRow(0).getCell(0).getCellStyle().getFont(wb).getColor());
-		assertEquals("Courier", s1.getRow(0).getCell(0).getCellStyle().getFont(wb).getFontName());
+        short idx = s1.getRow(0).getCell(0).getCellStyle().getFontIndex();
+        Font fnt = wb.getFontAt(idx);
+        assertNotNull(fnt);
+		assertEquals(IndexedColors.YELLOW.getIndex(), fnt.getColor());
+		assertEquals("Courier", fnt.getFontName());
 
 		// Now add an orphaned one
 		XSSFFont font2 = wb.createFont();
@@ -342,4 +344,92 @@
 
 		XSSFTestDataSamples.writeOutAndReadBack(workbook);
 	}
+
+    /**
+     * Test that fonts get added properly
+     * 
+     * @see org.apache.poi.hssf.usermodel.TestBugs#test45338()
+     */
+    public void test45338() {
+        XSSFWorkbook wb = new XSSFWorkbook();
+        assertEquals(1, wb.getNumberOfFonts());
+
+        XSSFSheet s = wb.createSheet();
+        s.createRow(0);
+        s.createRow(1);
+        XSSFCell c1 = s.getRow(0).createCell(0);
+        XSSFCell c2 = s.getRow(1).createCell(0);
+
+        assertEquals(1, wb.getNumberOfFonts());
+
+        XSSFFont f1 = wb.getFontAt((short)0);
+        assertEquals(XSSFFont.BOLDWEIGHT_NORMAL, f1.getBoldweight());
+
+        // Check that asking for the same font
+        //  multiple times gives you the same thing.
+        // Otherwise, our tests wouldn't work!
+        assertEquals(
+                wb.getFontAt((short)0),
+                wb.getFontAt((short)0)
+        );
+
+        // Look for a new font we have
+        //  yet to add
+        assertNull(
+            wb.findFont(
+                (short)11, (short)123, (short)22,
+                "Thingy", false, true, (short)2, (byte)2
+            )
+        );
+
+        XSSFFont nf = wb.createFont();
+        assertEquals(2, wb.getNumberOfFonts());
+
+        assertEquals(1, nf.getIndex());
+        assertEquals(nf, wb.getFontAt((short)1));
+
+        nf.setBoldweight((short)11);
+        nf.setColor((short)123);
+        nf.setFontHeight((short)22);
+        nf.setFontName("Thingy");
+        nf.setItalic(false);
+        nf.setStrikeout(true);
+        nf.setTypeOffset((short)2);
+        nf.setUnderline((byte)2);
+
+        assertEquals(2, wb.getNumberOfFonts());
+        assertEquals(nf, wb.getFontAt((short)1));
+
+        assertEquals(
+                wb.getFontAt((short)1),
+                wb.getFontAt((short)1)
+        );
+        assertTrue(
+                wb.getFontAt((short)0)
+                !=
+                wb.getFontAt((short)1)
+        );
+
+        // Find it now
+        assertNotNull(
+            wb.findFont(
+                (short)11, (short)123, (short)22,
+                "Thingy", false, true, (short)2, (byte)2
+            )
+        );
+        assertEquals(
+            1,
+            wb.findFont(
+                   (short)11, (short)123, (short)22,
+                   "Thingy", false, true, (short)2, (byte)2
+               ).getIndex()
+        );
+        assertEquals(nf,
+               wb.findFont(
+                   (short)11, (short)123, (short)22,
+                   "Thingy", false, true, (short)2, (byte)2
+               )
+        );
+    }
+
 }

Modified: poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java?rev=701797&r1=701796&r2=701797&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java (original)
+++ poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java Sun Oct  5 06:56:28 2008
@@ -256,7 +256,7 @@
 		Font font=workbook.createFont();
 		((XSSFFont)font).setBold(true);
 		font.setUnderline(Font.U_DOUBLE);
-		StylesSource styleSource=new StylesTable();
+		StylesTable styleSource=new StylesTable();
 		long index=styleSource.putFont(font);
 		System.out.println("index="+index);
 		workbook.setStylesSource(styleSource);

Modified: poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFBorder.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFBorder.java?rev=701797&r1=701796&r2=701797&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFBorder.java (original)
+++ poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFBorder.java Sun Oct  5 06:56:28 2008
@@ -17,14 +17,15 @@
 
 package org.apache.poi.xssf.usermodel.extensions;
 
+import junit.framework.TestCase;
+
+import org.apache.poi.xssf.usermodel.BorderStyle;
 import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder.BorderSide;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorder;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorderPr;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTStylesheet;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.STBorderStyle;
 
-import junit.framework.TestCase;
-
 
 public class TestXSSFBorder extends TestCase {
 	
@@ -34,15 +35,20 @@
 		CTBorderPr top = border.addNewTop();
 		CTBorderPr right = border.addNewRight();
 		CTBorderPr bottom = border.addNewBottom();
+		
 		top.setStyle(STBorderStyle.DASH_DOT);
 		right.setStyle(STBorderStyle.NONE);
 		bottom.setStyle(STBorderStyle.THIN);
+		
 		XSSFCellBorder cellBorderStyle = new XSSFCellBorder(border);
-		assertEquals("dashDot", cellBorderStyle.getBorderStyle(BorderSide.TOP).toString());
-		assertEquals("none", cellBorderStyle.getBorderStyle(BorderSide.RIGHT).toString());
-		assertEquals(1, cellBorderStyle.getBorderStyle(BorderSide.RIGHT).intValue());
-		assertEquals("thin", cellBorderStyle.getBorderStyle(BorderSide.BOTTOM).toString());
-		assertEquals(2, cellBorderStyle.getBorderStyle(BorderSide.BOTTOM).intValue());
+		assertEquals("DASH_DOT", cellBorderStyle.getBorderStyle(BorderSide.TOP).toString());
+		
+		assertEquals("NONE", cellBorderStyle.getBorderStyle(BorderSide.RIGHT).toString());
+		assertEquals(BorderStyle.NONE.ordinal(), cellBorderStyle.getBorderStyle(BorderSide.RIGHT).ordinal());
+		
+		assertEquals("THIN", cellBorderStyle.getBorderStyle(BorderSide.BOTTOM).toString());
+		
+		assertEquals(BorderStyle.THIN.ordinal(), cellBorderStyle.getBorderStyle(BorderSide.BOTTOM).ordinal());
 	}
 	
 }

Modified: poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFCellFill.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFCellFill.java?rev=701797&r1=701796&r2=701797&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFCellFill.java (original)
+++ poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFCellFill.java Sun Oct  5 06:56:28 2008
@@ -1,58 +1,67 @@
-/* ====================================================================
-   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.xssf.usermodel.extensions;
-
-
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFill;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPatternFill;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPatternType;
-
-import junit.framework.TestCase;
-
-
-public class TestXSSFCellFill extends TestCase {
-	
-	public void testGetFillBackgroundColor() {
-		CTFill ctFill = CTFill.Factory.newInstance();
-		XSSFCellFill cellFill = new XSSFCellFill(ctFill);
-		CTPatternFill ctPatternFill = ctFill.addNewPatternFill();
-		CTColor bgColor = ctPatternFill.addNewBgColor();
-		assertNotNull(cellFill.getFillBackgroundColor());
-		bgColor.setIndexed(2);
-		assertEquals(2, cellFill.getFillBackgroundColor().getIndexed());
-	}
-	
-	public void testGetFillForegroundColor() {
-		CTFill ctFill = CTFill.Factory.newInstance();
-		XSSFCellFill cellFill = new XSSFCellFill(ctFill);
-		CTPatternFill ctPatternFill = ctFill.addNewPatternFill();
-		CTColor fgColor = ctPatternFill.addNewFgColor();
-		assertNotNull(cellFill.getFillForegroundColor());
-		fgColor.setIndexed(8);
-		assertEquals(8, cellFill.getFillForegroundColor().getIndexed());
-	}
-	
-	public void testGetPatternType() {
-		CTFill ctFill = CTFill.Factory.newInstance();
-		XSSFCellFill cellFill = new XSSFCellFill(ctFill);
-		CTPatternFill ctPatternFill = ctFill.addNewPatternFill();
-		ctPatternFill.setPatternType(STPatternType.DARK_DOWN);
-		assertEquals(8, cellFill.getPatternType().intValue());
-	}
-}
+/* ====================================================================
+   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.xssf.usermodel.extensions;
+
+
+import org.apache.poi.xssf.usermodel.FillPatternType;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFill;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPatternFill;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPatternType;
+
+import junit.framework.TestCase;
+
+
+public class TestXSSFCellFill extends TestCase {
+	
+	public void testGetFillBackgroundColor() {
+		CTFill ctFill = CTFill.Factory.newInstance();
+		XSSFCellFill cellFill = new XSSFCellFill(ctFill);
+		CTPatternFill ctPatternFill = ctFill.addNewPatternFill();
+		CTColor bgColor = ctPatternFill.addNewBgColor();
+		assertNotNull(cellFill.getFillBackgroundColor());
+		bgColor.setIndexed(2);
+		assertEquals(2, cellFill.getFillBackgroundColor().getIndexed());
+	}
+	
+	public void testGetFillForegroundColor() {
+		CTFill ctFill = CTFill.Factory.newInstance();
+		XSSFCellFill cellFill = new XSSFCellFill(ctFill);
+		CTPatternFill ctPatternFill = ctFill.addNewPatternFill();
+		CTColor fgColor = ctPatternFill.addNewFgColor();
+		assertNotNull(cellFill.getFillForegroundColor());
+		fgColor.setIndexed(8);
+		assertEquals(8, cellFill.getFillForegroundColor().getIndexed());
+	}
+	
+	public void testGetSetPatternType() {
+		CTFill ctFill = CTFill.Factory.newInstance();
+		XSSFCellFill cellFill = new XSSFCellFill(ctFill);
+		CTPatternFill ctPatternFill = ctFill.addNewPatternFill();
+		ctPatternFill.setPatternType(STPatternType.SOLID);
+		//assertEquals(FillPatternType.SOLID_FOREGROUND.ordinal(), cellFill.getPatternType().ordinal());
+	}
+
+    public void testGetNotModifies() {
+        CTFill ctFill = CTFill.Factory.newInstance();
+        XSSFCellFill cellFill = new XSSFCellFill(ctFill);
+        CTPatternFill ctPatternFill = ctFill.addNewPatternFill();
+        ctPatternFill.setPatternType(STPatternType.DARK_DOWN);
+        assertEquals(8, cellFill.getPatternType().intValue());
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org