001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Nov 27, 2002
005     * Time: 3:57:05 PM
006     */
007    
008    package EVolve.visualization.XYViz.ValRefViz;
009    
010    import EVolve.visualization.XYViz.XYVisualization;
011    import EVolve.visualization.XYViz.ValRefViz.HotSpotViz.PredictionViz;
012    import EVolve.visualization.*;
013    import EVolve.util.VizInfo;
014    import EVolve.Scene;
015    import EVolve.data.ElementDefinition;
016    import EVolve.data.DataFilter;
017    import EVolve.data.Entity;
018    
019    import java.util.*;
020    
021    
022    public abstract class ValueReferenceVisualization extends XYVisualization{
023        protected ValueDimension xAxis;
024        protected ReferenceDimension yAxis;
025        protected ReferenceDimension zAxis;
026        protected ArrayList eventCounter; // event counter
027    
028        public Dimension[] createDimension() {
029            Dimension [] returnDimension = new Dimension[2];
030    
031            xAxis = new ValueDimension();
032            yAxis = new ReferenceDimension();
033            zAxis = null;
034    
035            returnDimension[0] = xAxis;
036            returnDimension[1] = yAxis;
037    
038            return returnDimension;
039        }
040    
041        public ReferenceDimension getLinkableDimension(int dim) {
042            if (dim!=1) return null;
043            return (ReferenceDimension)dimension[dim];
044        }
045    
046        public void sort() {
047            String comparatorName = yAxis.getSelectedComparatorName();
048            if (normalOrientation) {
049                ((AxesPanel)panel).setName(timeHeader() + xAxis.getName() + " (" + xMax +
050                                           (interval == -1 ? "" : (",interval " + String.valueOf(interval))) +")",
051                                           yAxis.getName() + " (" + yAxis.getEntityNumber() +
052                                           ", " + comparatorName +")");
053                ((AxesPanel)panel).setImage(image.getSortedImage(null, yAxis).getImage());
054                magnifier.setAxises(null,yAxis);
055            }
056            else {
057                ((AxesPanel)panel).setName(yAxis.getName() + " (" + yAxis.getEntityNumber() + ", " +
058                                           comparatorName + ")",
059                                           timeHeader() + xAxis.getName() + " (" + xMax + ")");
060                ((AxesPanel)panel).setImage(image.getSortedImage(yAxis, null).getImage());
061                magnifier.setAxises(yAxis,null);
062            }
063            panel.repaint();
064            enableBrowseSourceMenu();
065        }
066    
067        public HashMap getCurrentConfigure() {
068            HashMap configure = super.getCurrentConfigure();
069    
070            VizInfo vizInfo = new VizInfo();
071            vizInfo.setFactory((VisualizationFactory)configure.get("Factory"));
072            vizInfo.setSubject((ElementDefinition)configure.get("Subject"));
073    
074            String[] dimensionDefs = new String[3];
075            dimensionDefs[0] = xAxis.getName() ;
076            dimensionDefs[1] = yAxis.getName() ;
077            dimensionDefs[2] = (zAxis == null) ? ";not using" : zAxis.getName() ;
078            configure.put("Dimension",vizInfo.createDimension(dimensionDefs));
079            if (this instanceof PredictionViz)
080                configure.put("Predictor",((PredictionViz)this).getPredictor());
081            else
082                configure.put("Predictor",null);
083            vizInfo.createInterval(new Integer(interval).toString());
084    
085            return configure;
086        }
087    
088        protected void updateConfiguration() {
089            ((AxesPanel)panel).setName(xAxis.getName(), yAxis.getName());
090            super.updateConfiguration();
091        }
092    
093        /**
094         * Mouse moved.
095         *
096         * @param   x position on X-axis
097         * @param   y position on Y-axis
098         */
099        protected void mouseMove(int x, int y) {
100            int X = ((AxesPanel)panel).getImageX(x);
101            int Y = ((AxesPanel)panel).getImageY(y);
102    
103            if ((Y >= 0) && (Y < yAxis.getEntityNumber())) {
104                if (normalOrientation) {
105                    if (shift_pressed && (image.getSortedColor(null,yAxis,X,Y)==null))
106                        Scene.setStatus("  ");
107                    else {
108                        Entity entity = yAxis.getEntity(Y);
109                        Scene.setStatus(entity == null ? " " : entity.getName());
110                    }
111                } else {
112                    if (shift_pressed && (image.getSortedColor(yAxis,null,X,Y)==null))
113                        Scene.setStatus("  ");
114                    else {
115                        Entity entity = yAxis.getEntity(X);
116                        Scene.setStatus(entity == null ? " " : entity.getName());
117                    }
118                }
119            } else {
120                Scene.setStatus(" ");
121            }
122        }
123    
124        protected void changeOrientation() {
125            super.changeOrientation();
126            sort();
127        }
128    
129        private String timeHeader() {
130            DataFilter dataFilter = xAxis.getDataFilter();
131            String[] property = dataFilter.getProperty();
132            for (int i=0; i< property.length; i++) {
133                if (property[i].equals("time"))
134                    return "Time - ";
135            }
136            return "";
137        }
138    
139        protected String getEntityUnderMouse() {
140            int X = ((AxesPanel)panel).getImageX(mouseX);
141            int Y = ((AxesPanel)panel).getImageY(mouseY);
142    
143            if ((Y >= 0) && (Y < yAxis.getEntityNumber())) {
144                if (normalOrientation) {
145                    if ((image.getSortedColor(null,yAxis,X,Y)!=null))
146                        return yAxis.getEntity(Y).getName();
147                } else {
148                    if (image.getSortedColor(yAxis,null,X,Y)!=null)
149                        return yAxis.getEntity(X).getName();
150                }
151            }
152    
153            return null;
154        }
155    }