001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Nov 28, 2002
005     * Time: 11:50:25 PM
006     */
007    
008    package EVolve.visualization.XYViz.RefRefViz;
009    
010    import EVolve.visualization.*;
011    import EVolve.visualization.Dimension;
012    import EVolve.data.*;
013    import EVolve.util.VizInfo;
014    import EVolve.util.Painters.CorrelationPainter;
015    import javax.swing.*;
016    import java.util.HashMap;
017    import java.awt.event.*;
018    
019    public class CorrelationViz extends ReferenceReferenceVisualization{
020        private int valueMax;
021        private JMenuItem itemSelectX, itemSelectY, itemSelectAllX, itemSelectAllY;
022        private static JMenuItem selectionMenu[] = null;
023    
024        public Dimension[] createDimension() {
025            Dimension[] returnVal = new Dimension[3];
026            Dimension[] temp = super.createDimension();
027    
028            zAxis = new ValueDimension();
029    
030            returnVal[0] = temp[0];
031            returnVal[1] = temp[1];
032            returnVal[2] = zAxis;
033    
034            return returnVal;
035        }
036    
037        public void preVisualize() {
038            valueMax = 0;
039            image = new AutoImage();
040            value = new int[xAxis.getMaxEntityNumber()][yAxis.getMaxEntityNumber()];
041            for (int i = 0; i < value.length; i++) {
042                for (int j = 0; j < value[i].length; j++) {
043                    value[i][j] = 0;
044                }
045            }
046            installPainter();
047        }
048    
049        public void receiveElement(Element element) {
050            if (element.getField()[element.getField().length-1] == Integer.MAX_VALUE)
051                return;
052            value[xAxis.getField(element)][yAxis.getField(element)] += zAxis.getField(element);
053    
054            if (value[xAxis.getField(element)][yAxis.getField(element)] > valueMax) {
055                valueMax = value[xAxis.getField(element)][yAxis.getField(element)];
056            }
057        }
058    
059        public void visualize() {
060            painter.paint(image,-1,-1,valueMax);
061            sort();
062        }
063    
064        public HashMap getCurrentConfigure() {
065            HashMap configure = super.getCurrentConfigure();
066    
067            VizInfo vizInfo = new VizInfo();
068            vizInfo.setFactory((VisualizationFactory)configure.get("Factory"));
069            vizInfo.setSubject((ElementDefinition)configure.get("Subject"));
070    
071            String[] dimensionDefs = new String[3];
072            dimensionDefs[0] = xAxis.getName() ;
073            dimensionDefs[1] = yAxis.getName() ;
074            dimensionDefs[2] = zAxis.getName() ;
075            configure.put("Dimension",vizInfo.createDimension(dimensionDefs));
076    
077            return configure;
078        }
079    
080        protected void updateConfiguration() {
081            info[0] = xAxis.getName() +": ";
082            info[1] = "    " + yAxis.getName() +": ";
083            info[2] = " Correlation: ";
084            
085            super.updateConfiguration();
086        }
087    
088        public int getxMax() {
089            return xAxis.getEntityNumber();
090        }
091    
092        protected void changeOrientation() {
093            int newValue[][] = new int[value[0].length][value.length];
094            for (int i = 0; i < newValue.length; i++) {
095                for (int j = 0; j < newValue[i].length ; j++) {
096                    newValue[i][j] = value[newValue[i].length - j - 1][newValue.length - i - 1];
097                }
098            }
099            value = newValue;
100            super.changeOrientation();
101        }
102    
103        protected void installPainter() {
104            painter = new CorrelationPainter(value);
105        }
106    
107        public JMenuItem[] createSelectionMenuItem() {
108            if (selectionMenu != null) return selectionMenu;
109    
110            itemSelectX = new JCheckBoxMenuItem("Occurred Entities on X Axis");
111            itemSelectX.setMnemonic(KeyEvent.VK_X);
112            itemSelectX.addActionListener(new ActionListener() {
113                public void actionPerformed(ActionEvent e) {
114                    boolean selected = itemSelectX.isSelected();
115                    SELECT_OPTION = switchOption(selected, SELECT_OPTION, SELECT_X_AXIS);
116    
117                    if (itemSelectAllX.isSelected() && selected) {
118                        itemSelectAllX.setSelected(false);
119                        SELECT_OPTION = switchOption(false,SELECT_OPTION,SELECT_ALL_X_AXIS);
120                    }
121                }
122            });
123            itemSelectX.setSelected(false);
124    
125            itemSelectAllX = new JCheckBoxMenuItem("All Entities on X Axis");
126            itemSelectAllX.setMnemonic(KeyEvent.VK_A);
127            itemSelectAllX.addActionListener(new ActionListener() {
128                public void actionPerformed(ActionEvent e) {
129                    boolean selected = itemSelectAllX.isSelected();
130                    SELECT_OPTION = switchOption(selected,SELECT_OPTION,SELECT_ALL_X_AXIS);
131    
132                    if (itemSelectX.isSelected() && selected) {
133                        itemSelectX.setSelected(false);
134                        SELECT_OPTION = switchOption(false,SELECT_OPTION,SELECT_X_AXIS);
135                    }
136                }
137            });
138            itemSelectAllX.setSelected(true);
139    
140            itemSelectY = new JCheckBoxMenuItem("Occurred Entities on Y Axis");
141            itemSelectY.setMnemonic(KeyEvent.VK_Y);
142            itemSelectY.addActionListener(new ActionListener() {
143                public void actionPerformed(ActionEvent e) {
144                    boolean selected = itemSelectY.isSelected();
145                    SELECT_OPTION = switchOption(selected, SELECT_OPTION, SELECT_Y_AXIS);
146    
147                    if (itemSelectAllY.isSelected() && selected) {
148                        itemSelectAllY.setSelected(false);
149                        SELECT_OPTION = switchOption(false,SELECT_OPTION, SELECT_ALL_Y_AXIS);
150                    }
151                }
152            });
153            itemSelectY.setSelected(false);
154    
155            itemSelectAllY = new JCheckBoxMenuItem("All Entities on Y Axis");
156            itemSelectAllY.setMnemonic(KeyEvent.VK_E);
157            itemSelectAllY.addActionListener(new ActionListener() {
158                public void actionPerformed(ActionEvent e) {
159                    boolean selected = itemSelectAllY.isSelected();
160                    SELECT_OPTION = switchOption(selected,SELECT_OPTION,SELECT_ALL_Y_AXIS);
161    
162                    if (itemSelectY.isSelected() && selected) {
163                        itemSelectY.setSelected(false);
164                        SELECT_OPTION = switchOption(false,SELECT_OPTION,SELECT_Y_AXIS);
165                    }
166                }
167            });
168            itemSelectAllY.setSelected(true);
169    
170            selectionMenu = new JMenuItem[4];
171            selectionMenu[0] = itemSelectX;
172            selectionMenu[1] = itemSelectAllX;
173            selectionMenu[2] = itemSelectY;
174            selectionMenu[3] = itemSelectAllY;
175    
176            return selectionMenu;
177        }
178    
179    }