001 /** 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: Nov 27, 2002 005 * Time: 10:19:18 PM 006 */ 007 008 package EVolve.util.painters; 009 010 import java.awt.Color; 011 import java.util.HashMap; 012 013 import EVolve.Scene; 014 import EVolve.data.Entity; 015 import EVolve.visualization.AutoImage; 016 import EVolve.visualization.Predictor; 017 018 public class PredictionPainter extends Painter{ 019 protected Color colorRed = new Color(255, 0, 0); 020 protected Color colorBlue = new Color(120, 160, 255); 021 protected Predictor[] predictor; // predictors 022 protected int[] miss; 023 protected HashMap targetCheckMap; 024 protected int targetType; 025 private boolean furtherCheckNeeded = true; 026 027 public PredictionPainter() { 028 targetCheckMap = new HashMap(); 029 } 030 031 public PredictionPainter(Predictor[] predictor, int targetType) { 032 this.predictor = predictor; 033 targetCheckMap = new HashMap(); 034 this.targetType = targetType; 035 miss = new int[predictor.length]; 036 for (int i = 0; i < predictor.length; i++) { 037 miss[i] = 0; 038 } 039 } 040 041 public String getName() { 042 return "Prediction Painter"; 043 } 044 045 public void paint(AutoImage image, long x, long y, long z) { 046 predictor[(int)y].newTarget(z); 047 048 if (validateTarget(y,z)) { 049 if (predictor[(int)y].isCorrect()) { 050 if (image.getColor((int)x,(int)y) == null) { 051 image.setColor((int)x,(int)y, colorBlue); 052 } 053 } else { 054 image.setColor((int)x, (int)y, colorRed); 055 miss[(int)y]++; 056 } 057 } else { 058 if (image.getColor((int)x, (int)y) == null) { 059 image.setColor((int)x, (int)y, colorBlue); 060 } 061 } 062 } 063 064 public int[] getMiss() { 065 return miss; 066 } 067 068 public void setPredictor(Predictor[] predictor, int targetType) { 069 this.predictor = predictor; 070 this.targetType = targetType; 071 miss = new int[predictor.length]; 072 for (int i = 0; i < predictor.length; i++) { 073 miss[i] = 0; 074 } 075 } 076 077 protected boolean validateTarget(long y, long z) { 078 String newTarget = null; 079 if (furtherCheckNeeded) { 080 newTarget = ((Entity)Scene.getDataManager().getEntity()[targetType].get(new Long(z))).getName(); 081 if ((newTarget.indexOf('(') == -1) || // not a method 082 (newTarget.indexOf('#') != -1) /*a location*/) { 083 furtherCheckNeeded = false; 084 return true; 085 } 086 String oldTarget = (String)targetCheckMap.get(new Long(y)); 087 int index1 = newTarget.indexOf('('); 088 index1 = newTarget.substring(0,index1).lastIndexOf('.'); 089 newTarget = newTarget.substring(index1+1); 090 targetCheckMap.put(new Long(y),newTarget); 091 if ((oldTarget!=null)&&(!oldTarget.equals(newTarget))) 092 return false; 093 } 094 return true; 095 } 096 097 public Object clone() { 098 PredictionPainter o = (PredictionPainter)super.clone(); 099 o.colorRed = new Color(255,0,0); 100 o.colorBlue = new Color(120,160,255); 101 o.predictor = (predictor == null) ? null : new Predictor[predictor.length]; 102 o.miss = null; 103 if (miss != null) { 104 o.miss = new int[miss.length]; 105 for (int i=0; i<miss.length; i++) 106 o.miss[i] = miss[i]; 107 } 108 return o; 109 } 110 }