001 /**
002 * Created by IntelliJ IDEA.
003 * User: Wei Wang
004 * Date: Dec 1, 2002
005 * Time: 1:16:41 AM
006 */
007
008 package EVolve.visualization.XYViz.ValValViz;
009
010 import EVolve.visualization.*;
011 import EVolve.Scene;
012 import EVolve.util.Painters.MissRatePainter;
013 import EVolve.util.VizInfo;
014 import EVolve.data.*;
015 import javax.swing.*;
016 import java.awt.*;
017 import java.awt.event.*;
018 import java.util.HashMap;
019
020 public class MissPredictionMetricViz extends Metric {
021 private PredictorFactory[] factory; // predictor factories
022 private Predictor[] predictor; // predictors
023 private JComboBox comboPredictor; // combobox for selecting predictor factory
024 private PredictorFactory selectedFactory; // predictor factory in use
025 private JTextField textInterval;
026 private JMenuItem itemSelectTimeFrame;
027 protected static JMenuItem selectionMenu[] = null;
028 private static int SELECT_OPTION;
029
030 public MissPredictionMetricViz(PredictorFactory[] factory) {
031 super();
032 dataFilterName = new String[0];
033 this.factory = factory;
034 SELECT_OPTION = 0x0001;
035 }
036
037 protected void updateConfiguration() {
038 try {
039 if (autoInterval != -1) {
040 interval = autoInterval;
041 autoInterval = -1;
042 } else
043 interval = Integer.parseInt(textInterval.getText());
044
045 ((AxesPanel)panel).setName("Bytecode", "Miss rate");
046 super.updateConfiguration();
047 } catch (Exception e) {
048 Scene.showErrorMessage("Interval must be an integer");
049 configure();
050 }
051 }
052
053 protected JPanel createConfigurationPanel() {
054 JPanel configurationPanel = new JPanel(new GridLayout(2, 1, 5, 5));
055
056 selectedFactory = factory[0];
057
058 JPanel panelTop = new JPanel(new FlowLayout());
059 configurationPanel.add(panelTop);
060
061 panelTop.add(new JLabel("Predictor: "));
062
063 comboPredictor = new JComboBox();
064 for (int i = 0; i < factory.length; i++) {
065 comboPredictor.addItem(factory[i].getName());
066 }
067 panelTop.add(comboPredictor);
068
069
070 JPanel panelBottom = new JPanel(new FlowLayout());
071 panelBottom.add(new JLabel("Interval: "));
072
073 textInterval = new JTextField(String.valueOf(interval), 10);
074 panelBottom.add(textInterval);
075
076 configurationPanel.add(panelBottom);
077
078 return configurationPanel;
079 }
080
081 public void preVisualize() {
082 predictor = new Predictor[locationFilter.getMaxEntityNumber()];
083 for (int i = 0; i < predictor.length; i++) {
084 predictor[i] = selectedFactory.createPredictor();
085 }
086
087 image = new AutoImage();
088 xMax = 0;
089 installPainter();
090 super.preVisualize();
091 }
092
093 public void receiveElement(Element element) {
094 if (element.getField()[element.getField().length-1] == Integer.MAX_VALUE)
095 return;
096 int x = xAxis.getField(element) / interval;
097 int y = locationFilter.getField(element);
098 int z = zAxis.getField(element);
099
100 countEvents(xAxis.getField(element));
101
102 if (xOffset == -1) xOffset = x;
103 painter.paint(image,x-xOffset,y,z);
104
105 countEvents(xAxis.getField(element));
106 if (xAxis.getField(element) > xMax) {
107 xMax = xAxis.getField(element);
108 }
109 }
110
111 public void visualize() {
112
113 ((AxesPanel)panel).setName(xAxis.getName() + " (" + xMax + ")",
114 "Miss Prediction rate (" +
115 ((MissRatePainter)painter).getMaxMiss()*100 + "%)");
116 sort();
117 }
118
119 protected void mouseMove(int x, int y) {
120 int X = ((AxesPanel)panel).getImageX(x);
121 if ((X >= 0) && (X < image.getW())) {
122 Scene.setStatus(((MissRatePainter)painter).getMissrate(X)+"%");
123 } else {
124 Scene.setStatus(" ");
125 }
126 }
127
128 protected void installPainter() {
129 painter = new MissRatePainter(predictor);
130 }
131
132 public void makeSelection() {
133 int x1 = ((AxesPanel)panel).getStartX();
134 int x2 = ((AxesPanel)panel).getEndX();
135
136 if (x1 < 0) {
137 x1 = 0;
138 }
139
140 if (x2 > (eventCounter.size() - 1)) {
141 x2 = eventCounter.size() - 1;
142 }
143
144 int[] selection = new int[locationFilter.getEntityNumber()];
145 for (int i = 0; i < selection.length; i++) {
146 selection[i] = i;
147 }
148
149
150 Scene.getFilter().addSelection(new Selection(locationFilter.getDataFilter().getTargetType(), selection,
151 ((Integer)eventCounter.get(x1)).intValue(), ((Integer)eventCounter.get(x2)).intValue()));
152
153 }
154
155 public HashMap getCurrentConfigure() {
156 HashMap configure = super.getCurrentConfigure();
157
158 VizInfo vizInfo = new VizInfo();
159 vizInfo.setFactory((VisualizationFactory)configure.get("Factory"));
160 vizInfo.setSubject((ElementDefinition)configure.get("Subject"));
161
162 String[] dimensionDefs = new String[3];
163 dimensionDefs[0] = xAxis.getName() ;
164 dimensionDefs[1] = locationFilter.getName() ;
165 dimensionDefs[2] = zAxis.getName() ;
166 configure.put("Dimension",vizInfo.createDimension(dimensionDefs));
167 configure.put("Predictor",selectedFactory);
168
169 return configure;
170 }
171
172 public JMenuItem[] createSelectionMenuItem() {
173 itemSelectTimeFrame = new JCheckBoxMenuItem("Time Frame");
174 itemSelectTimeFrame.setMnemonic(KeyEvent.VK_T);
175 itemSelectTimeFrame.setSelected(true);
176 itemSelectTimeFrame.setEnabled(false);
177
178
179 JMenuItem[] items = new JMenuItem[1];
180 items[0] = itemSelectTimeFrame;
181
182 return items;
183 }
184 }