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    }