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 }