001 /*
002 * Created by IntelliJ IDEA.
003 * User: Wei Wang
004 * Date: 2002-10-22
005 * Time: 20:12:14
006 * To change this template use Options | File Templates.
007 */
008
009 package EVolve.util;
010
011 import java.awt.*;
012 import java.util.*;
013
014 public class ColorCache{
015 private HashMap colorMap;
016 private Color[] defaultColors = {
017 new Color(51,153,204), new Color(51,204,153), new Color(153,204,51),new Color(153,51,204),
018 new Color(204,51,153), new Color(204,153,51), new Color(51,204,0),new Color(51,0,204),
019 new Color(204,0,51), new Color(204,51,0), new Color(0,51,204),new Color(0,204,51),
020 new Color(204,0,204), new Color(204,204,0), new Color(0,204,204),new Color(51,153,0),
021 new Color(51,0,153), new Color(153,0,51), new Color(153,51,0),new Color(0,51,153),
022 new Color(0,153,51), new Color(153,204,0), new Color(153,0,204),new Color(0,204,153),
023 new Color(0,153,204), new Color(204,0,153), new Color(204,153,0),new Color(151,255,151),
024 new Color(255,151,151), new Color(151,151,255), new Color(204,204,255),new Color(255,204,204),
025 new Color(204,255,204), new Color(251,151,180), new Color(251,180,151),new Color(151,180,251),
026 new Color(151,251,180), new Color(180,251,151), new Color(180,151,251),new Color(145,244,45),
027 new Color(145,45,244), new Color(45,244,145), new Color(45,145,244),new Color(244,145,45),
028 new Color(244,45,145), new Color(244,145,45), new Color(0,0,255),new Color(255,0,0),
029 new Color(0,255,0), new Color(130,28,247), new Color(130,247,28),new Color(247,28,130),
030 new Color(247,130,28), new Color(28,247,130), new Color(28,130,247),new Color(0,128,255),
031 new Color(0,255,128), new Color(255,128,0), new Color(255,0,128),new Color(128,0,255),
032 new Color(255,128,0), new Color(128,255,0), new Color(187,156,26),new Color(25,250,104)
033 };
034 private int leftColor;
035
036 public ColorCache() {
037 colorMap = new HashMap();
038 leftColor = defaultColors.length -1;
039 }
040
041 private Color getRandomColor() {
042 int sum = 0;
043 int rand[] = new int[3];
044
045 if (leftColor>=0) {
046 return defaultColors[leftColor--];
047 }
048
049 do {
050 while (sum<70) {
051 for (int i=0; i<rand.length;i++) {
052 rand[i] = 500;
053 while (rand[i]>255) {
054 rand[i] = (int)(java.lang.Math.random()*10000);
055 }
056 }
057 sum = rand[0] + rand[1] + rand[2];
058 }
059 sum = 0;
060 } while (colorMap.containsValue(new Color(rand[0],rand[1],rand[2])));
061
062 return new Color(rand[0],rand[1],rand[2]);
063 }
064
065 public Color getNextColor(int methodId) {
066 Color color;
067 if (!colorMap.containsKey(new Integer(methodId))) {
068 color = getRandomColor();
069 colorMap.put(new Integer(methodId),color);
070 return color;
071 }
072 return (Color)colorMap.get(new Integer(methodId));
073 }
074
075 public int getKeyFromColor(Color color) {
076 Iterator it = colorMap.keySet().iterator();
077 int methodId = -1;
078
079 while (it.hasNext()) {
080 Integer key = (Integer)it.next();
081 if (color != ((Color)colorMap.get(key))) continue;
082
083 methodId = key.intValue();
084 return methodId;
085 }
086 return methodId;
087 }
088 }