ColorUtilitiy.java Source code

Java tutorial

Introduction

Here is the source code for ColorUtilitiy.java

Source

/**
 * 
 * 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;
    }
}