blob: 454a4c0a5954f8f88c822b03859b82a5159ca59f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2007 Oracle Corporation and others.
* 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:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.common.ui.internal.dialogfield;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
/**
* Defines a two sets: one of basic and one of extended colors. Clients extending
* this class must provide the two maps
*
* @author cbateman
*
*/
public abstract class ColorPalette
{
/**
* @param cssText
* @return the basic color matching the cssText key or null if color doesn't exist
*/
public final Color getBasicColor(String cssText) {
return (Color) getBasicColorMap().get(cssText.toLowerCase());
}
/**
* @param cssText
* @return the extended color matching the cssText key or null if color doesn't exist
*/
public final Color getExtendedColor(String cssText) {
Set keys = getExtendedColorMap().keySet();
for (Iterator iterator = keys.iterator(); iterator.hasNext();) {
String key = (String) iterator.next();
if (key.equalsIgnoreCase(cssText)) {
return (Color) getExtendedColorMap().get(key);
}
}
return null;
}
/**
* @return the map of basic colors where the key is the color name (a string)
* and the value is an RGB object
*/
public abstract Map getBasicColorMap();
/**
* @return the map of extended colors where the key is the color name (a string)
* and the value is an Color object
*/
public abstract Map getExtendedColorMap();
/**
* @param textColor
* @return same as getExtendedColor but returns value as an RGB object
*/
public final RGB getExtendedColorRGB(String textColor) {
if (textColor == null || textColor.length() == 0) {
return null;
}
Color color = getExtendedColor(textColor);
if (color != null) {
return color.getRGB();
}
if (textColor.charAt(0) == '#' && textColor.length() == 4) {
char[] rgbChars = textColor.toCharArray();
char[] fullChars = { rgbChars[0], rgbChars[1], rgbChars[1],
rgbChars[2], rgbChars[2], rgbChars[3], rgbChars[3] };
textColor = String.valueOf(fullChars);
}
if (textColor.charAt(0) == '#' && textColor.length() == 7) {
try {
int intColor = Integer.decode(textColor).intValue();
if (intColor > 0xFFFFFF || intColor < 0) {
return null;
}
int r = intColor >> 16;
int g = (intColor >> 8) & 0xFF;
int b = intColor & 0xFF;
return new RGB(r, g, b);
} catch (NumberFormatException e) {
return null;
}
}
return null;
}
/**
* @param rgb
* @return the hex string for equivalent of the rgb color
*/
public static String getStringColor(RGB rgb) {
if (rgb == null) {
return ""; //$NON-NLS-1$
}
StringBuffer buffer = new StringBuffer("#"); //$NON-NLS-1$
int[] intRGBs = new int[] { rgb.red, rgb.green, rgb.blue };
for (int i = 0; i < 3; i++) {
if (intRGBs[i] < 16) {
buffer.append("0"); //$NON-NLS-1$
}
buffer.append(Integer.toHexString(intRGBs[i]).toUpperCase());
}
return buffer.toString();
}
}