/** Copyright 2004 Universite Libre de Bruxelles Department of Informatics and
* Networks- Faculty of Engineering BioMaze Project.
*/
package org.alcatel.jsce.servicecreation.graph.component.figure;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
import org.eclipse.swt.graphics.Color;
/**
* @author Skhiri dit Gabouje Sabri
* BioMaze, ULB
*
* <p>
* Provide an easy way to build a color. This class maintains an cache of colour, if a color that was
* already asked, it does'nt rebuilt it.
* </p>
*/
public class ColorManager {
private static ColorManager instance = null;
private Map colorMap = null;
private ColorManager() {
colorMap = new HashMap();
colorMap.put(IGlyph.COLOR_NONE, new Color(null, 255, 255, 255));
}
public Color getColor(String colorName) {
Color color = (Color) colorMap.get(colorName);
if (color == null) {
color = createColor(colorName);
}
return color;
}
public Color createColor(int r, int g, int b){
String colorDef = r+","+g+","+b;
Color temp = (Color) colorMap.get(colorDef);
if(temp ==null){
temp = new Color(null, r, g,b );
colorMap.put(colorDef, temp);
}
return temp;
}
/**
* @param colorName The nolor name
* @return The corresponding @link Color
*/
private Color createColor(String colorName) {
Color color;
if(colorName.charAt(0)== '#'){
color = extractcode(colorName.substring(1));
if(color==null){
color = (Color) colorMap.get(IGlyph.COLOR_NONE);
System.out.println("***************Color Manager No color could be set !! for "+ colorName);
}else{
colorMap.put(colorName, color);
}
}else{
if (colorName.equals(IGlyph.COLOR_GREEN)) {
color = new Color(null, 85, 201, 85);
colorMap.put(IGlyph.COLOR_GREEN, color);
} else {
if (colorName.equals(IGlyph.COLOR_RED)) {
color = new Color(null, 249, 133, 133);
colorMap.put(IGlyph.COLOR_RED, color);
} else {
if (colorName.equals(IGlyph.COLOR_BLACK)) {
color = new Color(null, 0, 0, 0);
colorMap.put(IGlyph.COLOR_BLACK, color);
} else {
if (colorName.equals(IGlyph.COLOR_CYAN)) {
color = new Color(null, 140, 140, 248);
colorMap.put(IGlyph.COLOR_CYAN, color);
} else {
if (colorName.equals(IGlyph.COLOR_BLUE)) {
color = new Color(null, 0, 40, 202);
colorMap.put(IGlyph.COLOR_BLUE, color);
} else {
if (colorName.equals(IGlyph.COLOR_GRAY)) {
color = new Color(null, 156, 156, 156);
colorMap.put(IGlyph.COLOR_GRAY, color);
} else {
color = (Color) colorMap.get(IGlyph.COLOR_NONE);
System.out.println("***************Color Manager No color could be set !! for "+ colorName);
}
}
}
}
}
}
}
return color;
}
/**
*@param string
*@return
*/
private Color extractcode(String code) {
/*int index1 = code.indexOf(' ');
String tmp = code.substring(index1);
int index2 = tmp.indexOf(' ');
String redS = code.substring(0,index1);
String greenS = code.substring(index1, index2);
String blueS = code.substring(index2, code.length());*/
StringTokenizer st = new java.util.StringTokenizer(code);
List colors = new ArrayList();
while(st.hasMoreTokens()) {
String tmp = st.nextToken();
int indexO = tmp.indexOf('0');
if(indexO >-1){
tmp.replace('0', ' ');
}
colors.add(tmp);
}
if(colors.size()>2){
String redS = (String) colors.get(0);
String greenS = (String) colors.get(1);
String blueS = (String) colors.get(2);
//System.out.println(" COLOR MANAGER : " + Integer.parseInt(redS) + " "+ Integer.parseInt(greenS) + " "+ Integer.parseInt(blueS) );
return new Color(null, Integer.parseInt(redS),Integer.parseInt(greenS), Integer.parseInt(blueS));
}else return null;
}
/**
* Delete and dispose all the colour.
*/
public void dispose() {
Set keys = colorMap.keySet();
for (Iterator iter = keys.iterator(); iter.hasNext();) {
String key = (String) iter.next();
((Color) colorMap.get(key)).dispose();
}
colorMap.clear();
}
public static ColorManager getInstance(){
if(instance==null){
instance = new ColorManager();
}
return instance;
}
}