Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

Map colors into names and vice versa

/**  *   * LibSparkline : a free Java sparkline chart library  *   *  * Project Info:  http://reporting.pentaho.org/libsparkline/  *  * (C) Copyright 2008, by Larry Ogrodnek, Pentaho Corporation and Contributors.  *  * This library is free software; you can redistribute it and/or modify it under the terms  * of the Apache License 2.0.  *  * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  *  * You should have received a copy of the Apache License 2.0 along with this library;  * if not, a online version is available at http://www.apache.org/licenses/  *  * [Java is a trademark or registered trademark of Sun Microsystems, Inc.  * in the United States and other countries.]  *  * ------------  * ColorUtilitiy.java  * ------------  */ import java.awt.Color; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.HashMap; /**  * A helper class to map colors into names and vice versa.  *   * @author Thomas Morgner  */ public final class ColorUtilitiy {   private static final HashMap knownColorNamesByColor;   private static final HashMap knownColorsByName;   static {     knownColorNamesByColor = new HashMap();     knownColorsByName = new HashMap();     try {       final Field[] fields = Color.class.getFields();       for (int i = 0; i < fields.length; i++) {         final Field f = fields[i];         if (Modifier.isPublic(f.getModifiers()) && Modifier.isFinal(f.getModifiers())             && Modifier.isStatic(f.getModifiers())) {           final String name = f.getName();           final Object oColor = f.get(null);           if (oColor instanceof Color) {             knownColorNamesByColor.put(oColor, name.toLowerCase());             knownColorsByName.put(name.toLowerCase(), oColor);           }         }       }     } catch (Exception e) {       // ignore ..     }   }   /**    * Utility class constructor prevents object creation.    */   private ColorUtilitiy() {   }   /**    * Parse a String into a Color. <p/> This method will accept either a color    * name (a field name from {@link Color}, case insensitive e.g. "red"), or a    * HTML hex color string (e.g. "#ff0000" for Color.RED).    *     * @param value    *          String to parse for color name or color number.    * @return Color for s.    */   private static Color parseColor(final String value) {     if (value == null) {       return null;     }     final Object o = knownColorsByName.get(value.toLowerCase());     if (o != null) {       return (Color) o;     }     try {       // get color by hex or octal value       return Color.decode(value.trim());     } catch (NumberFormatException nfe) {       return null;     }   }   /**    * Parse a String into a Color, and returns the given default value if the    * color is not parsable. <p/> This method will accept either a color name (a    * field name from {@link Color}, case insensitive e.g. "red"), or a HTML hex    * color string (e.g. "#ff0000" for Color.RED).    *     * @param colorText    *          String to parse for color name or color number.    * @param defValue    *          the default value that should be returned if the string is not    *          parseable or null.    * @return Color for the text.    */   public static Color convertColor(final String colorText, final Color defValue) {     if (colorText == null || colorText.isEmpty()) {       return defValue;     }     final Color retval = parseColor(colorText);     if (retval == null) {       return defValue;     }     return retval;   } }