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    }