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 java.awt.event.ActionEvent;
011    import java.awt.event.ActionListener;
012    import java.awt.event.KeyEvent;
013    
014    import javax.swing.JCheckBox;
015    
016    import EVolve.data.Element;
017    import EVolve.util.painters.CorrelationPainter;
018    import EVolve.util.xmlutils.datastructures.SerializedVisualization;
019    import EVolve.visualization.AutoImage;
020    import EVolve.visualization.Dimension;
021    import EVolve.visualization.ValueDimension;
022    
023    public class CorrelationViz extends ReferenceReferenceVisualization{
024        private int valueMax;
025        private JCheckBox chkSelectX, chkSelectY, chkSelectAllX, chkSelectAllY;
026        private static JCheckBox selectionOptions[] = null;
027    
028        public Dimension[] createDimension() {
029            Dimension[] returnVal = new Dimension[3];
030            Dimension[] temp = super.createDimension();
031    
032            zAxis = new ValueDimension();
033    
034            returnVal[0] = temp[0];
035            returnVal[1] = temp[1];
036            returnVal[2] = zAxis;
037    
038            return returnVal;
039        }
040    
041        public void preVisualize() {
042            super.preVisualize();
043            valueMax = 0;
044            image = new AutoImage();
045            value = new int[xAxis.getMaxEntityNumber()][yAxis.getMaxEntityNumber()];
046            for (int i = 0; i < value.length; i++) {
047                for (int j = 0; j < value[i].length; j++) {
048                    value[i][j] = 0;
049                }
050            }
051            installPainter();
052        }
053    
054        public void receiveElement(Element element) {
055            if (element.isOptional()) return;
056    
057            value[(int)xAxis.getField(element)][(int)yAxis.getField(element)] += zAxis.getField(element);
058    
059            if (value[(int)xAxis.getField(element)][(int)yAxis.getField(element)] > valueMax) {
060                valueMax = value[(int)xAxis.getField(element)][(int)yAxis.getField(element)];
061            }
062        }
063    
064        public void visualize() {
065            painter.paint(image,-1,-1,valueMax);
066            xAxis.selectComparator(comboSortSchemes[0].getSelectedItem().toString());
067            yAxis.selectComparator(comboSortSchemes[1].getSelectedItem().toString());
068            sort();
069        }
070    
071        public SerializedVisualization getCurrentConfiguration() {
072    
073            SerializedVisualization data = super.getCurrentConfiguration();
074            data.xAxis = xAxis.getName();
075            data.xAxisSortScheme = comboSortSchemes[0].getSelectedItem().toString();
076            //data.xAxisSortScheme = xAxis.getSelectedComparatorName();
077            data.yAxis = yAxis.getName();
078            data.yAxisSortScheme = comboSortSchemes[1].getSelectedItem().toString();
079            //data.yAxisSortScheme = yAxis.getSelectedComparatorName();
080            data.zAxis = zAxis.getName();
081            return data;
082        }
083    
084        protected void updateConfiguration() {
085            info[0] = xAxis.getName() +": ";
086            info[1] = "    " + yAxis.getName() +": ";
087            info[2] = " Correlation: ";
088            
089            super.updateConfiguration();
090        }
091    
092        public long getxMax() {
093            return xAxis.getEntityNumber();
094        }
095    
096        protected void changeOrientation() {
097            int newValue[][] = new int[value[0].length][value.length];
098            for (int i = 0; i < newValue.length; i++) {
099                for (int j = 0; j < newValue[i].length ; j++) {
100                    newValue[i][j] = value[newValue[i].length - j - 1][newValue.length - i - 1];
101                }
102            }
103            value = newValue;
104            super.changeOrientation();
105        }
106    
107        protected void installPainter() {
108            painter = new CorrelationPainter(value);
109        }
110    
111        public JCheckBox[] createSelectionOptions() {
112            if (selectionOptions != null) return selectionOptions;
113    
114            chkSelectX = new JCheckBox("Occurred Entities on X Axis");
115            chkSelectX.setMnemonic(KeyEvent.VK_X);
116            chkSelectX.addActionListener(new ActionListener() {
117                public void actionPerformed(ActionEvent e) {
118                    boolean selected = chkSelectX.isSelected();
119                    SELECT_OPTION = switchOption(selected, SELECT_OPTION, SELECT_X_AXIS);
120    
121                    if (chkSelectAllX.isSelected() && selected) {
122                        chkSelectAllX.setSelected(false);
123                        SELECT_OPTION = switchOption(false,SELECT_OPTION,SELECT_ALL_X_AXIS);
124                    }
125                }
126            });
127            chkSelectX.setSelected(false);
128    
129            chkSelectAllX = new JCheckBox("All Entities on X Axis");
130            chkSelectAllX.setMnemonic(KeyEvent.VK_A);
131            chkSelectAllX.addActionListener(new ActionListener() {
132                public void actionPerformed(ActionEvent e) {
133                    boolean selected = chkSelectAllX.isSelected();
134                    SELECT_OPTION = switchOption(selected,SELECT_OPTION,SELECT_ALL_X_AXIS);
135    
136                    if (chkSelectX.isSelected() && selected) {
137                        chkSelectX.setSelected(false);
138                        SELECT_OPTION = switchOption(false,SELECT_OPTION,SELECT_X_AXIS);
139                    }
140                }
141            });
142            chkSelectAllX.setSelected(true);
143    
144            chkSelectY = new JCheckBox("Occurred Entities on Y Axis");
145            chkSelectY.setMnemonic(KeyEvent.VK_Y);
146            chkSelectY.addActionListener(new ActionListener() {
147                public void actionPerformed(ActionEvent e) {
148                    boolean selected = chkSelectY.isSelected();
149                    SELECT_OPTION = switchOption(selected, SELECT_OPTION, SELECT_Y_AXIS);
150    
151                    if (chkSelectAllY.isSelected() && selected) {
152                        chkSelectAllY.setSelected(false);
153                        SELECT_OPTION = switchOption(false,SELECT_OPTION, SELECT_ALL_Y_AXIS);
154                    }
155                }
156            });
157            chkSelectY.setSelected(false);
158    
159            chkSelectAllY = new JCheckBox("All Entities on Y Axis");
160            chkSelectAllY.setMnemonic(KeyEvent.VK_E);
161            chkSelectAllY.addActionListener(new ActionListener() {
162                public void actionPerformed(ActionEvent e) {
163                    boolean selected = chkSelectAllY.isSelected();
164                    SELECT_OPTION = switchOption(selected,SELECT_OPTION,SELECT_ALL_Y_AXIS);
165    
166                    if (chkSelectY.isSelected() && selected) {
167                        chkSelectY.setSelected(false);
168                        SELECT_OPTION = switchOption(false,SELECT_OPTION,SELECT_Y_AXIS);
169                    }
170                }
171            });
172            chkSelectAllY.setSelected(true);
173    
174            selectionOptions = new JCheckBox[4];
175            selectionOptions[0] = chkSelectX;
176            selectionOptions[1] = chkSelectAllX;
177            selectionOptions[2] = chkSelectY;
178            selectionOptions[3] = chkSelectAllY;
179    
180            return selectionOptions;
181        }
182    
183    
184    }