Fix for bug 35925 - Missing HSSFColor.TAN from HashTables returned by getIndexHash() and getTripletHash()

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@659478 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Josh Micich 2008-05-23 08:55:48 +00:00
parent 172db6a58e
commit 9b8395dd61

View File

@ -15,14 +15,14 @@
limitations under the License. limitations under the License.
==================================================================== */ ==================================================================== */
package org.apache.poi.hssf.util; package org.apache.poi.hssf.util;
import java.util.*; import java.lang.reflect.Field;
import java.util.Hashtable;
/** /**
* Intends to provide support for the very evil index to triplet issue and * Intends to provide support for the very evil index to triplet issue and
* will likely replace the color contants interface for HSSF 2.0. * will likely replace the color constants interface for HSSF 2.0.
* This class contains static inner class members for representing colors. * This class contains static inner class members for representing colors.
* Each color has an index (for the standard palette in Excel (tm) ), * Each color has an index (for the standard palette in Excel (tm) ),
* native (RGB) triplet and string triplet. The string triplet is as the * native (RGB) triplet and string triplet. The string triplet is as the
@ -33,14 +33,9 @@ import java.util.*;
* @author Andrew C. Oliver (acoliver at apache dot org) * @author Andrew C. Oliver (acoliver at apache dot org)
* @author Brian Sanders (bsanders at risklabs dot com) - full default color palette * @author Brian Sanders (bsanders at risklabs dot com) - full default color palette
*/ */
public class HSSFColor {
public class HSSFColor // TODO make subclass instances immutable
{
private final static int PALETTE_SIZE = 56;
private final static int DISTINCT_COLOR_COUNT = 46;
/** Creates a new instance of HSSFColor */ /** Creates a new instance of HSSFColor */
public HSSFColor() public HSSFColor()
{ {
} }
@ -52,87 +47,86 @@ public class HSSFColor
* it takes to create it once per request but you will not hold onto it * it takes to create it once per request but you will not hold onto it
* if you have none of those requests. * if you have none of those requests.
* *
* @return a hashtable containing all colors mapped to their excel-style * @return a hashtable containing all colors keyed by <tt>Integer</tt> excel-style palette indexes
* pallette index
*/ */
public final static Hashtable getIndexHash() { public final static Hashtable getIndexHash() {
Hashtable hash = new Hashtable(PALETTE_SIZE); return createColorsByIndexMap();
}
hash.put(new Integer(HSSFColor.BLACK.index), new HSSFColor.BLACK()); private static Hashtable createColorsByIndexMap() {
hash.put(new Integer(HSSFColor.BROWN.index), new HSSFColor.BROWN()); HSSFColor[] colors = getAllColors();
hash.put(new Integer(HSSFColor.OLIVE_GREEN.index), Hashtable result = new Hashtable(colors.length * 3 / 2);
new HSSFColor.OLIVE_GREEN());
hash.put(new Integer(HSSFColor.DARK_GREEN.index), new HSSFColor.DARK_GREEN()); for (int i = 0; i < colors.length; i++) {
hash.put(new Integer(HSSFColor.DARK_TEAL.index), new HSSFColor.DARK_TEAL()); HSSFColor color = colors[i];
hash.put(new Integer(HSSFColor.DARK_BLUE.index), new HSSFColor.DARK_BLUE());
hash.put(new Integer(HSSFColor.DARK_BLUE.index2), new HSSFColor.DARK_BLUE()); Integer index1 = new Integer(color.getIndex());
hash.put(new Integer(HSSFColor.INDIGO.index), new HSSFColor.INDIGO()); if (result.containsKey(index1)) {
hash.put(new Integer(HSSFColor.GREY_80_PERCENT.index), HSSFColor prevColor = (HSSFColor)result.get(index1);
new HSSFColor.GREY_80_PERCENT()); throw new RuntimeException("Dup color index (" + index1
hash.put(new Integer(HSSFColor.ORANGE.index), new HSSFColor.ORANGE()); + ") for colors (" + prevColor.getClass().getName()
hash.put(new Integer(HSSFColor.DARK_YELLOW.index), + "),(" + color.getClass().getName() + ")");
new HSSFColor.DARK_YELLOW()); }
hash.put(new Integer(HSSFColor.GREEN.index), new HSSFColor.GREEN()); result.put(index1, color);
hash.put(new Integer(HSSFColor.TEAL.index), new HSSFColor.TEAL()); }
hash.put(new Integer(HSSFColor.TEAL.index2), new HSSFColor.TEAL());
hash.put(new Integer(HSSFColor.BLUE.index), new HSSFColor.BLUE()); for (int i = 0; i < colors.length; i++) {
hash.put(new Integer(HSSFColor.BLUE.index2), new HSSFColor.BLUE()); HSSFColor color = colors[i];
hash.put(new Integer(HSSFColor.BLUE_GREY.index), new HSSFColor.BLUE_GREY()); Integer index2 = getIndex2(color);
hash.put(new Integer(HSSFColor.GREY_50_PERCENT.index), if (index2 == null) {
new HSSFColor.GREY_50_PERCENT()); // most colors don't have a second index
hash.put(new Integer(HSSFColor.RED.index), new HSSFColor.RED()); continue;
hash.put(new Integer(HSSFColor.LIGHT_ORANGE.index), }
new HSSFColor.LIGHT_ORANGE()); if (result.containsKey(index2)) {
hash.put(new Integer(HSSFColor.LIME.index), new HSSFColor.LIME()); if (false) { // Many of the second indexes clash
hash.put(new Integer(HSSFColor.SEA_GREEN.index), new HSSFColor.SEA_GREEN()); HSSFColor prevColor = (HSSFColor)result.get(index2);
hash.put(new Integer(HSSFColor.AQUA.index), new HSSFColor.AQUA()); throw new RuntimeException("Dup color index (" + index2
hash.put(new Integer(HSSFColor.LIGHT_BLUE.index), new HSSFColor.LIGHT_BLUE()); + ") for colors (" + prevColor.getClass().getName()
hash.put(new Integer(HSSFColor.VIOLET.index), new HSSFColor.VIOLET()); + "),(" + color.getClass().getName() + ")");
hash.put(new Integer(HSSFColor.VIOLET.index2), new HSSFColor.VIOLET()); }
hash.put(new Integer(HSSFColor.GREY_40_PERCENT.index), }
new HSSFColor.GREY_40_PERCENT()); result.put(index2, color);
hash.put(new Integer(HSSFColor.PINK.index), new HSSFColor.PINK()); }
hash.put(new Integer(HSSFColor.PINK.index2), new HSSFColor.PINK()); return result;
hash.put(new Integer(HSSFColor.GOLD.index), new HSSFColor.GOLD()); }
hash.put(new Integer(HSSFColor.YELLOW.index), new HSSFColor.YELLOW());
hash.put(new Integer(HSSFColor.YELLOW.index2), new HSSFColor.YELLOW()); private static Integer getIndex2(HSSFColor color) {
hash.put(new Integer(HSSFColor.BRIGHT_GREEN.index),
new HSSFColor.BRIGHT_GREEN()); Field f;
hash.put(new Integer(HSSFColor.BRIGHT_GREEN.index2), try {
new HSSFColor.BRIGHT_GREEN()); f = color.getClass().getDeclaredField("index2");
hash.put(new Integer(HSSFColor.TURQUOISE.index), new HSSFColor.TURQUOISE()); } catch (NoSuchFieldException e) {
hash.put(new Integer(HSSFColor.TURQUOISE.index2), new HSSFColor.TURQUOISE()); // can happen because not all colors have a second index
hash.put(new Integer(HSSFColor.DARK_RED.index), new HSSFColor.DARK_RED()); return null;
hash.put(new Integer(HSSFColor.DARK_RED.index2), new HSSFColor.DARK_RED()); }
hash.put(new Integer(HSSFColor.SKY_BLUE.index), new HSSFColor.SKY_BLUE());
hash.put(new Integer(HSSFColor.PLUM.index), new HSSFColor.PLUM()); Short s;
hash.put(new Integer(HSSFColor.PLUM.index2), new HSSFColor.PLUM()); try {
hash.put(new Integer(HSSFColor.GREY_25_PERCENT.index), s = (Short) f.get(color);
new HSSFColor.GREY_25_PERCENT()); } catch (IllegalArgumentException e) {
hash.put(new Integer(HSSFColor.ROSE.index), new HSSFColor.ROSE()); throw new RuntimeException(e);
hash.put(new Integer(HSSFColor.LIGHT_YELLOW.index), } catch (IllegalAccessException e) {
new HSSFColor.LIGHT_YELLOW()); throw new RuntimeException(e);
hash.put(new Integer(HSSFColor.LIGHT_GREEN.index), }
new HSSFColor.LIGHT_GREEN()); return new Integer(s.intValue());
hash.put(new Integer(HSSFColor.LIGHT_TURQUOISE.index), }
new HSSFColor.LIGHT_TURQUOISE());
hash.put(new Integer(HSSFColor.LIGHT_TURQUOISE.index2), private static HSSFColor[] getAllColors() {
new HSSFColor.LIGHT_TURQUOISE());
hash.put(new Integer(HSSFColor.PALE_BLUE.index), new HSSFColor.PALE_BLUE()); return new HSSFColor[] {
hash.put(new Integer(HSSFColor.LAVENDER.index), new HSSFColor.LAVENDER()); new BLACK(), new BROWN(), new OLIVE_GREEN(), new DARK_GREEN(),
hash.put(new Integer(HSSFColor.WHITE.index), new HSSFColor.WHITE()); new DARK_TEAL(), new DARK_BLUE(), new INDIGO(), new GREY_80_PERCENT(),
hash.put(new Integer(HSSFColor.CORNFLOWER_BLUE.index), new ORANGE(), new DARK_YELLOW(), new GREEN(), new TEAL(), new BLUE(),
new HSSFColor.CORNFLOWER_BLUE()); new BLUE_GREY(), new GREY_50_PERCENT(), new RED(), new LIGHT_ORANGE(), new LIME(),
hash.put(new Integer(HSSFColor.LEMON_CHIFFON.index), new SEA_GREEN(), new AQUA(), new LIGHT_BLUE(), new VIOLET(), new GREY_40_PERCENT(),
new HSSFColor.LEMON_CHIFFON()); new PINK(), new GOLD(), new YELLOW(), new BRIGHT_GREEN(), new TURQUOISE(),
hash.put(new Integer(HSSFColor.MAROON.index), new HSSFColor.MAROON()); new DARK_RED(), new SKY_BLUE(), new PLUM(), new GREY_25_PERCENT(), new ROSE(),
hash.put(new Integer(HSSFColor.ORCHID.index), new HSSFColor.ORCHID()); new LIGHT_YELLOW(), new LIGHT_GREEN(), new LIGHT_TURQUOISE(), new PALE_BLUE(),
hash.put(new Integer(HSSFColor.CORAL.index), new HSSFColor.CORAL()); new LAVENDER(), new WHITE(), new CORNFLOWER_BLUE(), new LEMON_CHIFFON(),
hash.put(new Integer(HSSFColor.ROYAL_BLUE.index), new HSSFColor.ROYAL_BLUE()); new MAROON(), new ORCHID(), new CORAL(), new ROYAL_BLUE(),
hash.put(new Integer(HSSFColor.LIGHT_CORNFLOWER_BLUE.index), new LIGHT_CORNFLOWER_BLUE(), new TAN(),
new HSSFColor.LIGHT_CORNFLOWER_BLUE()); };
return hash;
} }
/** /**
@ -142,73 +136,28 @@ public class HSSFColor
* it takes to create it once per request but you will not hold onto it * it takes to create it once per request but you will not hold onto it
* if you have none of those requests. * if you have none of those requests.
* *
* @return a hashtable containing all colors mapped to their gnumeric-like * @return a hashtable containing all colors keyed by String gnumeric-like triplets
* triplet string
*/ */
public final static Hashtable getTripletHash() public final static Hashtable getTripletHash()
{ {
Hashtable hash = new Hashtable(DISTINCT_COLOR_COUNT); return createColorsByHexStringMap();
}
hash.put(HSSFColor.BLACK.hexString, new HSSFColor.BLACK()); private static Hashtable createColorsByHexStringMap() {
hash.put(HSSFColor.BROWN.hexString, new HSSFColor.BROWN()); HSSFColor[] colors = getAllColors();
hash.put(HSSFColor.OLIVE_GREEN.hexString, Hashtable result = new Hashtable(colors.length * 3 / 2);
new HSSFColor.OLIVE_GREEN());
hash.put(HSSFColor.DARK_GREEN.hexString, new HSSFColor.DARK_GREEN()); for (int i = 0; i < colors.length; i++) {
hash.put(HSSFColor.DARK_TEAL.hexString, new HSSFColor.DARK_TEAL()); HSSFColor color = colors[i];
hash.put(HSSFColor.DARK_BLUE.hexString, new HSSFColor.DARK_BLUE());
hash.put(HSSFColor.INDIGO.hexString, new HSSFColor.INDIGO()); String hexString = color.getHexString();
hash.put(HSSFColor.GREY_80_PERCENT.hexString, if (result.containsKey(hexString)) {
new HSSFColor.GREY_80_PERCENT()); throw new RuntimeException("Dup color hexString (" + hexString
hash.put(HSSFColor.ORANGE.hexString, new HSSFColor.ORANGE()); + ") for color (" + color.getClass().getName() + ")");
hash.put(HSSFColor.DARK_YELLOW.hexString, }
new HSSFColor.DARK_YELLOW()); result.put(hexString, color);
hash.put(HSSFColor.GREEN.hexString, new HSSFColor.GREEN()); }
hash.put(HSSFColor.TEAL.hexString, new HSSFColor.TEAL()); return result;
hash.put(HSSFColor.BLUE.hexString, new HSSFColor.BLUE());
hash.put(HSSFColor.BLUE_GREY.hexString, new HSSFColor.BLUE_GREY());
hash.put(HSSFColor.GREY_50_PERCENT.hexString,
new HSSFColor.GREY_50_PERCENT());
hash.put(HSSFColor.RED.hexString, new HSSFColor.RED());
hash.put(HSSFColor.LIGHT_ORANGE.hexString,
new HSSFColor.LIGHT_ORANGE());
hash.put(HSSFColor.LIME.hexString, new HSSFColor.LIME());
hash.put(HSSFColor.SEA_GREEN.hexString, new HSSFColor.SEA_GREEN());
hash.put(HSSFColor.AQUA.hexString, new HSSFColor.AQUA());
hash.put(HSSFColor.LIGHT_BLUE.hexString, new HSSFColor.LIGHT_BLUE());
hash.put(HSSFColor.VIOLET.hexString, new HSSFColor.VIOLET());
hash.put(HSSFColor.GREY_40_PERCENT.hexString,
new HSSFColor.GREY_40_PERCENT());
hash.put(HSSFColor.PINK.hexString, new HSSFColor.PINK());
hash.put(HSSFColor.GOLD.hexString, new HSSFColor.GOLD());
hash.put(HSSFColor.YELLOW.hexString, new HSSFColor.YELLOW());
hash.put(HSSFColor.BRIGHT_GREEN.hexString,
new HSSFColor.BRIGHT_GREEN());
hash.put(HSSFColor.TURQUOISE.hexString, new HSSFColor.TURQUOISE());
hash.put(HSSFColor.DARK_RED.hexString, new HSSFColor.DARK_RED());
hash.put(HSSFColor.SKY_BLUE.hexString, new HSSFColor.SKY_BLUE());
hash.put(HSSFColor.PLUM.hexString, new HSSFColor.PLUM());
hash.put(HSSFColor.GREY_25_PERCENT.hexString,
new HSSFColor.GREY_25_PERCENT());
hash.put(HSSFColor.ROSE.hexString, new HSSFColor.ROSE());
hash.put(HSSFColor.LIGHT_YELLOW.hexString,
new HSSFColor.LIGHT_YELLOW());
hash.put(HSSFColor.LIGHT_GREEN.hexString,
new HSSFColor.LIGHT_GREEN());
hash.put(HSSFColor.LIGHT_TURQUOISE.hexString,
new HSSFColor.LIGHT_TURQUOISE());
hash.put(HSSFColor.PALE_BLUE.hexString, new HSSFColor.PALE_BLUE());
hash.put(HSSFColor.LAVENDER.hexString, new HSSFColor.LAVENDER());
hash.put(HSSFColor.WHITE.hexString, new HSSFColor.WHITE());
hash.put(HSSFColor.CORNFLOWER_BLUE.hexString, new HSSFColor.CORNFLOWER_BLUE());
hash.put(HSSFColor.LEMON_CHIFFON.hexString, new HSSFColor.LEMON_CHIFFON());
hash.put(HSSFColor.MAROON.hexString, new HSSFColor.MAROON());
hash.put(HSSFColor.ORCHID.hexString, new HSSFColor.ORCHID());
hash.put(HSSFColor.CORAL.hexString, new HSSFColor.CORAL());
hash.put(HSSFColor.ROYAL_BLUE.hexString, new HSSFColor.ROYAL_BLUE());
hash.put(HSSFColor.LIGHT_CORNFLOWER_BLUE.hexString,
new HSSFColor.LIGHT_CORNFLOWER_BLUE());
return hash;
} }
/** /**