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.Color; 012 import java.util.HashMap; 013 import java.util.Iterator; 014 import java.util.Random; 015 016 public class ColorCache implements Cloneable{ 017 private HashMap colorMap; 018 private Random random; 019 private final long seed = 2003213813; 020 private Color[] defaultColors = { 021 new Color(51,153,204), new Color(187,156,26), new Color(153,204,51),new Color(153,51,204), 022 new Color(204,51,153), new Color(204,153,51), new Color(51,204,0),new Color(51,0,204), 023 new Color(204,0,51), new Color(204,51,0), new Color(0,51,204),new Color(0,204,51), 024 new Color(204,0,204), new Color(204,204,0), new Color(0,204,204),new Color(51,153,0), 025 new Color(51,0,153), new Color(153,0,51), new Color(153,51,0),new Color(0,51,153), 026 new Color(0,153,51), new Color(153,204,0), new Color(153,0,204),new Color(0,204,153), 027 new Color(0,153,204), new Color(204,0,153), new Color(204,153,0),new Color(151,255,151), 028 new Color(255,151,151), new Color(151,151,255), new Color(204,204,255),new Color(255,204,204), 029 new Color(204,255,204), new Color(251,151,180), new Color(251,180,151),new Color(151,180,251), 030 new Color(151,251,180), new Color(180,251,151), new Color(180,151,251),new Color(145,244,45), 031 new Color(145,45,244), new Color(45,244,145), new Color(45,145,244),new Color(244,100,45), 032 new Color(244,45,145), new Color(244,145,195), new Color(0,0,255),new Color(51,204,153), 033 new Color(0,255,0), new Color(130,28,247), new Color(179,247,98),new Color(247,28,130), 034 new Color(200,160,88), new Color(28,247,130), new Color(198,130,247),new Color(0,128,255), 035 new Color(0,255,128), new Color(255,128,177), new Color(255,180,128),new Color(128,200,255), 036 new Color(255,128,0), new Color(128,255,0), new Color(255,0,0),new Color(102,102,255) 037 }; 038 private int leftColor; 039 040 public ColorCache() { 041 colorMap = new HashMap(); 042 leftColor = defaultColors.length -1; 043 random = new Random(); 044 random.setSeed(seed); 045 } 046 047 private Color getRandomColor() { 048 int sum = 0; 049 int rand[] = new int[3]; 050 051 if (leftColor>=0) { 052 return defaultColors[leftColor--]; 053 } 054 055 do { 056 while (sum<70) { 057 for (int i=0; i<rand.length;i++) { 058 rand[i] = 500; 059 while (rand[i]>255) { 060 rand[i] = (int)(random.nextDouble()*10000); 061 } 062 } 063 sum = rand[0] + rand[1] + rand[2]; 064 } 065 sum = 0; 066 } while (colorMap.containsValue(new Color(rand[0],rand[1],rand[2]))); 067 068 return new Color(rand[0],rand[1],rand[2]); 069 } 070 071 public Color getNextColor(long methodId) { 072 Color color; 073 if (!colorMap.containsKey(new Long(methodId))) { 074 color = getRandomColor(); 075 colorMap.put(new Long(methodId),color); 076 return color; 077 } 078 return (Color)colorMap.get(new Long(methodId)); 079 } 080 081 public long getKeyFromColor(Color color) { 082 Iterator it = colorMap.keySet().iterator(); 083 long methodId = -1; 084 085 while (it.hasNext()) { 086 Long key = (Long)it.next(); 087 if (color != ((Color)colorMap.get(key))) continue; 088 089 methodId = key.longValue(); 090 return methodId; 091 } 092 return methodId; 093 } 094 095 public Object clone() { 096 ColorCache o = null; 097 try { 098 o = (ColorCache)super.clone(); 099 } catch (CloneNotSupportedException e) { 100 e.printStackTrace(); 101 return null; 102 } 103 o.colorMap = (HashMap)colorMap.clone(); 104 o.defaultColors = new Color[defaultColors.length]; 105 for (int i=0; i<defaultColors.length; i++) 106 o.defaultColors[i] = defaultColors[i]; 107 return o; 108 } 109 }