From 6129d6323d6065a3d6953803e4526bcbbd931d8b Mon Sep 17 00:00:00 2001
From: Dominik Stadler <dominik.stadler@gmx.at>
Date: Mon, 12 Aug 2013 23:07:42 +0200
Subject: [PATCH] Bug 54593: Implement toString() and hashCode() in
 XSSFCellBorder to try to speed up certain operations

---
 .../xssf/usermodel/extensions/XSSFCellBorder.java  |   27 +++++++++++++++-----
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellBorder.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellBorder.java
index b100bc2..b366d81 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellBorder.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellBorder.java
@@ -33,6 +33,7 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.STBorderStyle;
 public class XSSFCellBorder {
     private ThemesTable _theme;
     private CTBorder border;
+    private String borderStr;
 
     /**
      * Creates a Cell Border from the supplied XML definition
@@ -47,6 +48,7 @@ public class XSSFCellBorder {
      */
     public XSSFCellBorder(CTBorder border) {
         this.border = border;
+        this.borderStr = null;
     }
 
     /**
@@ -55,6 +57,7 @@ public class XSSFCellBorder {
      */
     public XSSFCellBorder() {
         border = CTBorder.Factory.newInstance();
+        this.borderStr = null;
     }
 
     /**
@@ -136,9 +139,11 @@ public class XSSFCellBorder {
      */
     public void setBorderColor(BorderSide side, XSSFColor color) {
         CTBorderPr borderPr = getBorder(side, true);
-        if (color == null) borderPr.unsetColor();
+        if (color == null) 
+        	borderPr.unsetColor();
         else
             borderPr.setColor(color.getCTColor());
+        this.borderStr = null;
     }
 
     private CTBorderPr getBorder(BorderSide side) {
@@ -172,14 +177,24 @@ public class XSSFCellBorder {
     }
 
 
-    public int hashCode() {
-        return border.toString().hashCode();
+    @Override
+	public int hashCode() {
+    	return toString().hashCode();
     }
 
-    public boolean equals(Object o) {
+    @Override
+	public boolean equals(Object o) {
         if (!(o instanceof XSSFCellBorder)) return false;
 
         XSSFCellBorder cf = (XSSFCellBorder) o;
-        return border.toString().equals(cf.getCTBorder().toString());
+        return toString().equals(cf.toString());
     }
-}
\ No newline at end of file
+    
+    @Override
+	public String toString() {
+    	if(borderStr == null) {
+    		borderStr = border.toString();
+    	}
+    	return borderStr;
+    }
+}
-- 
1.7.9.5

