001 /**
002 * Created by IntelliJ IDEA.
003 * User: Wei Wang
004 * Date: Nov 27, 2002
005 * Time: 9:11:28 PM
006 */
007
008 package EVolve.visualization.XYViz.ValRefViz.HotSpotViz;
009
010 import EVolve.data.*;
011 import EVolve.visualization.*;
012 import EVolve.visualization.Dimension;
013 import EVolve.util.Painters.PredictionPainter;
014 import javax.swing.*;
015 import java.awt.*;
016
017 public class PredictionViz extends HotSpotVisualization{
018 private PredictorFactory[] factory; // predictor factories
019 private PredictorFactory selectedFactory; // predictor factory in use
020 private Predictor[] predictor; // predictors
021 private JComboBox comboPredictor; // combobox for selecting predictor factory
022
023 public PredictionViz(PredictorFactory[] factory) {
024 super();
025 this.factory = factory;
026 }
027
028 public Dimension[] createDimension() {
029 Dimension [] returnDimension = new Dimension[3];
030
031 xAxis = new ValueDimension();
032 yAxis = new ReferenceDimension();
033 zAxis = new ReferenceDimension();
034 returnDimension[0] = xAxis;
035 returnDimension[1] = yAxis;
036 returnDimension[2] = zAxis;
037
038 return returnDimension;
039 }
040
041 protected JPanel createConfigurationPanel() {
042 configurationPanel = new JPanel(new GridLayout(2, 1, 5, 5));
043
044 selectedFactory = factory[0];
045
046 JPanel panelTop = new JPanel(new FlowLayout());
047 configurationPanel.add(panelTop);
048
049 panelTop.add(new JLabel("Predictor: "));
050
051 comboPredictor = new JComboBox();
052 for (int i = 0; i < factory.length; i++) {
053 comboPredictor.addItem(factory[i].getName());
054 }
055 panelTop.add(comboPredictor);
056
057 return super.createConfigurationPanel();
058 }
059
060 public void preVisualize() {
061 predictor = new Predictor[yAxis.getMaxEntityNumber()];
062 for (int i = 0; i < predictor.length; i++) {
063 predictor[i] = selectedFactory.createPredictor();
064 }
065 super.preVisualize();
066 }
067
068 public void receiveElement(Element element) {
069 if (element.getField()[element.getField().length-1] == Integer.MAX_VALUE)
070 return;
071
072 int x = xAxis.getField(element);
073 int y = yAxis.getField(element);
074 int z = zAxis.getField(element);
075
076 paint(x,y,z);
077 }
078
079 public void visualize() {
080 yAxis.addComparator(new ValueComparator("Miss", false, ((PredictionPainter)painter).getMiss()));
081 sort();
082 }
083
084 protected void updateConfiguration() {
085 if (autoPredictorname == null)
086 selectedFactory = factory[comboPredictor.getSelectedIndex()];
087 else {
088 for (int i=0; i < factory.length; i++) {
089 if (factory[i].getName().equals(autoPredictorname)) {
090 selectedFactory = factory[i];
091 break;
092 }
093 }
094 }
095
096 super.updateConfiguration();
097 }
098
099 public PredictorFactory getPredictor() {
100 return selectedFactory;
101 }
102
103 protected void installPainter() {
104 painter = new PredictionPainter(predictor);
105 }
106 }