/******************************************************************************* * Copyright (c) 2002-2006 Innoopract Informationssysteme GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Innoopract Informationssysteme GmbH - initial API and implementation ******************************************************************************/ package com.w4t.util; import java.util.Vector; /** <p>Provides a mapping between common color names (like 'red', 'green' etc.) * and HTML RGB color hex strings.</p> */ public class ColorMapper { /** <p>the private singleton instance of ColorMapper.</p> */ private static ColorMapper _instance; /* the internal data structures of this ColorMapper singleton. The mappings * are in Vectors, which costs time for looping over them, but enables * searching ignoring case, which would not be possible with HashMaps. */ private Vector netscapeColors; private Vector standardColors; /** <p>constructs the singleton instance of ColorMapper.</p> */ private ColorMapper() { initStandardColors(); initNetscapeColors(); } /** <p>returns the correct hex string containing the RGB value for the * passed color name.</p> * <p>This ColorMapper knows standard HTML color like 'red', 'black' etc. * as well as the extended Netscape colors like 'darkmagenta', * 'lightpink' etc. Case is ignored. If no color could be * found, the passed colorNamed is returned. */ public static String getHexRGB( final String colorName ) { return getInstance().map( colorName ); } // helping methods ////////////////// /** returns a reference to the singleton instance of ColorMapper. */ private synchronized static ColorMapper getInstance() { if( _instance == null ) { _instance = new ColorMapper(); } return _instance; } /** performs the actual mapping. */ private String map( final String colorName ) { String result = colorName; if( !isHex( colorName ) ) { String stripped = strip( colorName ); boolean found = false; // html standard colors for( int i = 0; !found && i < standardColors.size(); i++ ) { Color color = ( Color )standardColors.get( i ); if( color.getName().equalsIgnoreCase( stripped ) ) { result = color.getHex(); found = true; } } // netscape colors for( int i = 0; !found && i < netscapeColors.size(); i++ ) { Color color = ( Color )netscapeColors.get( i ); if( color.getName().equalsIgnoreCase( stripped ) ) { result = color.getHex(); found = true; } } } return result; } private boolean isHex( final String colorName ) { boolean result = true; String value = strip( colorName ); try { Integer.parseInt( value, 16 ); } catch( Exception ex ) { result = false; } return result; } private String strip( final String colorName ) { return ( colorName.startsWith( "#" ) ) ? colorName.substring( 1 ) : colorName; } private void initStandardColors() { standardColors = new Vector(); standardColors.add( new Color( "black", "#000000" ) ); standardColors.add( new Color( "gray", "#808080" ) ); standardColors.add( new Color( "maroon", "#800000" ) ); standardColors.add( new Color( "red", "#FF0000" ) ); standardColors.add( new Color( "green", "#008000" ) ); standardColors.add( new Color( "lime", "#00FF00" ) ); standardColors.add( new Color( "olive", "#808000" ) ); standardColors.add( new Color( "yellow", "#FFFF00" ) ); standardColors.add( new Color( "navy", "#000080" ) ); standardColors.add( new Color( "blue", "#0000FF" ) ); standardColors.add( new Color( "purple", "#800080" ) ); standardColors.add( new Color( "fuchsia", "#FF00FF" ) ); standardColors.add( new Color( "teal", "#008080" ) ); standardColors.add( new Color( "aqua", "#00FFFF" ) ); standardColors.add( new Color( "silver", "#C0C0C0" ) ); standardColors.add( new Color( "white", "#FFFFFF" ) ); } private void initNetscapeColors() { netscapeColors = new Vector(); netscapeColors.add( new Color( "aliceblue", "#F0F8FF" ) ); netscapeColors.add( new Color( "antiquewhite", "#FAEBD7" ) ); netscapeColors.add( new Color( "aquamarine", "#7FFFD4" ) ); netscapeColors.add( new Color( "azure", "#F0FFFF" ) ); netscapeColors.add( new Color( "beige", "#F5F5DC" ) ); netscapeColors.add( new Color( "blueviolet", "#8A2BE2" ) ); netscapeColors.add( new Color( "brown", "#A52A2A" ) ); netscapeColors.add( new Color( "burlywood", "#DEB887" ) ); netscapeColors.add( new Color( "cadetblue", "#5F9EA0" ) ); netscapeColors.add( new Color( "chartreuse", "#7FFF00" ) ); netscapeColors.add( new Color( "chocolate", "#D2691E" ) ); netscapeColors.add( new Color( "coral", "#FF7F50" ) ); netscapeColors.add( new Color( "cornflowerblue", "#6495ED" ) ); netscapeColors.add( new Color( "cornsilk", "#FFF8DC" ) ); netscapeColors.add( new Color( "crimson", "#DC143C" ) ); netscapeColors.add( new Color( "darkblue", "#00008B" ) ); netscapeColors.add( new Color( "darkcyan", "#008B8B" ) ); netscapeColors.add( new Color( "darkgoldenrod", "#B8860B" ) ); netscapeColors.add( new Color( "darkgray", "#A9A9A9" ) ); netscapeColors.add( new Color( "darkgreen", "#006400" ) ); netscapeColors.add( new Color( "darkkhaki", "#BDB76B" ) ); netscapeColors.add( new Color( "darkmagenta", "#8B008B" ) ); netscapeColors.add( new Color( "darkolivegreen", "#556B2F" ) ); netscapeColors.add( new Color( "darkorange", "#FF8C00" ) ); netscapeColors.add( new Color( "darkorchid", "#9932CC" ) ); netscapeColors.add( new Color( "darkred", "#8B0000" ) ); netscapeColors.add( new Color( "darksalmon", "#E9967A" ) ); netscapeColors.add( new Color( "darkseagreen", "#8FBC8F" ) ); netscapeColors.add( new Color( "darkslateblue", "#483D8B" ) ); netscapeColors.add( new Color( "darkslategray", "#2F4F4F" ) ); netscapeColors.add( new Color( "darkturquoise", "#00CED1" ) ); netscapeColors.add( new Color( "darkviolet", "#9400D3" ) ); netscapeColors.add( new Color( "deeppink", "#FF1493" ) ); netscapeColors.add( new Color( "deepskyblue", "#00BFFF" ) ); netscapeColors.add( new Color( "dimgray", "#696969" ) ); netscapeColors.add( new Color( "dodgerblue", "#1E90FF" ) ); netscapeColors.add( new Color( "firebrick", "#B22222" ) ); netscapeColors.add( new Color( "floralwhite", "#FFFAF0" ) ); netscapeColors.add( new Color( "forestgreen", "#228B22" ) ); netscapeColors.add( new Color( "gainsboro", "#DCDCDC" ) ); netscapeColors.add( new Color( "ghostwhite", "#F8F8FF" ) ); netscapeColors.add( new Color( "gold", "#FFD700" ) ); netscapeColors.add( new Color( "goldenrod", "#DAA520" ) ); netscapeColors.add( new Color( "greenyellow", "#ADFF2F" ) ); netscapeColors.add( new Color( "honeydew", "#F0FFF0" ) ); netscapeColors.add( new Color( "hotpink", "#FF69B4" ) ); netscapeColors.add( new Color( "indianred", "#CD5C5C" ) ); netscapeColors.add( new Color( "indigo", "#4B0082" ) ); netscapeColors.add( new Color( "ivory", "#FFFFF0" ) ); netscapeColors.add( new Color( "khaki", "#F0E68C" ) ); netscapeColors.add( new Color( "lavender", "#E6E6FA" ) ); netscapeColors.add( new Color( "lavenderblush", "#FFF0F5" ) ); netscapeColors.add( new Color( "lawngreen", "#7CFC00" ) ); netscapeColors.add( new Color( "lightblue", "#ADD8E6" ) ); netscapeColors.add( new Color( "lightcoral", "#F08080" ) ); netscapeColors.add( new Color( "lightcyan", "#E0FFFF" ) ); netscapeColors.add( new Color( "lightgoldenrodyellow", "#FAFAD2" ) ); netscapeColors.add( new Color( "lightgreen", "#90EE90" ) ); netscapeColors.add( new Color( "lightgrey", "#D3D3D3" ) ); netscapeColors.add( new Color( "lightpink", "#FFB6C1" ) ); netscapeColors.add( new Color( "lightsalmon", "#FFA07A" ) ); netscapeColors.add( new Color( "lightseagreen", "#20B2AA" ) ); netscapeColors.add( new Color( "lightslategray", "#778899" ) ); netscapeColors.add( new Color( "lightsteelblue", "#B0C4DE" ) ); netscapeColors.add( new Color( "lightyellow", "#FFFFE0" ) ); netscapeColors.add( new Color( "limegreen", "#32CD32" ) ); netscapeColors.add( new Color( "linen", "#FAF0E6" ) ); netscapeColors.add( new Color( "mediumaquamarine", "#66CDAA" ) ); netscapeColors.add( new Color( "mediumblue", "#0000CD" ) ); netscapeColors.add( new Color( "mediumorchid", "#BA55D3" ) ); netscapeColors.add( new Color( "mediumpurple", "#9370DB" ) ); netscapeColors.add( new Color( "mediumseagreen", "#3CB371" ) ); netscapeColors.add( new Color( "mediumslateblue", "#7B68EE" ) ); netscapeColors.add( new Color( "mediumspringgreen", "#00FA9A" ) ); netscapeColors.add( new Color( "mediumturquoise", "#48D1CC" ) ); netscapeColors.add( new Color( "mediumvioletred", "#C71585" ) ); netscapeColors.add( new Color( "midnightblue", "#191970" ) ); netscapeColors.add( new Color( "mintcream", "#F5FFFA" ) ); netscapeColors.add( new Color( "moccasin", "#FFE4B5" ) ); netscapeColors.add( new Color( "navajowhite", "#FFDEAD" ) ); netscapeColors.add( new Color( "oldlace", "#FDF5E6" ) ); netscapeColors.add( new Color( "olivedrab", "#6B8E23" ) ); netscapeColors.add( new Color( "orange", "#FFA500" ) ); netscapeColors.add( new Color( "orangered", "#FF4500" ) ); netscapeColors.add( new Color( "orchid", "#DA70D6" ) ); netscapeColors.add( new Color( "palegoldenrod", "#EEE8AA" ) ); netscapeColors.add( new Color( "palegreen", "#98FB98" ) ); netscapeColors.add( new Color( "paleturquoise", "#AFEEEE" ) ); netscapeColors.add( new Color( "palevioletred", "#DB7093" ) ); netscapeColors.add( new Color( "papayawhip", "#FFEFD5" ) ); netscapeColors.add( new Color( "peachpuff", "#FFDAB9" ) ); netscapeColors.add( new Color( "peru", "#CD853F" ) ); netscapeColors.add( new Color( "pink", "#FFC0CB" ) ); netscapeColors.add( new Color( "plum", "#DDA0DD" ) ); netscapeColors.add( new Color( "powderblue", "#B0E0E6" ) ); netscapeColors.add( new Color( "rosybrown", "#BC8F8F" ) ); netscapeColors.add( new Color( "saddlebrown", "#8B4513" ) ); netscapeColors.add( new Color( "salmon", "#FA8072" ) ); netscapeColors.add( new Color( "sandybrown", "#F4A460" ) ); netscapeColors.add( new Color( "seagreen", "#2E8B57" ) ); netscapeColors.add( new Color( "seashell", "#FFF5EE" ) ); netscapeColors.add( new Color( "sienna", "#A0522D" ) ); netscapeColors.add( new Color( "skyblue", "#87CEEB" ) ); netscapeColors.add( new Color( "slateblue", "#6A5ACD" ) ); netscapeColors.add( new Color( "slategray", "#708090" ) ); netscapeColors.add( new Color( "snow", "#FFFAFA" ) ); netscapeColors.add( new Color( "springgreen", "#00FF7F" ) ); netscapeColors.add( new Color( "tan", "#D2B48C" ) ); netscapeColors.add( new Color( "thistle", "#D8BFD8" ) ); netscapeColors.add( new Color( "tomato", "#FF6347" ) ); netscapeColors.add( new Color( "turquoise", "#40E0D0" ) ); netscapeColors.add( new Color( "violet", "#EE82EE" ) ); netscapeColors.add( new Color( "wheat", "#F5DEB3" ) ); netscapeColors.add( new Color( "whitesmoke", "#F5F5F5" ) ); netscapeColors.add( new Color( "yellowgreen", "#9ACD32" ) ); } // inner classes //////////////// /** <p>a helping class which encapsulates a color name and it's hex * string representation.</p> */ private class Color { private String name; private String hex; Color( final String name, final String hex ) { this.name = name; this.hex = hex; } String getName() { return name; } String getHex() { return hex; } } }