]> source.dussan.org Git - poi.git/commitdiff
#59836 - Tracker: Replace primitives with enums
authorAndreas Beeker <kiwiwings@apache.org>
Sun, 22 Jan 2017 22:01:22 +0000 (22:01 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Sun, 22 Jan 2017 22:01:22 +0000 (22:01 +0000)
preparation for removing those many HSSFColor subclasses with an enum

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1779866 13f79535-47bb-0310-9956-ffa450edef68

17 files changed:
src/examples/src/org/apache/poi/hssf/usermodel/examples/BigExample.java
src/examples/src/org/apache/poi/hssf/usermodel/examples/Borders.java
src/examples/src/org/apache/poi/hssf/usermodel/examples/CellComments.java
src/examples/src/org/apache/poi/hssf/usermodel/examples/FrillsAndFills.java
src/examples/src/org/apache/poi/hssf/usermodel/examples/Hyperlinks.java
src/examples/src/org/apache/poi/hssf/view/SVTableCellEditor.java
src/examples/src/org/apache/poi/hssf/view/SVTableUtils.java
src/examples/src/org/apache/poi/ss/examples/html/HSSFHtmlHelper.java
src/java/org/apache/poi/hssf/model/InternalWorkbook.java
src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java
src/java/org/apache/poi/hssf/usermodel/HSSFPalette.java
src/java/org/apache/poi/hssf/util/HSSFColor.java
src/testcases/org/apache/poi/hssf/record/TestCFRuleRecord.java
src/testcases/org/apache/poi/hssf/record/TestPaletteRecord.java
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPalette.java
src/testcases/org/apache/poi/hssf/util/AllHSSFUtilTests.java
src/testcases/org/apache/poi/hssf/util/TestHSSFColor.java

index cf37752000dfb7c62d720c099c30c286a8a8f3e7..d108214e60c9c14d845841cc010fcb05380b370d 100644 (file)
 
 package org.apache.poi.hssf.usermodel.examples;
 
-import org.apache.poi.hssf.usermodel.*;
-import org.apache.poi.hssf.util.HSSFColor;
-import org.apache.poi.ss.usermodel.CellStyle;
-import org.apache.poi.ss.usermodel.Font;
-
 import java.io.FileOutputStream;
 import java.io.IOException;
 
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;
+import org.apache.poi.hssf.usermodel.HSSFDataFormat;
+import org.apache.poi.hssf.usermodel.HSSFFont;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.FillPatternType;
+
 /**
  * Demonstrates many features of the user API at once.  Used in the HOW-TO guide.
- *
- * @author Glen Stampoultzis (glens at apache.org)
- * @author Andrew Oliver (acoliver at apache.org)
  */
 public class BigExample {
     public static void main(String[] args) throws IOException {
@@ -56,17 +59,17 @@ public class BigExample {
         //set font 1 to 12 point type
         f.setFontHeightInPoints((short) 12);
         //make it red
-        f.setColor(HSSFColor.RED.index);
+        f.setColor(HSSFColorPredefined.RED.getIndex());
         // make it bold
         //arial is the default font
-        f.setBoldweight(Font.BOLDWEIGHT_BOLD);
+        f.setBold(true);
 
         //set font 2 to 10 point type
         f2.setFontHeightInPoints((short) 10);
         //make it the color at palette index 0xf (white)
-        f2.setColor(HSSFColor.WHITE.index);
+        f2.setColor(HSSFColorPredefined.WHITE.getIndex());
         //make it bold
-        f2.setBoldweight(Font.BOLDWEIGHT_BOLD);
+        f2.setBold(true);
 
         //set cell stlye
         cs.setFont(f);
@@ -74,11 +77,11 @@ public class BigExample {
         cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)"));
 
         //set a thin border
-        cs2.setBorderBottom(CellStyle.BORDER_THIN);
+        cs2.setBorderBottom(BorderStyle.THIN);
         //fill w fg fill color
-        cs2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
+        cs2.setFillPattern(FillPatternType.SOLID_FOREGROUND);
         // set foreground fill to red
-        cs2.setFillForegroundColor(HSSFColor.RED.index);
+        cs2.setFillForegroundColor(HSSFColorPredefined.RED.getIndex());
 
         // set the font
         cs2.setFont(f2);
@@ -143,7 +146,7 @@ public class BigExample {
 
         // define the third style to be the default
         // except with a thick black border at the bottom
-        cs3.setBorderBottom(CellStyle.BORDER_THICK);
+        cs3.setBorderBottom(BorderStyle.THICK);
 
         //create 50 cells
         for (int cellnum =0; cellnum < 50; cellnum++) {
index 9158b0ccff519988a2f800fb1adcf5256f352b3b..8573f111393755e321c09ef67821cc6652f369b7 100644 (file)
@@ -25,7 +25,7 @@ import org.apache.poi.hssf.usermodel.HSSFCellStyle;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 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.hssf.util.HSSFColor.HSSFColorPredefined;
 import org.apache.poi.ss.usermodel.BorderStyle;
 
 /**
@@ -46,13 +46,13 @@ public class Borders {
         // Style the cell with borders all around.
         HSSFCellStyle style = wb.createCellStyle();
         style.setBorderBottom(BorderStyle.THIN);
-        style.setBottomBorderColor(HSSFColor.BLACK.index);
+        style.setBottomBorderColor(HSSFColorPredefined.BLACK.getIndex());
         style.setBorderLeft(BorderStyle.THIN);
-        style.setLeftBorderColor(HSSFColor.GREEN.index);
+        style.setLeftBorderColor(HSSFColorPredefined.GREEN.getIndex());
         style.setBorderRight(BorderStyle.THIN);
-        style.setRightBorderColor(HSSFColor.BLUE.index);
+        style.setRightBorderColor(HSSFColorPredefined.BLUE.getIndex());
         style.setBorderTop(BorderStyle.MEDIUM_DASHED);
-        style.setTopBorderColor(HSSFColor.ORANGE.index);
+        style.setTopBorderColor(HSSFColorPredefined.ORANGE.getIndex());
         cell.setCellStyle(style);
 
         // Write the output to a file
index 4109a87f481b942669ed2fc0501f57b59082d898..35df7690ac3b486d291536201a1ad4e03d604cdc 100644 (file)
@@ -28,7 +28,7 @@ import org.apache.poi.hssf.usermodel.HSSFPatriarch;
 import org.apache.poi.hssf.usermodel.HSSFRichTextString;
 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.hssf.util.HSSFColor.HSSFColorPredefined;
 
 /**
  * Demonstrates how to work with excel cell comments.
@@ -81,7 +81,7 @@ public class CellComments {
         font.setFontName("Arial");
         font.setFontHeightInPoints((short)10);
         font.setBold(true);
-        font.setColor(HSSFColor.RED.index);
+        font.setColor(HSSFColorPredefined.RED.getIndex());
         string.applyFont(font);
 
         comment2.setString(string);
index 40be15e0145fcb5b68b0da7092d27441b441850d..9b05853e4ff498f585711f49746e49f75d941238 100644 (file)
@@ -25,7 +25,7 @@ import org.apache.poi.hssf.usermodel.HSSFCellStyle;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 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.hssf.util.HSSFColor.HSSFColorPredefined;
 import org.apache.poi.ss.usermodel.FillPatternType;
 
 /**
@@ -41,7 +41,7 @@ public class FrillsAndFills {
 
         // Aqua background
         HSSFCellStyle style = wb.createCellStyle();
-        style.setFillBackgroundColor(HSSFColor.AQUA.index);
+        style.setFillBackgroundColor(HSSFColorPredefined.AQUA.getIndex());
         style.setFillPattern(FillPatternType.BIG_SPOTS);
         HSSFCell cell = row.createCell(1);
         cell.setCellValue("X");
@@ -49,7 +49,7 @@ public class FrillsAndFills {
 
         // Orange "foreground", foreground being the fill foreground not the font color.
         style = wb.createCellStyle();
-        style.setFillForegroundColor(HSSFColor.ORANGE.index);
+        style.setFillForegroundColor(HSSFColorPredefined.ORANGE.getIndex());
         style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
         cell = row.createCell(2);
         cell.setCellValue("X");
index adad7da363f7d778422113f583273453baf01604..9a71bcd22248ba7508a215d5eb5bd55319bbb3eb 100644 (file)
@@ -28,13 +28,11 @@ import org.apache.poi.hssf.usermodel.HSSFFont;
 import org.apache.poi.hssf.usermodel.HSSFHyperlink;
 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.hssf.util.HSSFColor.HSSFColorPredefined;
 import org.apache.poi.ss.usermodel.Font;
 
 /**
  * Demonstrates how to create hyperlinks.
- *
- * @author Yegor Kozlov (yegor at apach.org)
  */
 public class Hyperlinks {
 
@@ -47,7 +45,7 @@ public class Hyperlinks {
         HSSFCellStyle hlink_style = wb.createCellStyle();
         HSSFFont hlink_font = wb.createFont();
         hlink_font.setUnderline(Font.U_SINGLE);
-        hlink_font.setColor(HSSFColor.BLUE.index);
+        hlink_font.setColor(HSSFColorPredefined.BLUE.getIndex());
         hlink_style.setFont(hlink_font);
 
         HSSFCell cell;
index 3c58d5346b1f957411749207360e1e1a0b34dab8..9db98d95ed96c9b140bccf21db60cffe53cb9800 100644 (file)
@@ -18,6 +18,8 @@
 
 package org.apache.poi.hssf.view;
 
+import static org.apache.poi.hssf.view.SVTableUtils.getAWTColor;
+
 import java.awt.Color;
 import java.awt.Component;
 import java.awt.Font;
@@ -25,7 +27,6 @@ import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseEvent;
 import java.util.EventObject;
-import java.util.Map;
 
 import javax.swing.AbstractCellEditor;
 import javax.swing.JTable;
@@ -37,7 +38,7 @@ import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
 import org.apache.poi.hssf.usermodel.HSSFFont;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
 import org.apache.poi.ss.usermodel.FillPatternType;
 
 /**
@@ -47,10 +48,8 @@ import org.apache.poi.ss.usermodel.FillPatternType;
  * @author     Jason Height
  */
 public class SVTableCellEditor extends AbstractCellEditor implements TableCellEditor, ActionListener {
-  private static final Color black = getAWTColor(new HSSFColor.BLACK());
-  private static final Color white = getAWTColor(new HSSFColor.WHITE());
-  private Map<Integer,HSSFColor> colors = HSSFColor.getIndexHash();
-
+  private static final Color black = getAWTColor(HSSFColorPredefined.BLACK);
+  private static final Color white = getAWTColor(HSSFColorPredefined.WHITE);
 
   private HSSFWorkbook wb;
   private JTextField editor;
@@ -67,7 +66,7 @@ public class SVTableCellEditor extends AbstractCellEditor implements TableCellEd
    * @return    The cellEditable value
    */
   @Override
-public boolean isCellEditable(java.util.EventObject e) {
+  public boolean isCellEditable(java.util.EventObject e) {
     if (e instanceof MouseEvent) {
       return ((MouseEvent) e).getClickCount() >= 2;
     }
@@ -76,7 +75,7 @@ public boolean isCellEditable(java.util.EventObject e) {
 
 
   @Override
-public boolean shouldSelectCell(EventObject anEvent) {
+  public boolean shouldSelectCell(EventObject anEvent) {
     return true;
   }
 
@@ -88,7 +87,7 @@ public boolean shouldSelectCell(EventObject anEvent) {
 
 
   @Override
-public boolean stopCellEditing() {
+  public boolean stopCellEditing() {
     System.out.println("Stop Cell Editing");
     fireEditingStopped();
     return true;
@@ -96,14 +95,14 @@ public boolean stopCellEditing() {
 
 
   @Override
-public void cancelCellEditing() {
+  public void cancelCellEditing() {
     System.out.println("Cancel Cell Editing");
     fireEditingCanceled();
   }
 
 
   @Override
-public void actionPerformed(ActionEvent e) {
+  public void actionPerformed(ActionEvent e) {
     System.out.println("Action performed");
     stopCellEditing();
   }
@@ -115,7 +114,7 @@ public void actionPerformed(ActionEvent e) {
    * @return    The cellEditorValue value
    */
   @Override
-public Object getCellEditorValue() {
+  public Object getCellEditorValue() {
     System.out.println("GetCellEditorValue");
     //JMH Look at when this method is called. Should it return a HSSFCell?
     return editor.getText();
@@ -128,7 +127,7 @@ public Object getCellEditorValue() {
    * @return             The tableCellEditorComponent value
    */
   @Override
-public Component getTableCellEditorComponent(JTable table, Object value,
+  public Component getTableCellEditorComponent(JTable table, Object value,
       boolean isSelected,
       int row,
       int column) {
@@ -142,18 +141,26 @@ public Component getTableCellEditorComponent(JTable table, Object value,
 
           int fontstyle = Font.PLAIN;
 
-          if (isbold) fontstyle = Font.BOLD;
-          if (isitalics) fontstyle = fontstyle | Font.ITALIC;
+          if (isbold) {
+            fontstyle = Font.BOLD;
+          }
+          if (isitalics) {
+            fontstyle = fontstyle | Font.ITALIC;
+          }
 
           int fontheight = f.getFontHeightInPoints();
-          if (fontheight == 9) fontheight = 10; //fix for stupid ol Windows
+          if (fontheight == 9) {
+            fontheight = 10; //fix for stupid ol Windows
+          }
 
           Font font = new Font(f.getFontName(),fontstyle,fontheight);
           editor.setFont(font);
 
           if (style.getFillPatternEnum() == FillPatternType.SOLID_FOREGROUND) {
             editor.setBackground(getAWTColor(style.getFillForegroundColor(), white));
-          } else editor.setBackground(white);
+          } else {
+            editor.setBackground(white);
+          }
 
           editor.setForeground(getAWTColor(f.getColor(), black));
 
@@ -202,18 +209,4 @@ public Component getTableCellEditorComponent(JTable table, Object value,
     }
     return editor;
   }
-
-    /** This method retrieves the AWT Color representation from the colour hash table
-     *
-     */
-    private final Color getAWTColor(int index, Color deflt) {
-      HSSFColor clr = colors.get(index);
-      if (clr == null) return deflt;
-      return getAWTColor(clr);
-    }
-
-    private static final Color getAWTColor(HSSFColor clr) {
-      short[] rgb = clr.getTriplet();
-      return new Color(rgb[0],rgb[1],rgb[2]);
-    }
 }
index 395f1cdb8d0c52de2d23d2ecd30666e94f73cba9..4ec32944d55a0fbf3cdcdda6a97e8d45afd9febf 100644 (file)
 
 package org.apache.poi.hssf.view;
 
-import java.util.*;
-import java.awt.*;
-import javax.swing.border.*;
+import java.awt.Color;
+import java.awt.Font;
+import java.util.Map;
 
-import org.apache.poi.hssf.usermodel.*;
-import org.apache.poi.hssf.util.*;
+import javax.swing.border.Border;
+import javax.swing.border.EmptyBorder;
+
+import org.apache.poi.hssf.usermodel.HSSFFont;
+import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
 
 /**
  * SVTableCell Editor and Renderer helper functions.
@@ -33,9 +37,9 @@ import org.apache.poi.hssf.util.*;
 public class SVTableUtils {
   private final static Map<Integer,HSSFColor> colors = HSSFColor.getIndexHash();
   /**  Description of the Field */
-  public final static Color black = getAWTColor(new HSSFColor.BLACK());
+  public final static Color black = getAWTColor(HSSFColorPredefined.BLACK);
   /**  Description of the Field */
-  public final static Color white = getAWTColor(new HSSFColor.WHITE());
+  public final static Color white = getAWTColor(HSSFColorPredefined.WHITE);
   /**  Description of the Field */
   public static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
 
@@ -44,7 +48,7 @@ public class SVTableUtils {
    *  Creates a new font for a specific cell style
    */
   public static Font makeFont(HSSFFont font) {
-    boolean isbold = font.getBoldweight() > HSSFFont.BOLDWEIGHT_NORMAL;
+    boolean isbold = font.getBold();
     boolean isitalics = font.getItalic();
     int fontstyle = Font.PLAIN;
     if (isbold) {
@@ -63,31 +67,20 @@ public class SVTableUtils {
     return new Font(font.getFontName(), fontstyle, fontheight);
   }
 
-
-  /**
-   * This method retrieves the AWT Color representation from the colour hash table
+  /** This method retrieves the AWT Color representation from the colour hash table
    *
-   * @param  index  Description of the Parameter
-   * @param  deflt  Description of the Parameter
-   * @return        The aWTColor value
    */
-  public final static Color getAWTColor(int index, Color deflt) {
+  /* package */ static final Color getAWTColor(int index, Color deflt) {
     HSSFColor clr = colors.get(index);
     if (clr == null) {
       return deflt;
     }
-    return getAWTColor(clr);
+    short[] rgb = clr.getTriplet();
+    return new Color(rgb[0],rgb[1],rgb[2]);
   }
 
-
-  /**
-   *  Gets the aWTColor attribute of the SVTableUtils class
-   *
-   * @param  clr  Description of the Parameter
-   * @return      The aWTColor value
-   */
-  public final static Color getAWTColor(HSSFColor clr) {
+  /* package */ static final Color getAWTColor(HSSFColorPredefined clr) {
     short[] rgb = clr.getTriplet();
-    return new Color(rgb[0], rgb[1], rgb[2]);
+    return new Color(rgb[0],rgb[1],rgb[2]);
   }
 }
index 677a38ab71c3a784c25915130d85b5fad0d5d425..9955eb30f0dec99c1f8600349bcfad250c808780 100644 (file)
 ==================================================================== */
 package org.apache.poi.ss.examples.html;
 
+import java.util.Formatter;
+
 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
 import org.apache.poi.hssf.usermodel.HSSFPalette;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
 import org.apache.poi.ss.usermodel.CellStyle;
 
-import java.util.Formatter;
-
 /**
  * Implementation of {@link HtmlHelper} for HSSF files.
- *
- * @author Ken Arnold, Industrious Media LLC
  */
 public class HSSFHtmlHelper implements HtmlHelper {
     private final HSSFWorkbook wb;
     private final HSSFPalette colors;
 
-    private static final HSSFColor HSSF_AUTO = new HSSFColor.AUTOMATIC();
+    private static final HSSFColor HSSF_AUTO = HSSFColorPredefined.AUTOMATIC.getColor();
 
     public HSSFHtmlHelper(HSSFWorkbook wb) {
         this.wb = wb;
@@ -45,7 +44,7 @@ public class HSSFHtmlHelper implements HtmlHelper {
     @Override
     public void colorStyles(CellStyle style, Formatter out) {
         HSSFCellStyle cs = (HSSFCellStyle) style;
-        out.format("  /* fill pattern = %d */%n", cs.getFillPattern());
+        out.format("  /* fill pattern = %d */%n", cs.getFillPatternEnum().getCode());
         styleColor(out, "background-color", cs.getFillForegroundColor());
         styleColor(out, "color", cs.getFont(wb).getColor());
         styleColor(out, "border-left-color", cs.getLeftBorderColor());
index 063830d32725cb6de9c2a1a7a2ed6e9ebf75353f..976c888ce8c3ec07246b8a842e0be2d7bd8d25d9 100644 (file)
@@ -88,7 +88,7 @@ import org.apache.poi.hssf.record.WriteAccessRecord;
 import org.apache.poi.hssf.record.WriteProtectRecord;
 import org.apache.poi.hssf.record.common.UnicodeString;
 import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
-import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
 import org.apache.poi.poifs.crypt.CryptoFunctions;
 import org.apache.poi.poifs.crypt.Decryptor;
 import org.apache.poi.poifs.crypt.EncryptionInfo;
@@ -231,9 +231,10 @@ public final class InternalWorkbook {
      * @return Workbook object
      */
     public static InternalWorkbook createWorkbook(List<Record> recs) {
-        if (log.check( POILogger.DEBUG ))
+        if (log.check( POILogger.DEBUG )) {
             log.log(DEBUG, "Workbook (readfile) created with reclen=",
                     Integer.valueOf(recs.size()));
+        }
         InternalWorkbook retval = new InternalWorkbook();
         List<Record> records = new ArrayList<Record>(recs.size() / 3);
         retval.records.setRecords(records);
@@ -244,54 +245,62 @@ public final class InternalWorkbook {
 
             if (rec.getSid() == EOFRecord.sid) {
                 records.add(rec);
-                if (log.check( POILogger.DEBUG ))
+                if (log.check( POILogger.DEBUG )) {
                     log.log(DEBUG, "found workbook eof record at " + k);
+                }
                 break;
             }
             switch (rec.getSid()) {
 
                 case BoundSheetRecord.sid :
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found boundsheet record at " + k);
+                    }
                     retval.boundsheets.add((BoundSheetRecord) rec);
                     retval.records.setBspos( k );
                     break;
 
                 case SSTRecord.sid :
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found sst record at " + k);
+                    }
                     retval.sst = ( SSTRecord ) rec;
                     break;
 
                 case FontRecord.sid :
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found font record at " + k);
+                    }
                     retval.records.setFontpos( k );
                     retval.numfonts++;
                     break;
 
                 case ExtendedFormatRecord.sid :
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found XF record at " + k);
+                    }
                     retval.records.setXfpos( k );
                     retval.numxfs++;
                     break;
 
                 case TabIdRecord.sid :
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found tabid record at " + k);
+                    }
                     retval.records.setTabpos( k );
                     break;
 
                 case ProtectRecord.sid :
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found protect record at " + k);
+                    }
                     retval.records.setProtpos( k );
                     break;
 
                 case BackupRecord.sid :
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found backup record at " + k);
+                    }
                     retval.records.setBackuppos( k );
                     break;
                 case ExternSheetRecord.sid :
@@ -299,57 +308,67 @@ public final class InternalWorkbook {
                 case NameRecord.sid :
                 case SupBookRecord.sid :
                     // LinkTable can start with either of these
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found SupBook record at " + k);
+                    }
                     retval.linkTable = new LinkTable(recs, k, retval.records, retval.commentRecords);
                     k+=retval.linkTable.getRecordCount() - 1;
                     continue;
                 case FormatRecord.sid :
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found format record at " + k);
+                    }
                     retval.formats.add((FormatRecord) rec);
                     retval.maxformatid = retval.maxformatid >= ((FormatRecord)rec).getIndexCode() ? retval.maxformatid : ((FormatRecord)rec).getIndexCode();
                     break;
                 case DateWindow1904Record.sid :
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found datewindow1904 record at " + k);
+                    }
                     retval.uses1904datewindowing = ((DateWindow1904Record)rec).getWindowing() == 1;
                     break;
                 case PaletteRecord.sid:
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found palette record at " + k);
+                    }
                     retval.records.setPalettepos( k );
                     break;
                 case WindowOneRecord.sid:
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found WindowOneRecord at " + k);
+                    }
                     retval.windowOne = (WindowOneRecord) rec;
                     break;
                 case WriteAccessRecord.sid:
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found WriteAccess at " + k);
+                    }
                     retval.writeAccess = (WriteAccessRecord) rec;
                     break;
                 case WriteProtectRecord.sid:
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found WriteProtect at " + k);
+                    }
                     retval.writeProtect = (WriteProtectRecord) rec;
                     break;
                 case FileSharingRecord.sid:
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found FileSharing at " + k);
+                    }
                     retval.fileShare = (FileSharingRecord) rec;
                     break;
 
                 case NameCommentRecord.sid:
                     final NameCommentRecord ncr = (NameCommentRecord) rec;
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG, "found NameComment at " + k);
+                    }
                     retval.commentRecords.put(ncr.getNameText(), ncr);
                     break;
                 default:
-                    if (log.check( POILogger.DEBUG ))
+                    if (log.check( POILogger.DEBUG )) {
                         log.log(DEBUG,  "ignoring record (sid=" + rec.getSid() + ") at " + k);
+                    }
                     break;
             }
             records.add(rec);
@@ -376,8 +395,9 @@ public final class InternalWorkbook {
         if (retval.windowOne == null) {
             retval.windowOne = createWindowOne();
         }
-        if (log.check( POILogger.DEBUG ))
+        if (log.check( POILogger.DEBUG )) {
             log.log(DEBUG, "exit create workbook from existing file function");
+        }
         return retval;
     }
 
@@ -389,8 +409,9 @@ public final class InternalWorkbook {
      */
     public static InternalWorkbook createWorkbook()
     {
-        if (log.check( POILogger.DEBUG ))
+        if (log.check( POILogger.DEBUG )) {
             log.log( DEBUG, "creating new workbook from scratch" );
+        }
         InternalWorkbook retval = new InternalWorkbook();
         List<Record> records = new ArrayList<Record>( 30 );
         retval.records.setRecords(records);
@@ -463,8 +484,9 @@ public final class InternalWorkbook {
         records.add(InternalWorkbook.createExtendedSST());
 
         records.add(EOFRecord.instance);
-        if (log.check( POILogger.DEBUG ))
+        if (log.check( POILogger.DEBUG )) {
             log.log( DEBUG, "exit create new workbook from scratch" );
+        }
         return retval;
     }
 
@@ -592,9 +614,10 @@ public final class InternalWorkbook {
      */
 
     public void setSheetBof(int sheetIndex, int pos) {
-        if (log.check( POILogger.DEBUG ))
+        if (log.check( POILogger.DEBUG )) {
             log.log(DEBUG, "setting bof for sheetnum =", Integer.valueOf(sheetIndex),
                 " at pos=", Integer.valueOf(pos));
+        }
         checkSheets(sheetIndex);
         getBoundSheetRec(sheetIndex)
         .setPositionOfBof(pos);
@@ -626,7 +649,9 @@ public final class InternalWorkbook {
         checkSheets(sheetnum);
 
         // YK: Mimic Excel and silently truncate sheet names longer than 31 characters
-        if(sheetname.length() > 31) sheetname = sheetname.substring(0, 31);
+        if(sheetname.length() > 31) {
+            sheetname = sheetname.substring(0, 31);
+        }
 
         BoundSheetRecord sheet = boundsheets.get(sheetnum);
         sheet.setSheetname(sheetname);
@@ -868,8 +893,9 @@ public final class InternalWorkbook {
      */
 
     public int getNumSheets() {
-        if (log.check( POILogger.DEBUG ))
+        if (log.check( POILogger.DEBUG )) {
             log.log(DEBUG, "getNumSheets=", Integer.valueOf(boundsheets.size()));
+        }
         return boundsheets.size();
     }
 
@@ -880,8 +906,9 @@ public final class InternalWorkbook {
      */
 
     public int getNumExFormats() {
-        if (log.check( POILogger.DEBUG ))
+        if (log.check( POILogger.DEBUG )) {
             log.log(DEBUG, "getXF=", Integer.valueOf(numxfs));
+        }
         return numxfs;
     }
 
@@ -1019,8 +1046,9 @@ public final class InternalWorkbook {
      */
 
     public int addSSTString(UnicodeString string) {
-        if (log.check( POILogger.DEBUG ))
-          log.log(DEBUG, "insert to sst string='", string);
+        if (log.check( POILogger.DEBUG )) {
+            log.log(DEBUG, "insert to sst string='", string);
+        }
         if (sst == null) {
             insertSST();
         }
@@ -1038,9 +1066,10 @@ public final class InternalWorkbook {
         }
         UnicodeString retval = sst.getString(str);
 
-        if (log.check( POILogger.DEBUG ))
+        if (log.check( POILogger.DEBUG )) {
             log.log(DEBUG, "Returning SST for index=", Integer.valueOf(str),
                 " String= ", retval);
+        }
         return retval;
     }
 
@@ -1052,8 +1081,9 @@ public final class InternalWorkbook {
      */
 
     public void insertSST() {
-        if (log.check( POILogger.DEBUG ))
+        if (log.check( POILogger.DEBUG )) {
             log.log(DEBUG, "creating new SST via insertSST!");
+        }
         sst = new SSTRecord();
         records.add(records.size() - 1, createExtendedSST());
         records.add(records.size() - 2, sst);
@@ -1096,8 +1126,9 @@ public final class InternalWorkbook {
      */
     public int serialize( int offset, byte[] data )
     {
-        if (log.check( POILogger.DEBUG ))
+        if (log.check( POILogger.DEBUG )) {
             log.log( DEBUG, "Serializing Workbook with offsets" );
+        }
 
         int pos = 0;
 
@@ -1133,8 +1164,9 @@ public final class InternalWorkbook {
             /////  DEBUG END /////
             pos += len;   // rec.length;
         }
-        if (log.check( POILogger.DEBUG ))
+        if (log.check( POILogger.DEBUG )) {
             log.log( DEBUG, "Exiting serialize workbook" );
+        }
         return pos;
     }
 
@@ -1207,13 +1239,15 @@ public final class InternalWorkbook {
         for ( int k = 0; k < records.size(); k++ )
         {
             Record record = records.get( k );
-            if (record instanceof SSTRecord)
+            if (record instanceof SSTRecord) {
                 sst = (SSTRecord)record;
+            }
 
-            if (record.getSid() == ExtSSTRecord.sid && sst != null)
+            if (record.getSid() == ExtSSTRecord.sid && sst != null) {
                 retval += sst.calcExtSSTRecordSize();
-            else
+            } else {
                 retval += record.getRecordSize();
+            }
         }
 
         return retval;
@@ -1250,7 +1284,9 @@ public final class InternalWorkbook {
         try {
             String username = System.getProperty("user.name");
             // Google App engine returns null for user.name, see Bug 53974
-            if(username == null) username = defaultUserName;
+            if(username == null) {
+                username = defaultUserName;
+            }
 
             retval.setUsername(username);
         } catch (AccessControlException e) {
@@ -1799,10 +1835,10 @@ public final class InternalWorkbook {
         retval.setPaletteOptions(( short ) 0);
         retval.setAdtlPaletteOptions(( short ) 0);
         retval.setFillPaletteOptions(( short ) 0x20c0);
-        retval.setTopBorderPaletteIdx(HSSFColor.BLACK.index);
-        retval.setBottomBorderPaletteIdx(HSSFColor.BLACK.index);
-        retval.setLeftBorderPaletteIdx(HSSFColor.BLACK.index);
-        retval.setRightBorderPaletteIdx(HSSFColor.BLACK.index);
+        retval.setTopBorderPaletteIdx(HSSFColorPredefined.BLACK.getIndex());
+        retval.setBottomBorderPaletteIdx(HSSFColorPredefined.BLACK.getIndex());
+        retval.setLeftBorderPaletteIdx(HSSFColorPredefined.BLACK.getIndex());
+        retval.setRightBorderPaletteIdx(HSSFColorPredefined.BLACK.getIndex());
         return retval;
     }
 
@@ -2172,8 +2208,9 @@ public final class InternalWorkbook {
         FormatRecord rec = new FormatRecord(maxformatid, formatString);
 
         int pos = 0;
-        while ( pos < records.size() && records.get( pos ).getSid() != FormatRecord.sid )
+        while ( pos < records.size() && records.get( pos ).getSid() != FormatRecord.sid ) {
             pos++;
+        }
         pos += formats.size();
         formats.add( rec );
         records.add( pos, rec );
@@ -2226,8 +2263,9 @@ public final class InternalWorkbook {
         int matches = 0;
         for (Record record : records) {
             if (record.getSid() == sid) {
-                if (matches++ == pos)
+                if (matches++ == pos) {
                     return record;
+                }
             }
         }
         return null;
@@ -2266,7 +2304,9 @@ public final class InternalWorkbook {
         Record rec = records.get(palettePos);
         if (rec instanceof PaletteRecord) {
           palette = (PaletteRecord) rec;
-        } else throw new RuntimeException("InternalError: Expected PaletteRecord but got a '"+rec+"'");
+        } else {
+            throw new RuntimeException("InternalError: Expected PaletteRecord but got a '"+rec+"'");
+        }
       }
       else
       {
@@ -2316,7 +2356,9 @@ public final class InternalWorkbook {
                     drawingManager = new DrawingManager2(dgg);
                     if(bStore != null){
                         for(EscherRecord bs : bStore.getChildRecords()){
-                            if(bs instanceof EscherBSERecord) escherBSERecords.add((EscherBSERecord)bs);
+                            if(bs instanceof EscherBSERecord) {
+                                escherBSERecords.add((EscherBSERecord)bs);
+                            }
                         }
                     }
                     return drawingManager;
@@ -2344,7 +2386,9 @@ public final class InternalWorkbook {
                 drawingManager = new DrawingManager2(dgg);
                 if(bStore != null){
                     for(EscherRecord bs : bStore.getChildRecords()){
-                        if(bs instanceof EscherBSERecord) escherBSERecords.add((EscherBSERecord)bs);
+                        if(bs instanceof EscherBSERecord) {
+                            escherBSERecords.add((EscherBSERecord)bs);
+                        }
                     }
                 }
             }
@@ -2395,8 +2439,9 @@ public final class InternalWorkbook {
             splitMenuColors.setColor4(0x100000F7);
 
             dggContainer.addChildRecord(dgg);
-            if (bstoreContainer != null)
+            if (bstoreContainer != null) {
                 dggContainer.addChildRecord( bstoreContainer );
+            }
             dggContainer.addChildRecord(opt);
             dggContainer.addChildRecord(splitMenuColors);
 
index 542ee2210bcd569b5d33be509343cbc84297d065..e6f5b91d5640999c6ddeb50dfe43cf54ee2c9582 100644 (file)
@@ -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.hssf.util.HSSFColor.HSSFColorPredefined;
 import org.apache.poi.ss.usermodel.BorderStyle;
 import org.apache.poi.ss.usermodel.CellStyle;
 import org.apache.poi.ss.usermodel.FillPatternType;
@@ -112,6 +113,7 @@ public final class HSSFCellStyle implements CellStyle {
     // avoid multi-threading issues when different workbooks are accessed in 
     // multiple threads at the same time
     private static final ThreadLocal<Short> lastDateFormat = new ThreadLocal<Short>() {
+        @Override
         protected Short initialValue() {
             return Short.MIN_VALUE;
         }
@@ -273,6 +275,7 @@ public final class HSSFCellStyle implements CellStyle {
      * @see #ALIGN_CENTER_SELECTION
      * @deprecated POI 3.15 beta 3. Use {@link #setAlignment(HorizontalAlignment)} instead.
      */
+    @Deprecated
     @Removal(version="3.17")
     @Override
     public void setAlignment(short align)
@@ -303,6 +306,7 @@ public final class HSSFCellStyle implements CellStyle {
      * @see #ALIGN_CENTER_SELECTION
      * @deprecated POI 3.15 beta 3. Use {@link #getAlignmentEnum()} instead.
      */
+    @Deprecated
     @Override
     public short getAlignment()
     {
@@ -349,6 +353,7 @@ public final class HSSFCellStyle implements CellStyle {
      * @see VerticalAlignment
      * @deprecated POI 3.15 beta 3. Use {@link #setVerticalAlignment(VerticalAlignment)} instead.
      */
+    @Deprecated
     @Removal(version="3.17")
     @Override
     public void setVerticalAlignment(short align)
@@ -375,6 +380,7 @@ public final class HSSFCellStyle implements CellStyle {
      * @see VerticalAlignment
      * @deprecated POI 3.15 beta 3. Use {@link #getVerticalAlignmentEnum()} instead.
      */
+    @Deprecated
     @Override
     public short getVerticalAlignment()
     {
@@ -480,6 +486,7 @@ public final class HSSFCellStyle implements CellStyle {
      * @see #BORDER_SLANTED_DASH_DOT
      * @deprecated 3.15 beta 2. Use {@link HSSFCellStyle#setBorderLeft(BorderStyle)} instead.
      */
+    @Deprecated
     @Removal(version="3.17")
     @Override
     public void setBorderLeft(short border)
@@ -504,6 +511,7 @@ public final class HSSFCellStyle implements CellStyle {
      * @return border type
      * @deprecated POI 3.15. Will return a BorderStyle enum in the future. Use {@link #getBorderLeftEnum()}.
      */
+    @Deprecated
     @Override
     public short getBorderLeft()
     {
@@ -539,6 +547,7 @@ public final class HSSFCellStyle implements CellStyle {
      * @see #BORDER_SLANTED_DASH_DOT
      * @deprecated 3.15 beta 2. Use {@link HSSFCellStyle#setBorderRight(BorderStyle)} instead.
      */
+    @Deprecated
     @Removal(version="3.17")
     @Override
     public void setBorderRight(short border)
@@ -563,6 +572,7 @@ public final class HSSFCellStyle implements CellStyle {
      * @return border type
      * @deprecated POI 3.15. Will return a BorderStyle enum in the future. Use {@link #getBorderRightEnum()}.
      */
+    @Deprecated
     @Override
     public short getBorderRight()
     {
@@ -598,6 +608,7 @@ public final class HSSFCellStyle implements CellStyle {
      * @see #BORDER_SLANTED_DASH_DOT
      * @deprecated 3.15 beta 2. Use {@link HSSFCellStyle#setBorderTop(BorderStyle)} instead.
      */
+    @Deprecated
     @Removal(version="3.17")
     @Override
     public void setBorderTop(short border)
@@ -622,6 +633,7 @@ public final class HSSFCellStyle implements CellStyle {
      * @return border type
      * @deprecated POI 3.15. Will return a BorderStyle enum in the future. Use {@link #getBorderTopEnum()}.
      */
+    @Deprecated
     @Override
     public short getBorderTop()
     {
@@ -657,6 +669,7 @@ public final class HSSFCellStyle implements CellStyle {
      * @see #BORDER_SLANTED_DASH_DOT
      * @deprecated 3.15 beta 2. Use {@link HSSFCellStyle#setBorderBottom(BorderStyle)} instead.
      */
+    @Deprecated
     @Removal(version="3.17")
     @Override
     public void setBorderBottom(short border)
@@ -681,6 +694,7 @@ public final class HSSFCellStyle implements CellStyle {
      * @return border type
      * @deprecated POI 3.15. Will return a BorderStyle enum in the future. Use {@link #getBorderBottomEnum()}.
      */
+    @Deprecated
     @Override
     public short getBorderBottom()
     {
@@ -806,6 +820,7 @@ public final class HSSFCellStyle implements CellStyle {
      * @param fp  fill pattern (set to 1 to fill w/foreground color)
      * @deprecated POI 3.15 beta 3. Use {@link #setFillPattern(FillPatternType)} instead.
      */
+    @Deprecated
     @Removal(version="3.17")
     @Override
     public void setFillPattern(short fp)
@@ -830,6 +845,7 @@ public final class HSSFCellStyle implements CellStyle {
      * @return fill pattern
      * @deprecated POI 3.15 beta 3. This method will return {@link FillPatternType} in the future. Use {@link #setFillPattern(FillPatternType)} instead. 
      */
+    @Deprecated
     @Override
     public short getFillPattern()
     {
@@ -857,16 +873,20 @@ public final class HSSFCellStyle implements CellStyle {
      * <p>0x40         0xSOMETHING</p>
      */
     private void checkDefaultBackgroundFills() {
-      if (_format.getFillForeground() == org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index) {
-          //JMH: Why +1, hell why not. I guess it made some sense to someone at the time. Doesnt
-          //to me now.... But experience has shown that when the fore is set to AUTOMATIC then the
-          //background needs to be incremented......
-          if (_format.getFillBackground() != (org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index+1))
-              setFillBackgroundColor((short)(org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index+1));
-      } else if (_format.getFillBackground() == org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index+1)
-          //Now if the forground changes to a non-AUTOMATIC color the background resets itself!!!
-          if (_format.getFillForeground() != org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index)
-              setFillBackgroundColor(org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index);
+        final short autoIdx = HSSFColorPredefined.AUTOMATIC.getIndex();
+        if (_format.getFillForeground() == autoIdx) {
+            //JMH: Why +1, hell why not. I guess it made some sense to someone at the time. Doesnt
+            //to me now.... But experience has shown that when the fore is set to AUTOMATIC then the
+            //background needs to be incremented......
+            if (_format.getFillBackground() != autoIdx+1) {
+                setFillBackgroundColor((short)(autoIdx+1));
+            }
+        } else if (_format.getFillBackground() == autoIdx+1) {
+            //Now if the forground changes to a non-AUTOMATIC color the background resets itself!!!
+            if (_format.getFillForeground() != autoIdx) {
+                setFillBackgroundColor(autoIdx);
+            }
+        }
     }
 
     /**
@@ -909,13 +929,13 @@ public final class HSSFCellStyle implements CellStyle {
      * @return fill color
      */
     @Override
-    public short getFillBackgroundColor()
-    {
+    public short getFillBackgroundColor() {
+        final short autoIndex = HSSFColorPredefined.AUTOMATIC.getIndex();
         short result = _format.getFillBackground();
         //JMH: Do this ridiculous conversion, and let HSSFCellStyle
         //internally migrate back and forth
-        if (result == (HSSFColor.AUTOMATIC.index+1)) {
-            return HSSFColor.AUTOMATIC.index;
+        if (result == autoIndex+1) {
+            return autoIndex;
         }
         return result;
     }
@@ -1117,17 +1137,24 @@ public final class HSSFCellStyle implements CellStyle {
 
     @Override
     public boolean equals(Object obj) {
-        if (this == obj) return true;
-        if (obj == null) return false;
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
         if (obj instanceof HSSFCellStyle) {
             final HSSFCellStyle other = (HSSFCellStyle) obj;
             if (_format == null) {
-                if (other._format != null)
+                if (other._format != null) {
                     return false;
-            } else if (!_format.equals(other._format))
+                }
+            } else if (!_format.equals(other._format)) {
                 return false;
-            if (_index != other._index)
+            }
+            if (_index != other._index) {
                 return false;
+            }
             return true;
         }
         return false;
index 0d754da6717a4847b3654c40b9757e4130ad8408..7aeabe92c4a5f87eb24bc673980f6693eb82a42e 100644 (file)
@@ -21,6 +21,7 @@ import java.util.Locale;
 
 import org.apache.poi.hssf.record.PaletteRecord;
 import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
 
 /**
  * Represents a workbook color palette.
@@ -45,16 +46,13 @@ public final class HSSFPalette {
     public HSSFColor getColor(short index)
     {
         //Handle the special AUTOMATIC case
-        if (index == HSSFColor.AUTOMATIC.index) {
-            return HSSFColor.AUTOMATIC.getInstance();
+        if (index == HSSFColorPredefined.AUTOMATIC.getIndex()) {
+            return HSSFColorPredefined.AUTOMATIC.getColor();
         }
         byte[] b = _palette.getColor(index);
-          if (b != null)
-          {
-             return new CustomColor(index, b);
-          }
-        return null;
+        return (b == null) ? null : new CustomColor(index, b);
     }
+
     /**
      * Retrieves the color at a given index
      *
index 55ff46bf1e3d027cd1e5025a6b5ac5df769838ce..129066fa1c3a6a1876aca8447fe2416c15aa1ecd 100644 (file)
 
 package org.apache.poi.hssf.util;
 
-import java.lang.reflect.Field;
 import java.util.Collections;
+import java.util.EnumMap;
 import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 
 import org.apache.poi.ss.usermodel.Color;
+import org.apache.poi.util.Removal;
 
 
 /**
@@ -32,15 +34,132 @@ import org.apache.poi.ss.usermodel.Color;
  * Each color has an index (for the standard palette in Excel (tm) ),
  * native (RGB) triplet and string triplet.  The string triplet is as the
  * color would be represented by Gnumeric.  Having (string) this here is a bit of a
- * collusion of function between HSSF and the HSSFSerializer but I think its
+ * collision of function between HSSF and the HSSFSerializer but I think its
  * a reasonable one in this case.
  */
 public class HSSFColor implements Color {
-    private static Map<Integer,HSSFColor> indexHash; 
+
+    private static Map<Integer,HSSFColor> indexHash;
+    private static Map<HSSFColorPredefined,HSSFColor> enumList;
+
+    private java.awt.Color color;
+    private int index;
+    private int index2;
+
+    /**
+     * Predefined HSSFColors with their given palette index (and an optional 2nd index)
+     * 
+     * @since POI 3.16 beta 2
+     */
+    public enum HSSFColorPredefined {
+        BLACK                (0x08,   -1, 0x000000),
+        BROWN                (0x3C,   -1, 0x993300),
+        OLIVE_GREEN          (0x3B,   -1, 0x333300),
+        DARK_GREEN           (0x3A,   -1, 0x003300),
+        DARK_TEAL            (0x38,   -1, 0x003366),
+        DARK_BLUE            (0x12, 0x20, 0x000080),
+        INDIGO               (0x3E,   -1, 0x333399),
+        GREY_80_PERCENT      (0x3F,   -1, 0x333333),
+        ORANGE               (0x35,   -1, 0xFF6600),
+        DARK_YELLOW          (0x13,   -1, 0x808000),
+        GREEN                (0x11,   -1, 0x008000),
+        TEAL                 (0x15, 0x26, 0x008080),
+        BLUE                 (0x0C, 0x27, 0x0000FF),
+        BLUE_GREY            (0x36,   -1, 0x666699),
+        GREY_50_PERCENT      (0x17,   -1, 0x808080),
+        RED                  (0x0A,   -1, 0xFF0000),
+        LIGHT_ORANGE         (0x34,   -1, 0xFF9900),
+        LIME                 (0x32,   -1, 0x99CC00),
+        SEA_GREEN            (0x39,   -1, 0x339966),
+        AQUA                 (0x31,   -1, 0x33CCCC),
+        LIGHT_BLUE           (0x30,   -1, 0x3366FF),
+        VIOLET               (0x14, 0x24, 0x800080),
+        GREY_40_PERCENT      (0x37,   -1, 0x969696),
+        PINK                 (0x0E, 0x21, 0xFF00FF),
+        GOLD                 (0x33,   -1, 0xFFCC00),
+        YELLOW               (0x0D, 0x22, 0xFFFF00),
+        BRIGHT_GREEN         (0x0B,   -1, 0x00FF00),
+        TURQUOISE            (0x0F, 0x23, 0x00FFFF),
+        DARK_RED             (0x10, 0x25, 0x800000),
+        SKY_BLUE             (0x28,   -1, 0x00CCFF),
+        PLUM                 (0x3D, 0x19, 0x993366),
+        GREY_25_PERCENT      (0x16,   -1, 0xC0C0C0),
+        ROSE                 (0x2D,   -1, 0xFF99CC),
+        LIGHT_YELLOW         (0x2B,   -1, 0xFFFF99),
+        LIGHT_GREEN          (0x2A,   -1, 0xCCFFCC),
+        LIGHT_TURQUOISE      (0x29, 0x1B, 0xCCFFFF),
+        PALE_BLUE            (0x2C,   -1, 0x99CCFF),
+        LAVENDER             (0x2E,   -1, 0xCC99FF),
+        WHITE                (0x09,   -1, 0xFFFFFF),
+        CORNFLOWER_BLUE      (0x18,   -1, 0x9999FF),
+        LEMON_CHIFFON        (0x1A,   -1, 0xFFFFCC),
+        MAROON               (0x19,   -1, 0x7F0000),
+        ORCHID               (0x1C,   -1, 0x660066),
+        CORAL                (0x1D,   -1, 0xFF8080),
+        ROYAL_BLUE           (0x1E,   -1, 0x0066CC),
+        LIGHT_CORNFLOWER_BLUE(0x1F,   -1, 0xCCCCFF),
+        TAN                  (0x2F,   -1, 0xFFCC99),
+
+        /**
+         * Special Default/Normal/Automatic color.<p>
+         * <i>Note:</i> This class is NOT in the default Map returned by HSSFColor.
+         * The index is a special case which is interpreted in the various setXXXColor calls.
+         */
+        AUTOMATIC            (0x40,   -1, 0x000000);
+
+        private HSSFColor color;
+
+        HSSFColorPredefined(int index, int index2, int rgb) {
+            this.color = new HSSFColor(index, index2, new java.awt.Color(rgb));
+        }
+
+        /**
+         * @see HSSFColor#getIndex()
+         */
+        public short getIndex() {
+            return color.getIndex();
+        }
+
+        /**
+         * @see HSSFColor#getIndex2()
+         */
+        public short getIndex2() {
+            return color.getIndex2();
+        }
+
+        /**
+         * @see HSSFColor#getTriplet()
+         */
+        public short [] getTriplet() {
+            return color.getTriplet();
+        }
+
+        /**
+         * @see HSSFColor#getHexString()
+         */
+        public String getHexString() {
+            return color.getHexString();
+        }
+        
+        /**
+         * @return (a copy of) the HSSFColor assigned to the enum
+         */
+        public HSSFColor getColor() {
+            return new HSSFColor(getIndex(), getIndex2(), color.color);
+        }
+    }
+
 
     /** Creates a new instance of HSSFColor */
-    public HSSFColor()
-    {
+    public HSSFColor() {
+        // automatic index
+        this(0x40, -1, java.awt.Color.BLACK);
+    }
+
+    public HSSFColor(int index, int index2, java.awt.Color color) {
+        this.index = index;
+        this.index2 = index2;
+        this.color = color;
     }
 
     /**
@@ -49,7 +168,7 @@ public class HSSFColor implements Color {
      *
      * @return a Map containing all colours keyed by <tt>Integer</tt> excel-style palette indexes
      */
-    public final static Map<Integer,HSSFColor> getIndexHash() {
+    public static final synchronized Map<Integer,HSSFColor> getIndexHash() {
         if(indexHash == null) {
            indexHash = Collections.unmodifiableMap( createColorsByIndexMap() );
         }
@@ -62,85 +181,27 @@ public class HSSFColor implements Color {
      *  the table, then call {@link #getIndexHash()} which returns a
      *  statically cached imuatable map of colours.
      */
-    public final static Map<Integer,HSSFColor> getMutableIndexHash() {
+    public static final Map<Integer,HSSFColor> getMutableIndexHash() {
        return createColorsByIndexMap();
     }
 
     private static Map<Integer,HSSFColor> createColorsByIndexMap() {
-        HSSFColor[] colors = getAllColors();
-        Map<Integer,HSSFColor> result = new HashMap<Integer,HSSFColor>(colors.length * 3 / 2);
-
-        for (int i = 0; i < colors.length; i++) {
-            HSSFColor color = colors[i];
-
-            Integer index1 = Integer.valueOf(color.getIndex());
-            if (result.containsKey(index1)) {
-                HSSFColor prevColor = result.get(index1);
-                throw new RuntimeException("Dup color index (" + index1
-                        + ") for colors (" + prevColor.getClass().getName()
-                        + "),(" + color.getClass().getName() + ")");
-            }
-            result.put(index1, color);
-        }
+        Map<HSSFColorPredefined,HSSFColor> eList = mapEnumToColorClass();
+        Map<Integer,HSSFColor> result = new HashMap<Integer,HSSFColor>(eList.size() * 3 / 2);
 
-        for (int i = 0; i < colors.length; i++) {
-            HSSFColor color = colors[i];
-            Integer index2 = getIndex2(color);
-            if (index2 == null) {
-                // most colors don't have a second index
-                continue;
+        for (Map.Entry<HSSFColorPredefined,HSSFColor> colorRef : eList.entrySet()) {
+            Integer index1 = (int)colorRef.getKey().getIndex();
+            if (!result.containsKey(index1)) {
+                result.put(index1, colorRef.getValue());
+            }
+            Integer index2 = (int)colorRef.getKey().getIndex2();
+            if (index2 != -1 && !result.containsKey(index2)) {
+                result.put(index2, colorRef.getValue());
             }
-//            if (result.containsKey(index2)) {
-//                if (false) { // Many of the second indexes clash
-//                    HSSFColor prevColor = (HSSFColor)result.get(index2);
-//                    throw new RuntimeException("Dup color index (" + index2
-//                            + ") for colors (" + prevColor.getClass().getName()
-//                            + "),(" + color.getClass().getName() + ")");
-//                }
-//            }
-            result.put(index2, color);
         }
         return result;
     }
 
-    private static Integer getIndex2(HSSFColor color) {
-
-        Field f;
-        try {
-            f = color.getClass().getDeclaredField("index2");
-        } catch (NoSuchFieldException e) {
-            // can happen because not all colors have a second index
-            return null;
-        }
-
-        Short s;
-        try {
-            s = (Short) f.get(color);
-        } catch (IllegalArgumentException e) {
-            throw new RuntimeException(e);
-        } catch (IllegalAccessException e) {
-            throw new RuntimeException(e);
-        }
-        return Integer.valueOf(s.intValue());
-    }
-
-    private static HSSFColor[] getAllColors() {
-
-        return new HSSFColor[] {
-                new BLACK(), new BROWN(), new OLIVE_GREEN(), new DARK_GREEN(),
-                new DARK_TEAL(), new DARK_BLUE(), new INDIGO(), new GREY_80_PERCENT(),
-                new ORANGE(), new DARK_YELLOW(), new GREEN(), new TEAL(), new BLUE(),
-                new BLUE_GREY(), new GREY_50_PERCENT(), new RED(), new LIGHT_ORANGE(), new LIME(),
-                new SEA_GREEN(), new AQUA(), new LIGHT_BLUE(), new VIOLET(), new GREY_40_PERCENT(),
-                new PINK(), new GOLD(), new YELLOW(), new BRIGHT_GREEN(), new TURQUOISE(),
-                new DARK_RED(), new SKY_BLUE(), new PLUM(), new GREY_25_PERCENT(), new ROSE(),
-                new LIGHT_YELLOW(), new LIGHT_GREEN(), new LIGHT_TURQUOISE(), new PALE_BLUE(),
-                new LAVENDER(), new WHITE(), new CORNFLOWER_BLUE(), new LEMON_CHIFFON(),
-                new MAROON(), new ORCHID(), new CORAL(), new ROYAL_BLUE(),
-                new LIGHT_CORNFLOWER_BLUE(), new TAN(),
-        };
-    }
-
     /**
      * this function returns all colors in a hastable.  Its not implemented as a
      * static member/staticly initialized because that would be dirty in a
@@ -156,35 +217,97 @@ public class HSSFColor implements Color {
     }
 
     private static Map<String,HSSFColor> createColorsByHexStringMap() {
-        HSSFColor[] colors = getAllColors();
-        Map<String,HSSFColor> result = new HashMap<String,HSSFColor>(colors.length * 3 / 2);
-
-        for (int i = 0; i < colors.length; i++) {
-            HSSFColor color = colors[i];
-
-            String hexString = color.getHexString();
-            if (result.containsKey(hexString)) {
-               HSSFColor other = result.get(hexString);
-                throw new RuntimeException(
-                               "Dup color hexString (" + hexString
-                        + ") for color (" + color.getClass().getName() + ") - "
-                        + " already taken by (" + other.getClass().getName() + ")"
-                );
+        Map<HSSFColorPredefined,HSSFColor> eList = mapEnumToColorClass();
+        Map<String,HSSFColor> result = new HashMap<String,HSSFColor>(eList.size());
+
+        for (Map.Entry<HSSFColorPredefined,HSSFColor> colorRef : eList.entrySet()) {
+            String hexString = colorRef.getKey().getHexString();
+            if (!result.containsKey(hexString)) {
+                result.put(hexString, colorRef.getValue());
             }
-            result.put(hexString, color);
         }
         return result;
     }
 
     /**
-     * returns color standard palette index (0x08)
+     * Maps the Enums to the HSSFColor subclasses, in cases of user code evaluating the classname
+     * 
+     * @deprecated in 3.16 - remove mapping when subclasses are removed and access
+     *  HSSFColorPredfined.values() directly (but exclude AUTOMATIC)
+     */
+    @Deprecated
+    @Removal(version="3.18")
+    private static synchronized Map<HSSFColorPredefined,HSSFColor> mapEnumToColorClass() {
+        if (enumList == null) {
+            enumList = new EnumMap<HSSFColorPredefined,HSSFColor>(HSSFColorPredefined.class);
+            // AUTOMATIC is not add to list
+            enumList.put(HSSFColorPredefined.BLACK, new BLACK());
+            enumList.put(HSSFColorPredefined.BROWN, new BROWN());
+            enumList.put(HSSFColorPredefined.OLIVE_GREEN, new OLIVE_GREEN());
+            enumList.put(HSSFColorPredefined.DARK_GREEN, new DARK_GREEN());
+            enumList.put(HSSFColorPredefined.DARK_TEAL, new DARK_TEAL());
+            enumList.put(HSSFColorPredefined.DARK_BLUE, new DARK_BLUE());
+            enumList.put(HSSFColorPredefined.INDIGO, new INDIGO());
+            enumList.put(HSSFColorPredefined.GREY_80_PERCENT, new GREY_80_PERCENT());
+            enumList.put(HSSFColorPredefined.ORANGE, new ORANGE());
+            enumList.put(HSSFColorPredefined.DARK_YELLOW, new DARK_YELLOW());
+            enumList.put(HSSFColorPredefined.GREEN, new GREEN());
+            enumList.put(HSSFColorPredefined.TEAL, new TEAL());
+            enumList.put(HSSFColorPredefined.BLUE, new BLUE());
+            enumList.put(HSSFColorPredefined.BLUE_GREY, new BLUE_GREY());
+            enumList.put(HSSFColorPredefined.GREY_50_PERCENT, new GREY_50_PERCENT());
+            enumList.put(HSSFColorPredefined.RED, new RED());
+            enumList.put(HSSFColorPredefined.LIGHT_ORANGE, new LIGHT_ORANGE());
+            enumList.put(HSSFColorPredefined.LIME, new LIME());
+            enumList.put(HSSFColorPredefined.SEA_GREEN, new SEA_GREEN());
+            enumList.put(HSSFColorPredefined.AQUA, new AQUA());
+            enumList.put(HSSFColorPredefined.LIGHT_BLUE, new LIGHT_BLUE());
+            enumList.put(HSSFColorPredefined.VIOLET, new VIOLET());
+            enumList.put(HSSFColorPredefined.GREY_40_PERCENT, new GREY_40_PERCENT());
+            enumList.put(HSSFColorPredefined.PINK, new PINK());
+            enumList.put(HSSFColorPredefined.GOLD, new GOLD());
+            enumList.put(HSSFColorPredefined.YELLOW, new YELLOW());
+            enumList.put(HSSFColorPredefined.BRIGHT_GREEN, new BRIGHT_GREEN());
+            enumList.put(HSSFColorPredefined.TURQUOISE, new TURQUOISE());
+            enumList.put(HSSFColorPredefined.DARK_RED, new DARK_RED());
+            enumList.put(HSSFColorPredefined.SKY_BLUE, new SKY_BLUE());
+            enumList.put(HSSFColorPredefined.PLUM, new PLUM());
+            enumList.put(HSSFColorPredefined.GREY_25_PERCENT, new GREY_25_PERCENT());
+            enumList.put(HSSFColorPredefined.ROSE, new ROSE());
+            enumList.put(HSSFColorPredefined.LIGHT_YELLOW, new LIGHT_YELLOW());
+            enumList.put(HSSFColorPredefined.LIGHT_GREEN, new LIGHT_GREEN());
+            enumList.put(HSSFColorPredefined.LIGHT_TURQUOISE, new LIGHT_TURQUOISE());
+            enumList.put(HSSFColorPredefined.PALE_BLUE, new PALE_BLUE());
+            enumList.put(HSSFColorPredefined.LAVENDER, new LAVENDER());
+            enumList.put(HSSFColorPredefined.WHITE, new WHITE());
+            enumList.put(HSSFColorPredefined.CORNFLOWER_BLUE, new CORNFLOWER_BLUE());
+            enumList.put(HSSFColorPredefined.LEMON_CHIFFON, new LEMON_CHIFFON());
+            enumList.put(HSSFColorPredefined.MAROON, new MAROON());
+            enumList.put(HSSFColorPredefined.ORCHID, new ORCHID());
+            enumList.put(HSSFColorPredefined.CORAL, new CORAL());
+            enumList.put(HSSFColorPredefined.ROYAL_BLUE, new ROYAL_BLUE());
+            enumList.put(HSSFColorPredefined.LIGHT_CORNFLOWER_BLUE, new LIGHT_CORNFLOWER_BLUE());
+            enumList.put(HSSFColorPredefined.TAN, new TAN());
+        }
+        return enumList;
+    }
+
+    /**
+     * returns color standard palette index
      * @return index to the standard palette
      */
 
-    public short getIndex()
-    {
-        // this will be overridden by the specific color subclass
-        return BLACK.index;
+    public short getIndex() {
+        return (short)index;
+    }
+
+    /**
+     * returns alternative color standard palette index
+     * @return alternative index to the standard palette, if -1 this index is not defined
+     */
+
+    public short getIndex2() {
+        return (short)index2;
     }
 
     /**
@@ -192,10 +315,8 @@ public class HSSFColor implements Color {
      * @return  triplet representation like that in Excel
      */
 
-    public short [] getTriplet()
-    {
-        // this will be overridden by the specific color subclass
-        return BLACK.triplet;
+    public short [] getTriplet() {
+        return new short[] { (short)color.getRed(), (short)color.getGreen(), (short)color.getBlue() };
     }
 
     /**
@@ -203,12 +324,12 @@ public class HSSFColor implements Color {
      * @return a hex string exactly like a gnumeric triplet
      */
 
-    public String getHexString()
-    {
-        // this will be overridden by the specific color subclass
-        return BLACK.hexString;
+    public String getHexString() {
+        return (Integer.toHexString(color.getRed()*0x101) + ":" +
+               Integer.toHexString(color.getGreen()*0x101) + ":" +
+               Integer.toHexString(color.getBlue()*0x101)).toUpperCase(Locale.ROOT);
     }
-    
+
     /**
      * Checked type cast <tt>color</tt> to an HSSFColor.
      *
@@ -227,1491 +348,689 @@ public class HSSFColor implements Color {
     }
 
     /**
-     * Class BLACK
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class BLACK
-        extends HSSFColor
-    {
-        public final static short   index     = 0x8;
-        public final static short[] triplet   =
-        {
-            0, 0, 0
-        };
-        public final static String  hexString = "0:0:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
+    @Deprecated
+    @Removal(version="3.18")
+    private static class HSSFColorRef extends HSSFColor {
+        HSSFColorRef(HSSFColorPredefined colorEnum) {
+            super(colorEnum.getIndex(), colorEnum.getIndex2(), colorEnum.color.color);
         }
     }
 
     /**
-     * Class BROWN
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class BROWN
-        extends HSSFColor
-    {
-        public final static short   index     = 0x3c;
-        public final static short[] triplet   =
-        {
-            153, 51, 0
-        };
-        public final static String  hexString = "9999:3333:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class BLACK extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.BLACK;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public BLACK() { super(ref); }
     }
 
     /**
-     * Class OLIVE_GREEN
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public static class OLIVE_GREEN
-        extends HSSFColor
-    {
-        public final static short   index     = 0x3b;
-        public final static short[] triplet   =
-        {
-            51, 51, 0
-        };
-        public final static String  hexString = "3333:3333:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class BROWN extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.BROWN;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public BROWN() { super(ref); }
     }
 
     /**
-     * Class DARK_GREEN
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class DARK_GREEN
-        extends HSSFColor
-    {
-        public final static short   index     = 0x3a;
-        public final static short[] triplet   =
-        {
-            0, 51, 0
-        };
-        public final static String  hexString = "0:3333:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class OLIVE_GREEN extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.OLIVE_GREEN;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public OLIVE_GREEN() { super(ref); }
     }
 
     /**
-     * Class DARK_TEAL
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class DARK_TEAL
-        extends HSSFColor
-    {
-        public final static short   index     = 0x38;
-        public final static short[] triplet   =
-        {
-            0, 51, 102
-        };
-        public final static String  hexString = "0:3333:6666";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class DARK_GREEN extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.DARK_GREEN;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public DARK_GREEN() { super(ref); }
     }
 
     /**
-     * Class DARK_BLUE
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class DARK_BLUE
-        extends HSSFColor
-    {
-        public final static short   index     = 0x12;
-        public final static short   index2    = 0x20;
-        public final static short[] triplet   =
-        {
-            0, 0, 128
-        };
-        public final static String  hexString = "0:0:8080";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class DARK_TEAL extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.DARK_TEAL;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public DARK_TEAL() { super(ref); }
     }
 
     /**
-     * Class INDIGO
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class INDIGO
-        extends HSSFColor
-    {
-        public final static short   index     = 0x3e;
-        public final static short[] triplet   =
-        {
-            51, 51, 153
-        };
-        public final static String  hexString = "3333:3333:9999";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class DARK_BLUE extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.DARK_BLUE;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public DARK_BLUE() { super(ref); }
     }
 
     /**
-     * Class GREY_80_PERCENT
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class GREY_80_PERCENT
-        extends HSSFColor
-    {
-        public final static short   index     = 0x3f;
-        public final static short[] triplet   =
-        {
-            51, 51, 51
-        };
-        public final static String  hexString = "3333:3333:3333";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class INDIGO extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.INDIGO;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public INDIGO() { super(ref); }
     }
 
     /**
-     * Class DARK_RED
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class DARK_RED
-        extends HSSFColor
-    {
-        public final static short   index     = 0x10;
-        public final static short   index2    = 0x25;
-        public final static short[] triplet   =
-        {
-            128, 0, 0
-        };
-        public final static String  hexString = "8080:0:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class GREY_80_PERCENT extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.GREY_80_PERCENT;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public GREY_80_PERCENT() { super(ref); }
     }
 
     /**
-     * Class ORANGE
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class ORANGE
-        extends HSSFColor
-    {
-        public final static short   index     = 0x35;
-        public final static short[] triplet   =
-        {
-            255, 102, 0
-        };
-        public final static String  hexString = "FFFF:6666:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class DARK_RED extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.DARK_RED;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public DARK_RED() { super(ref); }
     }
 
     /**
-     * Class DARK_YELLOW
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class DARK_YELLOW
-        extends HSSFColor
-    {
-        public final static short   index     = 0x13;
-        public final static short[] triplet   =
-        {
-            128, 128, 0
-        };
-        public final static String  hexString = "8080:8080:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class ORANGE extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.ORANGE;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public ORANGE() { super(ref); }
     }
 
     /**
-     * Class GREEN
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class GREEN
-        extends HSSFColor
-    {
-        public final static short   index     = 0x11;
-        public final static short[] triplet   =
-        {
-            0, 128, 0
-        };
-        public final static String  hexString = "0:8080:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class DARK_YELLOW extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.DARK_YELLOW;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public DARK_YELLOW() { super(ref); }
     }
 
     /**
-     * Class TEAL
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class TEAL
-        extends HSSFColor
-    {
-        public final static short   index     = 0x15;
-        public final static short   index2    = 0x26;
-        public final static short[] triplet   =
-        {
-            0, 128, 128
-        };
-        public final static String  hexString = "0:8080:8080";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class GREEN extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.GREEN;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public GREEN() { super(ref); }
     }
 
     /**
-     * Class BLUE
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class BLUE
-        extends HSSFColor
-    {
-        public final static short   index     = 0xc;
-        public final static short   index2    = 0x27;
-        public final static short[] triplet   =
-        {
-            0, 0, 255
-        };
-        public final static String  hexString = "0:0:FFFF";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class TEAL extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.TEAL;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public TEAL() { super(ref); }
     }
 
     /**
-     * Class BLUE_GREY
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class BLUE_GREY
-        extends HSSFColor
-    {
-        public final static short   index     = 0x36;
-        public final static short[] triplet   =
-        {
-            102, 102, 153
-        };
-        public final static String  hexString = "6666:6666:9999";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class BLUE extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.BLUE;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public BLUE() { super(ref); }
     }
 
     /**
-     * Class GREY_50_PERCENT
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class GREY_50_PERCENT
-        extends HSSFColor
-    {
-        public final static short   index     = 0x17;
-        public final static short[] triplet   =
-        {
-            128, 128, 128
-        };
-        public final static String  hexString = "8080:8080:8080";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class BLUE_GREY extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.BLUE_GREY;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public BLUE_GREY() { super(ref); }
     }
 
     /**
-     * Class RED
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class RED
-        extends HSSFColor
-    {
-        public final static short   index     = 0xa;
-        public final static short[] triplet   =
-        {
-            255, 0, 0
-        };
-        public final static String  hexString = "FFFF:0:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class GREY_50_PERCENT extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.GREY_50_PERCENT;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public GREY_50_PERCENT() { super(ref); }
     }
 
     /**
-     * Class LIGHT_ORANGE
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class LIGHT_ORANGE
-        extends HSSFColor
-    {
-        public final static short   index     = 0x34;
-        public final static short[] triplet   =
-        {
-            255, 153, 0
-        };
-        public final static String  hexString = "FFFF:9999:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class RED extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.RED;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public RED() { super(ref); }
     }
 
     /**
-     * Class LIME
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class LIME
-        extends HSSFColor
-    {
-        public final static short   index     = 0x32;
-        public final static short[] triplet   =
-        {
-            153, 204, 0
-        };
-        public final static String  hexString = "9999:CCCC:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class LIGHT_ORANGE extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.LIGHT_ORANGE;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public LIGHT_ORANGE() { super(ref); }
     }
 
     /**
-     * Class SEA_GREEN
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class SEA_GREEN
-        extends HSSFColor
-    {
-        public final static short   index     = 0x39;
-        public final static short[] triplet   =
-        {
-            51, 153, 102
-        };
-        public final static String  hexString = "3333:9999:6666";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class LIME extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.LIME;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public LIME() { super(ref); }
     }
 
     /**
-     * Class AQUA
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class AQUA
-        extends HSSFColor
-    {
-        public final static short   index     = 0x31;
-        public final static short[] triplet   =
-        {
-            51, 204, 204
-        };
-        public final static String  hexString = "3333:CCCC:CCCC";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class SEA_GREEN extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.SEA_GREEN;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public SEA_GREEN() { super(ref); }
     }
 
     /**
-     * Class LIGHT_BLUE
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class LIGHT_BLUE
-        extends HSSFColor
-    {
-        public final static short   index     = 0x30;
-        public final static short[] triplet   =
-        {
-            51, 102, 255
-        };
-        public final static String  hexString = "3333:6666:FFFF";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class AQUA extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.AQUA;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public AQUA() { super(ref); }
     }
 
     /**
-     * Class VIOLET
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class VIOLET
-        extends HSSFColor
-    {
-        public final static short   index     = 0x14;
-        public final static short   index2    = 0x24;
-        public final static short[] triplet   =
-        {
-            128, 0, 128
-        };
-        public final static String  hexString = "8080:0:8080";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class LIGHT_BLUE extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.LIGHT_BLUE;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public LIGHT_BLUE() { super(ref); }
     }
 
     /**
-     * Class GREY_40_PERCENT
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class GREY_40_PERCENT
-        extends HSSFColor
-    {
-        public final static short   index     = 0x37;
-        public final static short[] triplet   =
-        {
-            150, 150, 150
-        };
-        public final static String  hexString = "9696:9696:9696";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class VIOLET extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.VIOLET;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public VIOLET() { super(ref); }
     }
 
     /**
-     * Class PINK
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class PINK
-        extends HSSFColor
-    {
-        public final static short   index     = 0xe;
-        public final static short   index2    = 0x21;
-        public final static short[] triplet   =
-        {
-            255, 0, 255
-        };
-        public final static String  hexString = "FFFF:0:FFFF";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class GREY_40_PERCENT extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.GREY_40_PERCENT;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public GREY_40_PERCENT() { super(ref); }
     }
 
     /**
-     * Class GOLD
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class GOLD
-        extends HSSFColor
-    {
-        public final static short   index     = 0x33;
-        public final static short[] triplet   =
-        {
-            255, 204, 0
-        };
-        public final static String  hexString = "FFFF:CCCC:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class PINK extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.PINK;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public PINK() { super(ref); }
     }
 
     /**
-     * Class YELLOW
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class YELLOW
-        extends HSSFColor
-    {
-        public final static short   index     = 0xd;
-        public final static short   index2    = 0x22;
-        public final static short[] triplet   =
-        {
-            255, 255, 0
-        };
-        public final static String  hexString = "FFFF:FFFF:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class GOLD extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.GOLD;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public GOLD() { super(ref); }
     }
 
     /**
-     * Class BRIGHT_GREEN
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class BRIGHT_GREEN
-        extends HSSFColor
-    {
-        public final static short   index     = 0xb;
-        public final static short   index2    = 0x23;
-        public final static short[] triplet   =
-        {
-            0, 255, 0
-        };
-        public final static String  hexString = "0:FFFF:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class YELLOW extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.YELLOW;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public YELLOW() { super(ref); }
     }
 
     /**
-     * Class TURQUOISE
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class TURQUOISE
-        extends HSSFColor
-    {
-        public final static short   index     = 0xf;
-        public final static short   index2    = 0x23;
-        public final static short[] triplet   =
-        {
-            0, 255, 255
-        };
-        public final static String  hexString = "0:FFFF:FFFF";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class BRIGHT_GREEN extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.BRIGHT_GREEN;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public BRIGHT_GREEN() { super(ref); }
     }
 
     /**
-     * Class SKY_BLUE
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class SKY_BLUE
-        extends HSSFColor
-    {
-        public final static short   index     = 0x28;
-        public final static short[] triplet   =
-        {
-            0, 204, 255
-        };
-        public final static String  hexString = "0:CCCC:FFFF";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class TURQUOISE extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.TURQUOISE;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public TURQUOISE() { super(ref); }
     }
 
     /**
-     * Class PLUM
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class PLUM
-        extends HSSFColor
-    {
-        public final static short   index     = 0x3d;
-        public final static short   index2    = 0x19;
-        public final static short[] triplet   =
-        {
-            153, 51, 102
-        };
-        public final static String  hexString = "9999:3333:6666";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class SKY_BLUE extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.SKY_BLUE;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public SKY_BLUE() { super(ref); }
     }
 
     /**
-     * Class GREY_25_PERCENT
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class GREY_25_PERCENT
-        extends HSSFColor
-    {
-        public final static short   index     = 0x16;
-        public final static short[] triplet   =
-        {
-            192, 192, 192
-        };
-        public final static String  hexString = "C0C0:C0C0:C0C0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class PLUM extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.PLUM;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public PLUM() { super(ref); }
     }
 
     /**
-     * Class ROSE
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class ROSE
-        extends HSSFColor
-    {
-        public final static short   index     = 0x2d;
-        public final static short[] triplet   =
-        {
-            255, 153, 204
-        };
-        public final static String  hexString = "FFFF:9999:CCCC";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class GREY_25_PERCENT extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.GREY_25_PERCENT;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public GREY_25_PERCENT() { super(ref); }
     }
 
     /**
-     * Class TAN
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class TAN
-        extends HSSFColor
-    {
-        public final static short   index     = 0x2f;
-        public final static short[] triplet   =
-        {
-            255, 204, 153
-        };
-        public final static String  hexString = "FFFF:CCCC:9999";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class ROSE extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.ROSE;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public ROSE() { super(ref); }
     }
 
     /**
-     * Class LIGHT_YELLOW
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class LIGHT_YELLOW
-        extends HSSFColor
-    {
-        public final static short   index     = 0x2b;
-        public final static short[] triplet   =
-        {
-            255, 255, 153
-        };
-        public final static String  hexString = "FFFF:FFFF:9999";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class TAN extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.TAN;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public TAN() { super(ref); }
     }
 
     /**
-     * Class LIGHT_GREEN
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class LIGHT_GREEN
-        extends HSSFColor
-    {
-        public final static short   index     = 0x2a;
-        public final static short[] triplet   =
-        {
-            204, 255, 204
-        };
-        public final static String  hexString = "CCCC:FFFF:CCCC";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class LIGHT_YELLOW extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.LIGHT_YELLOW;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public LIGHT_YELLOW() { super(ref); }
     }
 
     /**
-     * Class LIGHT_TURQUOISE
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class LIGHT_TURQUOISE
-        extends HSSFColor
-    {
-        public final static short   index     = 0x29;
-        public final static short   index2    = 0x1b;
-        public final static short[] triplet   =
-        {
-            204, 255, 255
-        };
-        public final static String  hexString = "CCCC:FFFF:FFFF";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class LIGHT_GREEN extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.LIGHT_GREEN;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public LIGHT_GREEN() { super(ref); }
     }
 
     /**
-     * Class PALE_BLUE
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class PALE_BLUE
-        extends HSSFColor
-    {
-        public final static short   index     = 0x2c;
-        public final static short[] triplet   =
-        {
-            153, 204, 255
-        };
-        public final static String  hexString = "9999:CCCC:FFFF";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class LIGHT_TURQUOISE extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.LIGHT_TURQUOISE;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public LIGHT_TURQUOISE() { super(ref); }
     }
 
     /**
-     * Class LAVENDER
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class LAVENDER
-        extends HSSFColor
-    {
-        public final static short   index     = 0x2e;
-        public final static short[] triplet   =
-        {
-            204, 153, 255
-        };
-        public final static String  hexString = "CCCC:9999:FFFF";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class PALE_BLUE extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.PALE_BLUE;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public PALE_BLUE() { super(ref); }
     }
 
     /**
-     * Class WHITE
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-
-    public final static class WHITE
-        extends HSSFColor
-    {
-        public final static short   index     = 0x9;
-        public final static short[] triplet   =
-        {
-            255, 255, 255
-        };
-        public final static String  hexString = "FFFF:FFFF:FFFF";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class LAVENDER extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.LAVENDER;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public LAVENDER() { super(ref); }
     }
 
     /**
-     * Class CORNFLOWER_BLUE
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-    public final static class CORNFLOWER_BLUE
-        extends HSSFColor
-    {
-        public final static short   index     = 0x18;
-        public final static short[] triplet   =
-        {
-            153, 153, 255
-        };
-        public final static String  hexString = "9999:9999:FFFF";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class WHITE extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.WHITE;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public WHITE() { super(ref); }
     }
 
-
     /**
-     * Class LEMON_CHIFFON
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-    public final static class LEMON_CHIFFON
-        extends HSSFColor
-    {
-        public final static short   index     = 0x1a;
-        public final static short[] triplet   =
-        {
-            255, 255, 204
-        };
-        public final static String  hexString = "FFFF:FFFF:CCCC";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class CORNFLOWER_BLUE extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.CORNFLOWER_BLUE;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public CORNFLOWER_BLUE() { super(ref); }
     }
 
     /**
-     * Class MAROON
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-    public final static class MAROON
-        extends HSSFColor
-    {
-        public final static short   index     = 0x19;
-        public final static short[] triplet   =
-        {
-            127, 0, 0
-        };
-        public final static String  hexString = "8000:0:0";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class LEMON_CHIFFON extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.LEMON_CHIFFON;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public LEMON_CHIFFON() { super(ref); }
     }
 
     /**
-     * Class ORCHID
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-    public final static class ORCHID
-        extends HSSFColor
-    {
-        public final static short   index     = 0x1c;
-        public final static short[] triplet   =
-        {
-            102, 0, 102
-        };
-        public final static String  hexString = "6666:0:6666";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class MAROON extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.MAROON;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public MAROON() { super(ref); }
     }
 
     /**
-     * Class CORAL
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-    public final static class CORAL
-        extends HSSFColor
-    {
-        public final static short   index     = 0x1d;
-        public final static short[] triplet   =
-        {
-            255, 128, 128
-        };
-        public final static String  hexString = "FFFF:8080:8080";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class ORCHID extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.ORCHID;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public ORCHID() { super(ref); }
     }
 
     /**
-     * Class ROYAL_BLUE
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-    public final static class ROYAL_BLUE
-        extends HSSFColor
-    {
-        public final static short   index     = 0x1e;
-        public final static short[] triplet   =
-        {
-            0, 102, 204
-        };
-        public final static String  hexString = "0:6666:CCCC";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class CORAL extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.CORAL;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public CORAL() { super(ref); }
     }
 
     /**
-     * Class LIGHT_CORNFLOWER_BLUE
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-    public final static class LIGHT_CORNFLOWER_BLUE
-        extends HSSFColor
-    {
-        public final static short   index     = 0x1f;
-        public final static short[] triplet   =
-        {
-            204, 204, 255
-        };
-        public final static String  hexString = "CCCC:CCCC:FFFF";
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return triplet;
-        }
-
-        public String getHexString()
-        {
-            return hexString;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class ROYAL_BLUE extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.ROYAL_BLUE;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public ROYAL_BLUE() { super(ref); }
     }
 
     /**
-     * Special Default/Normal/Automatic color.
-     * <p><i>Note:</i> This class is NOT in the default Map returned by HSSFColor.
-     * The index is a special case which is interpreted in the various setXXXColor calls.
-     *
-     * @author Jason
-     *
+     * @deprecated use {@link HSSFColorPredefined} instead
      */
-    public final static class AUTOMATIC extends HSSFColor
-    {
-        private static HSSFColor instance = new AUTOMATIC();
-
-        public final static short   index     = 0x40;
-
-        public short getIndex()
-        {
-            return index;
-        }
-
-        public short [] getTriplet()
-        {
-            return BLACK.triplet;
-        }
+    @Deprecated
+    @Removal(version="3.18")
+    public static class LIGHT_CORNFLOWER_BLUE extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.LIGHT_CORNFLOWER_BLUE;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public LIGHT_CORNFLOWER_BLUE() { super(ref); }
+    }
 
-        public String getHexString()
-        {
-            return BLACK.hexString;
-        }
+    /**
+     * @deprecated use {@link HSSFColorPredefined} instead
+     */
+    @Deprecated
+    @Removal(version="3.18")
+    public static class AUTOMATIC extends HSSFColorRef {
+        private static final HSSFColorPredefined ref = HSSFColorPredefined.AUTOMATIC;
+        public static final short index = ref.getIndex();
+        public static final int index2 = ref.getIndex2();
+        public static final short[] triplet = ref.getTriplet();
+        public static final String hexString = ref.getHexString();
+        public AUTOMATIC() { super(ref); }
 
         public static HSSFColor getInstance() {
-          return instance;
+            return ref.color;
         }
     }
 }
index 3b2591e89cbcf9484855b159699177633c0bffb8..acaddd0f6b50e33788611fefa7211629eb8b8856 100644 (file)
 package org.apache.poi.hssf.record;
 
 import static org.junit.Assert.assertArrayEquals;
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
 
 import org.apache.poi.hssf.HSSFITestDataProvider;
 import org.apache.poi.hssf.record.CFRuleBase.ComparisonOperator;
@@ -28,44 +33,49 @@ import org.apache.poi.hssf.record.cf.FontFormatting;
 import org.apache.poi.hssf.record.cf.PatternFormatting;
 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.hssf.util.HSSFColor.HSSFColorPredefined;
 import org.apache.poi.ss.formula.ptg.Ptg;
 import org.apache.poi.ss.formula.ptg.RefNPtg;
 import org.apache.poi.ss.formula.ptg.RefPtg;
 import org.apache.poi.ss.usermodel.ConditionalFormattingThreshold.RangeType;
 import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet;
 import org.apache.poi.util.LittleEndian;
+import org.junit.Test;
+
+import junit.framework.AssertionFailedError;
 
 /**
  * Tests the serialization and deserialization of the TestCFRuleRecord
  * class works correctly.
  */
-@SuppressWarnings("resource")
-public final class TestCFRuleRecord extends TestCase {
-    public void testConstructors () {
+public final class TestCFRuleRecord {
+    @Test
+    public void testConstructors () throws IOException {
         HSSFWorkbook workbook = new HSSFWorkbook();
         HSSFSheet sheet = workbook.createSheet();
 
         CFRuleRecord rule1 = CFRuleRecord.create(sheet, "7");
-        assertEquals(CFRuleRecord.CONDITION_TYPE_FORMULA, rule1.getConditionType());
+        assertEquals(CFRuleBase.CONDITION_TYPE_FORMULA, rule1.getConditionType());
         assertEquals(ComparisonOperator.NO_COMPARISON, rule1.getComparisonOperation());
         assertNotNull(rule1.getParsedExpression1());
         assertSame(Ptg.EMPTY_PTG_ARRAY, rule1.getParsedExpression2());
 
         CFRuleRecord rule2 = CFRuleRecord.create(sheet, ComparisonOperator.BETWEEN, "2", "5");
-        assertEquals(CFRuleRecord.CONDITION_TYPE_CELL_VALUE_IS, rule2.getConditionType());
+        assertEquals(CFRuleBase.CONDITION_TYPE_CELL_VALUE_IS, rule2.getConditionType());
         assertEquals(ComparisonOperator.BETWEEN, rule2.getComparisonOperation());
         assertNotNull(rule2.getParsedExpression1());
         assertNotNull(rule2.getParsedExpression2());
 
         CFRuleRecord rule3 = CFRuleRecord.create(sheet, ComparisonOperator.EQUAL, null, null);
-        assertEquals(CFRuleRecord.CONDITION_TYPE_CELL_VALUE_IS, rule3.getConditionType());
+        assertEquals(CFRuleBase.CONDITION_TYPE_CELL_VALUE_IS, rule3.getConditionType());
         assertEquals(ComparisonOperator.EQUAL, rule3.getComparisonOperation());
         assertSame(Ptg.EMPTY_PTG_ARRAY, rule3.getParsedExpression2());
         assertSame(Ptg.EMPTY_PTG_ARRAY, rule3.getParsedExpression2());
+        workbook.close();
     }
 
-    public void testCreateCFRuleRecord() {
+    @Test
+    public void testCreateCFRuleRecord() throws IOException {
         HSSFWorkbook workbook = new HSSFWorkbook();
         HSSFSheet sheet = workbook.createSheet();
         CFRuleRecord record = CFRuleRecord.create(sheet, "7");
@@ -87,13 +97,14 @@ public final class TestCFRuleRecord extends TestCase {
         // Compare
         assertEquals("Output size", recordData.length+4, output.length); //includes sid+recordlength
 
-        for (int i = 0; i < recordData.length;i++)
-        {
+        for (int i = 0; i < recordData.length;i++) {
             assertEquals("CFRuleRecord doesn't match", recordData[i], output[i+4]);
         }
+        workbook.close();
     }
 
-    public void testCreateCFRule12Record() {
+    @Test
+    public void testCreateCFRule12Record() throws IOException {
         HSSFWorkbook workbook = new HSSFWorkbook();
         HSSFSheet sheet = workbook.createSheet();
         CFRule12Record record = CFRule12Record.create(sheet, "7");
@@ -115,13 +126,14 @@ public final class TestCFRuleRecord extends TestCase {
         // Compare
         assertEquals("Output size", recordData.length+4, output.length); //includes sid+recordlength
 
-        for (int i = 0; i < recordData.length;i++)
-        {
+        for (int i = 0; i < recordData.length;i++) {
             assertEquals("CFRule12Record doesn't match", recordData[i], output[i+4]);
         }
+        workbook.close();
     }
 
-    public void testCreateIconCFRule12Record() {
+    @Test
+    public void testCreateIconCFRule12Record() throws IOException {
         HSSFWorkbook workbook = new HSSFWorkbook();
         HSSFSheet sheet = workbook.createSheet();
         CFRule12Record record = CFRule12Record.create(sheet, IconSet.GREY_5_ARROWS);
@@ -155,10 +167,10 @@ public final class TestCFRuleRecord extends TestCase {
         // Compare
         assertEquals("Output size", recordData.length+4, output.length); //includes sid+recordlength
 
-        for (int i = 0; i < recordData.length;i++)
-        {
+        for (int i = 0; i < recordData.length;i++) {
             assertEquals("CFRule12Record doesn't match", recordData[i], output[i+4]);
         }
+        workbook.close();
     }
     
     private void testCFRuleRecord(CFRuleRecord record) {
@@ -227,11 +239,11 @@ public final class TestCFRuleRecord extends TestCase {
     }
 
     private void testPatternFormattingAccessors(PatternFormatting patternFormatting) {
-        patternFormatting.setFillBackgroundColor(HSSFColor.GREEN.index);
-        assertEquals(HSSFColor.GREEN.index,patternFormatting.getFillBackgroundColor());
+        patternFormatting.setFillBackgroundColor(HSSFColorPredefined.GREEN.getIndex());
+        assertEquals(HSSFColorPredefined.GREEN.getIndex(),patternFormatting.getFillBackgroundColor());
 
-        patternFormatting.setFillForegroundColor(HSSFColor.INDIGO.index);
-        assertEquals(HSSFColor.INDIGO.index,patternFormatting.getFillForegroundColor());
+        patternFormatting.setFillForegroundColor(HSSFColorPredefined.INDIGO.getIndex());
+        assertEquals(HSSFColorPredefined.INDIGO.getIndex(),patternFormatting.getFillForegroundColor());
 
         patternFormatting.setFillPattern(PatternFormatting.DIAMONDS);
         assertEquals(PatternFormatting.DIAMONDS,patternFormatting.getFillPattern());
@@ -258,24 +270,24 @@ public final class TestCFRuleRecord extends TestCase {
         borderFormatting.setBorderTop(BorderFormatting.BORDER_HAIR);
         assertEquals(BorderFormatting.BORDER_HAIR, borderFormatting.getBorderTop());
 
-        borderFormatting.setBottomBorderColor(HSSFColor.AQUA.index);
-        assertEquals(HSSFColor.AQUA.index, borderFormatting.getBottomBorderColor());
+        borderFormatting.setBottomBorderColor(HSSFColorPredefined.AQUA.getIndex());
+        assertEquals(HSSFColorPredefined.AQUA.getIndex(), borderFormatting.getBottomBorderColor());
 
-        borderFormatting.setDiagonalBorderColor(HSSFColor.RED.index);
-        assertEquals(HSSFColor.RED.index, borderFormatting.getDiagonalBorderColor());
+        borderFormatting.setDiagonalBorderColor(HSSFColorPredefined.RED.getIndex());
+        assertEquals(HSSFColorPredefined.RED.getIndex(), borderFormatting.getDiagonalBorderColor());
 
         assertFalse(borderFormatting.isForwardDiagonalOn());
         borderFormatting.setForwardDiagonalOn(true);
         assertTrue(borderFormatting.isForwardDiagonalOn());
 
-        borderFormatting.setLeftBorderColor(HSSFColor.BLACK.index);
-        assertEquals(HSSFColor.BLACK.index, borderFormatting.getLeftBorderColor());
+        borderFormatting.setLeftBorderColor(HSSFColorPredefined.BLACK.getIndex());
+        assertEquals(HSSFColorPredefined.BLACK.getIndex(), borderFormatting.getLeftBorderColor());
 
-        borderFormatting.setRightBorderColor(HSSFColor.BLUE.index);
-        assertEquals(HSSFColor.BLUE.index, borderFormatting.getRightBorderColor());
+        borderFormatting.setRightBorderColor(HSSFColorPredefined.BLUE.getIndex());
+        assertEquals(HSSFColorPredefined.BLUE.getIndex(), borderFormatting.getRightBorderColor());
 
-        borderFormatting.setTopBorderColor(HSSFColor.GOLD.index);
-        assertEquals(HSSFColor.GOLD.index, borderFormatting.getTopBorderColor());
+        borderFormatting.setTopBorderColor(HSSFColorPredefined.GOLD.getIndex());
+        assertEquals(HSSFColorPredefined.GOLD.getIndex(), borderFormatting.getTopBorderColor());
     }
 
 
@@ -378,7 +390,8 @@ public final class TestCFRuleRecord extends TestCase {
         assertTrue(fontFormatting.isUnderlineTypeModified());
     }
 
-    public void testWrite() {
+    @Test
+    public void testWrite() throws IOException {
         HSSFWorkbook workbook = new HSSFWorkbook();
         HSSFSheet sheet = workbook.createSheet();
         CFRuleRecord rr = CFRuleRecord.create(sheet, ComparisonOperator.BETWEEN, "5", "10");
@@ -397,6 +410,7 @@ public final class TestCFRuleRecord extends TestCase {
         assertEquals("undocumented flags should be 0000", 0, flags & 0x03C00000); // Otherwise Excel gets unhappy
         // check all remaining flag bits (some are not well understood yet)
         assertEquals(0x203FFFFF, flags);
+        workbook.close();
     }
 
     private static final byte[] DATA_REFN = {
@@ -413,6 +427,7 @@ public final class TestCFRuleRecord extends TestCase {
     /**
      * tRefN and tAreaN tokens must be preserved when re-serializing conditional format formulas
      */
+    @Test
     public void testReserializeRefNTokens() {
 
         RecordInputStream is = TestcaseRecordInputStream.create(CFRuleRecord.sid, DATA_REFN);
@@ -431,7 +446,8 @@ public final class TestCFRuleRecord extends TestCase {
         TestcaseRecordInputStream.confirmRecordEncoding(CFRuleRecord.sid, DATA_REFN, data);
     }
     
-    public void testBug53691() {
+    @Test
+    public void testBug53691() throws IOException {
         HSSFWorkbook workbook = new HSSFWorkbook();
         HSSFSheet sheet = workbook.createSheet();
 
@@ -442,12 +458,16 @@ public final class TestCFRuleRecord extends TestCase {
         byte [] serializedRecord = record.serialize();
         byte [] serializedClone = clone.serialize();
         assertArrayEquals(serializedRecord, serializedClone);
+        workbook.close();
     }
     
-    public void testBug57231_rewrite() {
-        HSSFWorkbook wb = HSSFITestDataProvider.instance.openSampleWorkbook("57231_MixedGasReport.xls");
-        assertEquals(7, wb.getNumberOfSheets());
-        wb = HSSFITestDataProvider.instance.writeOutAndReadBack(wb);
-        assertEquals(7, wb.getNumberOfSheets());
+    @Test
+    public void testBug57231_rewrite() throws IOException {
+        HSSFWorkbook wb1 = HSSFITestDataProvider.instance.openSampleWorkbook("57231_MixedGasReport.xls");
+        assertEquals(7, wb1.getNumberOfSheets());
+        HSSFWorkbook wb2 = HSSFITestDataProvider.instance.writeOutAndReadBack(wb1);
+        assertEquals(7, wb2.getNumberOfSheets());
+        wb2.close();
+        wb1.close();
     }
 }
index 9fd3c2ad47cd017e82d64f9b6b4b859483b478e0..321b6e31296ed90ab3cf73219e8b739061d4ee64 100644 (file)
@@ -27,8 +27,6 @@ import org.junit.Test;
 
 /**
  * Verifies that custom palette editing works correctly
- *
- * @author Brian Sanders (bsanders at risklabs dot com)
  */
 public final class TestPaletteRecord {
 
@@ -46,8 +44,8 @@ public final class TestPaletteRecord {
             HSSFColor c = entry.getValue();
             short[] rgbTriplet = c.getTriplet();
             byte[] paletteTriplet = palette.getColor((short) index);
-            String msg = "Expected HSSFColor constant to match PaletteRecord at index 0x"
-                + Integer.toHexString(c.getIndex());
+            String msg = "Expected HSSFColor constant to match PaletteRecord at index" + (index == c.getIndex2() ? "2" : "") + " 0x"
+                + Integer.toHexString(index);
             assertEquals(msg, rgbTriplet[0], paletteTriplet[0] & 0xff);
             assertEquals(msg, rgbTriplet[1], paletteTriplet[1] & 0xff);
             assertEquals(msg, rgbTriplet[2], paletteTriplet[2] & 0xff);
index fb2ae45431aed62436e777ed8e00da54e0b7da81..f2f572458d973ada14421c5eb281f36fb2d272fa 100644 (file)
 package org.apache.poi.hssf.usermodel;
 
 import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
 
 import java.awt.Color;
 import java.io.IOException;
@@ -27,21 +31,19 @@ import java.util.Map;
 import org.apache.poi.hssf.HSSFTestDataSamples;
 import org.apache.poi.hssf.record.PaletteRecord;
 import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
+import org.apache.poi.ss.usermodel.FillPatternType;
+import org.apache.poi.ss.usermodel.Font;
+import org.junit.Before;
 import org.junit.Test;
 
-import junit.framework.TestCase;
-
-/**
- * @author Brian Sanders (bsanders at risklabs dot com)
- */
-public final class TestHSSFPalette extends TestCase {
+public final class TestHSSFPalette {
     private PaletteRecord _palette;
     private HSSFPalette _hssfPalette;
 
 
-    @Override
-    public void setUp()
-    {
+    @Before
+    public void setUp() {
         _palette = new PaletteRecord();
         _hssfPalette = new HSSFPalette(_palette);
     }
@@ -49,6 +51,7 @@ public final class TestHSSFPalette extends TestCase {
     /**
      * Verifies that a custom palette can be created, saved, and reloaded
      */
+    @Test
     public void testCustomPalette() {
         //reading sample xls
         HSSFWorkbook book = HSSFTestDataSamples.openSampleWorkbook("Simple.xls");
@@ -62,9 +65,9 @@ public final class TestHSSFPalette extends TestCase {
         book = HSSFTestDataSamples.writeOutAndReadBack(book);
 
         palette = book.getCustomPalette();
-        HSSFColor color = palette.getColor(HSSFColor.CORAL.index);  //unmodified
+        HSSFColor color = palette.getColor(HSSFColorPredefined.CORAL.getIndex());  //unmodified
         assertNotNull("Unexpected null in custom palette (unmodified index)", color);
-        short[] expectedRGB = HSSFColor.CORAL.triplet;
+        short[] expectedRGB = HSSFColorPredefined.CORAL.getTriplet();
         short[] actualRGB = color.getTriplet();
         String msg = "Expected palette position to remain unmodified";
         assertEquals(msg, expectedRGB[0], actualRGB[0]);
@@ -83,6 +86,7 @@ public final class TestHSSFPalette extends TestCase {
     /**
      * Uses the palette from cell stylings
      */
+    @Test
     public void testPaletteFromCellColours() {
         HSSFWorkbook book = HSSFTestDataSamples.openSampleWorkbook("SimpleWithColours.xls");
 
@@ -98,8 +102,8 @@ public final class TestHSSFPalette extends TestCase {
         assertEquals("I'm plain", cellA.getStringCellValue());
         assertEquals(64, cellA.getCellStyle().getFillForegroundColor());
         assertEquals(64, cellA.getCellStyle().getFillBackgroundColor());
-        assertEquals(HSSFFont.COLOR_NORMAL, cellA.getCellStyle().getFont(book).getColor());
-        assertEquals(0, cellA.getCellStyle().getFillPattern());
+        assertEquals(Font.COLOR_NORMAL, cellA.getCellStyle().getFont(book).getColor());
+        assertEquals(FillPatternType.NO_FILL, cellA.getCellStyle().getFillPatternEnum());
         assertEquals("0:0:0", p.getColor((short)64).getHexString());
         assertEquals(null, p.getColor((short)32767));
 
@@ -108,7 +112,7 @@ public final class TestHSSFPalette extends TestCase {
         assertEquals(64, cellB.getCellStyle().getFillForegroundColor());
         assertEquals(64, cellB.getCellStyle().getFillBackgroundColor());
         assertEquals(10, cellB.getCellStyle().getFont(book).getColor());
-        assertEquals(0, cellB.getCellStyle().getFillPattern());
+        assertEquals(FillPatternType.NO_FILL, cellB.getCellStyle().getFillPatternEnum());
         assertEquals("0:0:0", p.getColor((short)64).getHexString());
         assertEquals("FFFF:0:0", p.getColor((short)10).getHexString());
 
@@ -117,7 +121,7 @@ public final class TestHSSFPalette extends TestCase {
         assertEquals(11, cellC.getCellStyle().getFillForegroundColor());
         assertEquals(64, cellC.getCellStyle().getFillBackgroundColor());
         assertEquals(10, cellC.getCellStyle().getFont(book).getColor());
-        assertEquals(1, cellC.getCellStyle().getFillPattern());
+        assertEquals(FillPatternType.SOLID_FOREGROUND, cellC.getCellStyle().getFillPatternEnum());
         assertEquals("0:FFFF:0", p.getColor((short)11).getHexString());
         assertEquals("FFFF:0:0", p.getColor((short)10).getHexString());
 
@@ -126,7 +130,7 @@ public final class TestHSSFPalette extends TestCase {
         assertEquals(13, cellD.getCellStyle().getFillForegroundColor());
         assertEquals(64, cellD.getCellStyle().getFillBackgroundColor());
         assertEquals(14, cellD.getCellStyle().getFont(book).getColor());
-        assertEquals(0, cellD.getCellStyle().getFillPattern());
+        assertEquals(FillPatternType.NO_FILL, cellD.getCellStyle().getFillPatternEnum());
         assertEquals("FFFF:FFFF:0", p.getColor((short)13).getHexString());
         assertEquals("FFFF:0:FFFF", p.getColor((short)14).getHexString());
 
@@ -135,11 +139,12 @@ public final class TestHSSFPalette extends TestCase {
         assertEquals(13, cellE.getCellStyle().getFillForegroundColor());
         assertEquals(64, cellE.getCellStyle().getFillBackgroundColor());
         assertEquals(14, cellE.getCellStyle().getFont(book).getColor());
-        assertEquals(0, cellE.getCellStyle().getFillPattern());
+        assertEquals(FillPatternType.NO_FILL, cellE.getCellStyle().getFillPatternEnum());
         assertEquals("FFFF:FFFF:0", p.getColor((short)13).getHexString());
         assertEquals("FFFF:0:FFFF", p.getColor((short)14).getHexString());
     }
 
+    @Test
     public void testFindSimilar() throws IOException {
         HSSFWorkbook book = new HSSFWorkbook();
         HSSFPalette p = book.getCustomPalette();
@@ -230,6 +235,7 @@ public final class TestHSSFPalette extends TestCase {
      * Verifies that the generated gnumeric-format string values match the
      * hardcoded values in the HSSFColor default color palette
      */
+    @Test
     public void testGnumericStrings() {
         compareToDefaults(new ColorComparator() {
             @Override
@@ -243,6 +249,7 @@ public final class TestHSSFPalette extends TestCase {
     /**
      * Verifies that the palette handles invalid palette indexes
      */
+    @Test
     public void testBadIndexes() {
         //too small
         _hssfPalette.setColorAtIndex((short) 2, (byte) 255, (byte) 255, (byte) 255);
@@ -275,6 +282,7 @@ public final class TestHSSFPalette extends TestCase {
         }
     }
 
+    @Test
     public void testAddColor() {
         try
         {
index 6faba7846138cfe9f90f6b25f87e6f924292fa35..7e71fb2de1c4c67665ecffed04663946f6a767b6 100644 (file)
 
 package org.apache.poi.hssf.util;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
 
 /**
  * Collects all tests for org.apache.poi.hssf.util.
- * 
- * @author Josh Micich
  */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+    TestAreaReference.class,
+    TestCellReference.class,
+    TestHSSFColor.class,
+    TestRKUtil.class
+})
 public class AllHSSFUtilTests {
-       
-       public static Test suite() {
-               TestSuite result = new TestSuite(AllHSSFUtilTests.class.getName());
-               result.addTestSuite(TestAreaReference.class);
-               // result.addTestSuite(TestCellReference.class); //converted to junit4
-               result.addTestSuite(TestHSSFColor.class);
-               result.addTestSuite(TestRKUtil.class);
-               return result;
-       }
 }
index 319a7449ecfed3f497cac3e5471d8754ed760c95..be35ee268d770e22e5293694dde7a3aec823389b 100644 (file)
 
 package org.apache.poi.hssf.util;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
 import java.util.Map;
 
-import junit.framework.TestCase;
-/**
- * @author Nick Burch
- */
-public final class TestHSSFColor extends TestCase {
-       public void testBasics() {
+import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
+import org.junit.Test;
+
+public final class TestHSSFColor {
+    @Test
+    public void testBasics() {
                assertNotNull(HSSFColor.YELLOW.class);
-               assertTrue(HSSFColor.YELLOW.index > 0);
-               assertTrue(HSSFColor.YELLOW.index2 > 0);
+               assertTrue(HSSFColorPredefined.YELLOW.getIndex() > 0);
+               assertTrue(HSSFColorPredefined.YELLOW.getIndex2() > 0);
        }
        
+    @Test
        public void testContents() {
-               assertEquals(3, HSSFColor.YELLOW.triplet.length);
-               assertEquals(255, HSSFColor.YELLOW.triplet[0]);
-               assertEquals(255, HSSFColor.YELLOW.triplet[1]);
-               assertEquals(0, HSSFColor.YELLOW.triplet[2]);
+           short[] triplet = HSSFColorPredefined.YELLOW.getTriplet();
+               assertEquals(3, triplet.length);
+               assertEquals(255, triplet[0]);
+               assertEquals(255, triplet[1]);
+               assertEquals(0, triplet[2]);
                
-               assertEquals("FFFF:FFFF:0", HSSFColor.YELLOW.hexString);
+               assertEquals("FFFF:FFFF:0", HSSFColorPredefined.YELLOW.getHexString());
        }
        
+    @Test
        public void testTrippletHash() {
                Map<String, HSSFColor> tripplets = HSSFColor.getTripletHash();
                
                assertEquals(
                                HSSFColor.MAROON.class,
-                               tripplets.get(HSSFColor.MAROON.hexString).getClass()
+                               tripplets.get(HSSFColorPredefined.MAROON.getHexString()).getClass()
                );
                assertEquals(
                                HSSFColor.YELLOW.class,
-                               tripplets.get(HSSFColor.YELLOW.hexString).getClass()
+                               tripplets.get(HSSFColorPredefined.YELLOW.getHexString()).getClass()
                );
        }
 }