001    /* EVolve - an Extensible Software Visualization Framework
002     * Copyright (C) 2001-2002 Qin Wang
003     *
004     * This library is free software; you can redistribute it and/or
005     * modify it under the terms of the GNU Library General Public
006     * License as published by the Free Software Foundation; either
007     * version 2 of the License, or (at your option) any later version.
008     *
009     * This library is distributed in the hope that it will be useful,
010     * but WITHOUT ANY WARRANTY; without even the implied warranty of
011     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
012     * Library General Public License for more details.
013     *
014     * You should have received a copy of the GNU Library General Public
015     * License along with this library; if not, write to the
016     * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
017     * Boston, MA 02111-1307, USA.
018     */
019    
020    /*
021     * EVolve is distributed at http://www.sable.mcgill.ca/EVolve/
022     */
023    
024    package EVolve.visualization;
025    
026    import EVolve.util.VizInfo;
027    import EVolve.data.*;
028    import java.awt.*;
029    import java.util.HashMap;
030    import java.util.ArrayList;
031    import javax.swing.*;
032    
033    /**
034     * Two-column table.
035     */
036    public class TableViz extends Visualization {
037        private ReferenceDimension leftColumn; // dimension, left column
038        private ValueDimension rightColumn; // dimension, right column
039    
040        private JTable table; // the table
041        private TableVizModel model; // table model
042    
043        private int[] value; // value of the right column
044    
045        /**
046         * Creates a table.
047         */
048        public TableViz() {
049            model = new TableVizModel();
050            table = new JTable(model);
051    
052            JScrollPane scrollPane = new JScrollPane(table);
053            scrollPane.setBackground(Color.white);
054            scrollPane.getViewport().setBackground(Color.white);
055            panel.add(scrollPane, BorderLayout.CENTER);
056    
057            addPopupTrigger(table);
058            addPopupTrigger(scrollPane.getViewport());
059        }
060    
061        public Dimension[] createDimension() {
062            leftColumn = new ReferenceDimension();
063            rightColumn = new ValueDimension();
064    
065            Dimension[] returnVal = new Dimension[2];
066            returnVal[0] = leftColumn;
067            returnVal[1] = rightColumn;
068    
069            return returnVal;
070        }
071    
072        protected JPanel createPanel() {
073            JPanel returnVal = new JPanel(new BorderLayout());
074            returnVal.setBackground(Color.white);
075            return returnVal;
076        }
077    
078        protected JPanel createConfigurationPanel() {
079            return null;
080        }
081    
082        protected void updateConfiguration() {
083            model = new TableVizModel();
084            model.setName(leftColumn.getName(), rightColumn.getName());
085            table.setModel(model);
086        }
087    
088        public void preVisualize() {
089            value = new int[leftColumn.getMaxEntityNumber()];
090            for (int i = 0; i < value.length; i++) {
091                value[i] = 0;
092            }
093        }
094    
095        public void receiveElement(Element element) {
096            if (element.getField()[element.getField().length-1] == Integer.MAX_VALUE)
097                return;
098            value[leftColumn.getField(element)] += rightColumn.getField(element);
099        }
100    
101        public void visualize() {
102            leftColumn.addComparator(new ValueComparator("Value", false, value));
103            sort();
104        }
105    
106        public void sort() {
107            String[] sortedName = new String[leftColumn.getEntityNumber()];
108            int[] sortedValue = new int[leftColumn.getEntityNumber()];
109    
110            for (int i = 0; i < leftColumn.getMaxEntityNumber(); i++) {
111                int sortedIndex = leftColumn.getSortedIndex(i);
112                if (sortedIndex != -1) {
113                    sortedName[sortedIndex] = leftColumn.getEntity(sortedIndex).getName();
114                    sortedValue[sortedIndex] = value[i];
115                }
116            }
117    
118            model = new TableVizModel();
119            model.setName(leftColumn.getName(), rightColumn.getName());
120            model.setValue(sortedName, sortedValue);
121            table.setModel(model);
122        }
123    
124        public void makeSelection() {
125            leftColumn.makeSelection(table.getSelectedRows());
126        }
127    
128        public HashMap getCurrentConfigure() {
129            HashMap configure = super.getCurrentConfigure();
130    
131            VizInfo vizInfo = new VizInfo();
132    
133            vizInfo.setFactory((VisualizationFactory)configure.get("Factory"));
134            vizInfo.setSubject((ElementDefinition)configure.get("Subject"));
135            String[] dimensionDefs = new String[2];
136            dimensionDefs[0] = leftColumn.getName() ;
137            dimensionDefs[1] = rightColumn.getName() ;
138            configure.put("Dimension",vizInfo.createDimension(dimensionDefs));
139    
140    
141            return configure;
142        }
143    
144        public ReferenceDimension getLinkableDimension(int dim) {
145            return null;
146        }
147    
148        public AutoImage getImage() {
149            return null;
150        }
151    
152        public int getxMax() {
153            return -1;
154        }
155    
156        public void generateMetricsViz(String metricsName) {
157        }
158    
159        public ArrayList getNotApplicableMetrics() {
160            ArrayList returnVal = new ArrayList();
161    
162            returnVal.add("Miss Prediction");
163            return returnVal;
164        }
165    
166        public void clearMagnifier() {
167            return;
168        }
169    
170        public void setImage(AutoImage newImage) {
171            return;
172        }
173    
174        public JMenuItem[] createSelectionMenuItem() {
175            return null;
176        }
177    }