< prev index next >

src/share/classes/sun/tools/jconsole/Plotter.java

Print this page
rev 1501 : 7017818: NLS: JConsoleResources.java cannot be handled by translation team
Reviewed-by: mchung, mfang


  23  * questions.
  24  */
  25 
  26 package sun.tools.jconsole;
  27 
  28 import java.awt.*;
  29 import java.awt.event.*;
  30 import java.beans.*;
  31 import java.io.*;
  32 import java.lang.reflect.Array;
  33 import java.text.*;
  34 import java.util.*;
  35 
  36 import javax.accessibility.*;
  37 import javax.swing.*;
  38 import javax.swing.border.*;
  39 import javax.swing.event.*;
  40 import javax.swing.filechooser.*;
  41 import javax.swing.filechooser.FileFilter;
  42 

  43 import com.sun.tools.jconsole.JConsoleContext;
  44 import com.sun.tools.jconsole.JConsoleContext.ConnectionState;
  45 
  46 import static com.sun.tools.jconsole.JConsoleContext.ConnectionState.*;
  47 
  48 import static sun.tools.jconsole.Formatter.*;
  49 import static sun.tools.jconsole.ProxyClient.*;
  50 import static sun.tools.jconsole.Resources.*;
  51 import static sun.tools.jconsole.Utilities.*;
  52 
  53 @SuppressWarnings("serial")
  54 public class Plotter extends JComponent
  55                      implements Accessible, ActionListener, PropertyChangeListener {
  56 
  57     public static enum Unit {
  58         NONE, BYTES, PERCENT
  59     }
  60 
  61     static final String[] rangeNames = {
  62         Resources.getText(" 1 min"),
  63         Resources.getText(" 5 min"),
  64         Resources.getText("10 min"),
  65         Resources.getText("30 min"),
  66         Resources.getText(" 1 hour"),
  67         Resources.getText(" 2 hours"),
  68         Resources.getText(" 3 hours"),
  69         Resources.getText(" 6 hours"),
  70         Resources.getText("12 hours"),
  71         Resources.getText(" 1 day"),
  72         Resources.getText(" 7 days"),
  73         Resources.getText(" 1 month"),
  74         Resources.getText(" 3 months"),
  75         Resources.getText(" 6 months"),
  76         Resources.getText(" 1 year"),
  77         Resources.getText("All")
  78     };
  79 
  80     static final int[] rangeValues = {
  81         1,
  82         5,
  83         10,
  84         30,
  85         1 * 60,
  86         2 * 60,
  87         3 * 60,
  88         6 * 60,
  89         12 * 60,
  90         1 * 24 * 60,
  91         7 * 24 * 60,
  92         1 * 31 * 24 * 60,
  93         3 * 31 * 24 * 60,
  94         6 * 31 * 24 * 60,
  95         366 * 24 * 60,
  96         -1
  97     };


 225     public void setViewRange(int minutes) {
 226         if (minutes != viewRange) {
 227             int oldValue = viewRange;
 228             viewRange = minutes;
 229             /* Do not i18n this string */
 230             firePropertyChange("viewRange", oldValue, viewRange);
 231             if (popupMenu != null) {
 232                 for (int i = 0; i < menuRBs.length; i++) {
 233                     if (rangeValues[i] == viewRange) {
 234                         menuRBs[i].setSelected(true);
 235                         break;
 236                     }
 237                 }
 238             }
 239             repaint();
 240         }
 241     }
 242 
 243     public JPopupMenu getComponentPopupMenu() {
 244         if (popupMenu == null) {
 245             popupMenu = new JPopupMenu(Resources.getText("Chart:"));
 246             timeRangeMenu = new JMenu(Resources.getText("Plotter.timeRangeMenu"));
 247             timeRangeMenu.setMnemonic(getMnemonicInt("Plotter.timeRangeMenu"));
 248             popupMenu.add(timeRangeMenu);
 249             menuRBs = new JRadioButtonMenuItem[rangeNames.length];
 250             ButtonGroup rbGroup = new ButtonGroup();
 251             for (int i = 0; i < rangeNames.length; i++) {
 252                 menuRBs[i] = new JRadioButtonMenuItem(rangeNames[i]);
 253                 rbGroup.add(menuRBs[i]);
 254                 menuRBs[i].addActionListener(this);
 255                 if (viewRange == rangeValues[i]) {
 256                     menuRBs[i].setSelected(true);
 257                 }
 258                 timeRangeMenu.add(menuRBs[i]);
 259             }
 260 
 261             popupMenu.addSeparator();
 262 
 263             saveAsMI = new JMenuItem(getText("Plotter.saveAsMenuItem"));
 264             saveAsMI.setMnemonic(getMnemonicInt("Plotter.saveAsMenuItem"));
 265             saveAsMI.addActionListener(this);
 266             popupMenu.add(saveAsMI);
 267         }
 268         return popupMenu;
 269     }
 270 
 271     public void actionPerformed(ActionEvent ev) {
 272         JComponent src = (JComponent)ev.getSource();
 273         if (src == saveAsMI) {
 274             saveAs();
 275         } else {
 276             int index = timeRangeMenu.getPopupMenu().getComponentIndex(src);
 277             setViewRange(rangeValues[index]);
 278         }
 279     }
 280 
 281     private void saveAs() {
 282         if (saveFC == null) {
 283             saveFC = new SaveDataFileChooser();
 284         }


 296             out.print("Time");
 297             for (Sequence seq : seqs) {
 298                 out.print(","+seq.name);
 299             }
 300             out.println();
 301 
 302             // Print data lines
 303             if (seqs.size() > 0 && seqs.get(0).size > 0) {
 304                 for (int i = 0; i < seqs.get(0).size; i++) {
 305                     double excelTime = toExcelTime(times.time(i));
 306                     out.print(String.format(Locale.ENGLISH, "%.6f", excelTime));
 307                     for (Sequence seq : seqs) {
 308                         out.print("," + getFormattedValue(seq.value(i), false));
 309                     }
 310                     out.println();
 311                 }
 312             }
 313 
 314             out.close();
 315             JOptionPane.showMessageDialog(this,
 316                                           getText("FileChooser.savedFile",
 317                                                   file.getAbsolutePath(),
 318                                                   file.length()));
 319         } catch (IOException ex) {
 320             String msg = ex.getLocalizedMessage();
 321             String path = file.getAbsolutePath();
 322             if (msg.startsWith(path)) {
 323                 msg = msg.substring(path.length()).trim();
 324             }
 325             JOptionPane.showMessageDialog(this,
 326                                           getText("FileChooser.saveFailed.message",
 327                                                   path, msg),
 328                                           getText("FileChooser.saveFailed.title"),

 329                                           JOptionPane.ERROR_MESSAGE);
 330         }
 331     }
 332 
 333     public void paintComponent(Graphics g) {
 334         super.paintComponent(g);
 335 
 336         Color oldColor = g.getColor();
 337         Font  oldFont  = g.getFont();
 338         Color fg = getForeground();
 339         Color bg = getBackground();
 340         boolean bgIsLight = (bg.getRed() > 200 &&
 341                              bg.getGreen() > 200 &&
 342                              bg.getBlue() > 200);
 343 
 344 
 345         ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
 346                                          RenderingHints.VALUE_ANTIALIAS_ON);
 347 
 348         if (smallFont == null) {


 995             if (file != null) {
 996                 FileFilter filter = getFileFilter();
 997                 if (filter != null && filter instanceof FileNameExtensionFilter) {
 998                     String[] extensions =
 999                         ((FileNameExtensionFilter)filter).getExtensions();
1000 
1001                     boolean goodExt = false;
1002                     for (String ext : extensions) {
1003                         if (file.getName().toLowerCase().endsWith("." + ext.toLowerCase())) {
1004                             goodExt = true;
1005                             break;
1006                         }
1007                     }
1008                     if (!goodExt) {
1009                         file = new File(file.getParent(),
1010                                         file.getName() + "." + extensions[0]);
1011                     }
1012                 }
1013 
1014                 if (file.exists()) {
1015                     String okStr = getText("FileChooser.fileExists.okOption");
1016                     String cancelStr = getText("FileChooser.fileExists.cancelOption");
1017                     int ret =
1018                         JOptionPane.showOptionDialog(this,
1019                                                      getText("FileChooser.fileExists.message",
1020                                                              file.getName()),
1021                                                      getText("FileChooser.fileExists.title"),
1022                                                      JOptionPane.OK_CANCEL_OPTION,
1023                                                      JOptionPane.WARNING_MESSAGE,
1024                                                      null,
1025                                                      new Object[] { okStr, cancelStr },
1026                                                      okStr);
1027                     if (ret != JOptionPane.OK_OPTION) {
1028                         return;
1029                     }
1030                 }
1031                 setSelectedFile(file);
1032             }
1033             super.approveSelection();
1034         }
1035     }
1036 
1037     public AccessibleContext getAccessibleContext() {
1038         if (accessibleContext == null) {
1039             accessibleContext = new AccessiblePlotter();
1040         }
1041         return accessibleContext;
1042     }
1043 
1044     protected class AccessiblePlotter extends AccessibleJComponent {
1045         protected AccessiblePlotter() {
1046             setAccessibleName(getText("Plotter.accessibleName"));
1047         }
1048 
1049         public String getAccessibleName() {
1050             String name = super.getAccessibleName();
1051 
1052             if (seqs.size() > 0 && seqs.get(0).size > 0) {
1053                 String keyValueList = "";
1054                 for (Sequence seq : seqs) {
1055                     if (seq.isPlotted) {
1056                         String value = "null";
1057                         if (seq.size > 0) {
1058                             if (unit == Unit.BYTES) {
1059                                 value = getText("Size Bytes", seq.value(seq.size - 1));
1060                             } else {
1061                                 value =
1062                                     getFormattedValue(seq.value(seq.size - 1), false) +
1063                                     ((unit == Unit.PERCENT) ? "%" : "");
1064                             }
1065                         }
1066                         // Assume format string ends with newline
1067                         keyValueList +=
1068                             getText("Plotter.accessibleName.keyAndValue",
1069                                     seq.key, value);
1070                     }
1071                 }
1072                 name += "\n" + keyValueList + ".";
1073             } else {
1074                 name += "\n" + getText("Plotter.accessibleName.noData");
1075             }
1076             return name;
1077         }
1078 
1079         public AccessibleRole getAccessibleRole() {
1080             return AccessibleRole.CANVAS;
1081         }
1082     }
1083 }


  23  * questions.
  24  */
  25 
  26 package sun.tools.jconsole;
  27 
  28 import java.awt.*;
  29 import java.awt.event.*;
  30 import java.beans.*;
  31 import java.io.*;
  32 import java.lang.reflect.Array;
  33 import java.text.*;
  34 import java.util.*;
  35 
  36 import javax.accessibility.*;
  37 import javax.swing.*;
  38 import javax.swing.border.*;
  39 import javax.swing.event.*;
  40 import javax.swing.filechooser.*;
  41 import javax.swing.filechooser.FileFilter;
  42 
  43 
  44 import com.sun.tools.jconsole.JConsoleContext;
  45 import com.sun.tools.jconsole.JConsoleContext.ConnectionState;
  46 


  47 import static sun.tools.jconsole.Formatter.*;
  48 import static sun.tools.jconsole.ProxyClient.*;


  49 
  50 @SuppressWarnings("serial")
  51 public class Plotter extends JComponent
  52                      implements Accessible, ActionListener, PropertyChangeListener {
  53 
  54     public static enum Unit {
  55         NONE, BYTES, PERCENT
  56     }
  57 
  58     static final String[] rangeNames = {
  59         Messages.ONE_MIN,
  60         Messages.FIVE_MIN,
  61         Messages.TEN_MIN,
  62         Messages.THIRTY_MIN,
  63         Messages.ONE_HOUR,
  64         Messages.TWO_HOURS,
  65         Messages.THREE_HOURS,
  66         Messages.SIX_HOURS,
  67         Messages.TWELVE_HOURS,
  68         Messages.ONE_DAY,
  69         Messages.SEVEN_DAYS,
  70         Messages.ONE_MONTH,
  71         Messages.THREE_MONTHS,
  72         Messages.SIX_MONTHS,
  73         Messages.ONE_YEAR,
  74         Messages.ALL
  75     };
  76 
  77     static final int[] rangeValues = {
  78         1,
  79         5,
  80         10,
  81         30,
  82         1 * 60,
  83         2 * 60,
  84         3 * 60,
  85         6 * 60,
  86         12 * 60,
  87         1 * 24 * 60,
  88         7 * 24 * 60,
  89         1 * 31 * 24 * 60,
  90         3 * 31 * 24 * 60,
  91         6 * 31 * 24 * 60,
  92         366 * 24 * 60,
  93         -1
  94     };


 222     public void setViewRange(int minutes) {
 223         if (minutes != viewRange) {
 224             int oldValue = viewRange;
 225             viewRange = minutes;
 226             /* Do not i18n this string */
 227             firePropertyChange("viewRange", oldValue, viewRange);
 228             if (popupMenu != null) {
 229                 for (int i = 0; i < menuRBs.length; i++) {
 230                     if (rangeValues[i] == viewRange) {
 231                         menuRBs[i].setSelected(true);
 232                         break;
 233                     }
 234                 }
 235             }
 236             repaint();
 237         }
 238     }
 239 
 240     public JPopupMenu getComponentPopupMenu() {
 241         if (popupMenu == null) {
 242             popupMenu = new JPopupMenu(Messages.CHART_COLON);
 243             timeRangeMenu = new JMenu(Messages.PLOTTER_TIME_RANGE_MENU);
 244             timeRangeMenu.setMnemonic(Resources.getMnemonicInt(Messages.PLOTTER_TIME_RANGE_MENU));
 245             popupMenu.add(timeRangeMenu);
 246             menuRBs = new JRadioButtonMenuItem[rangeNames.length];
 247             ButtonGroup rbGroup = new ButtonGroup();
 248             for (int i = 0; i < rangeNames.length; i++) {
 249                 menuRBs[i] = new JRadioButtonMenuItem(rangeNames[i]);
 250                 rbGroup.add(menuRBs[i]);
 251                 menuRBs[i].addActionListener(this);
 252                 if (viewRange == rangeValues[i]) {
 253                     menuRBs[i].setSelected(true);
 254                 }
 255                 timeRangeMenu.add(menuRBs[i]);
 256             }
 257 
 258             popupMenu.addSeparator();
 259 
 260             saveAsMI = new JMenuItem(Messages.PLOTTER_SAVE_AS_MENU_ITEM);
 261             saveAsMI.setMnemonic(Resources.getMnemonicInt(Messages.PLOTTER_SAVE_AS_MENU_ITEM));
 262             saveAsMI.addActionListener(this);
 263             popupMenu.add(saveAsMI);
 264         }
 265         return popupMenu;
 266     }
 267 
 268     public void actionPerformed(ActionEvent ev) {
 269         JComponent src = (JComponent)ev.getSource();
 270         if (src == saveAsMI) {
 271             saveAs();
 272         } else {
 273             int index = timeRangeMenu.getPopupMenu().getComponentIndex(src);
 274             setViewRange(rangeValues[index]);
 275         }
 276     }
 277 
 278     private void saveAs() {
 279         if (saveFC == null) {
 280             saveFC = new SaveDataFileChooser();
 281         }


 293             out.print("Time");
 294             for (Sequence seq : seqs) {
 295                 out.print(","+seq.name);
 296             }
 297             out.println();
 298 
 299             // Print data lines
 300             if (seqs.size() > 0 && seqs.get(0).size > 0) {
 301                 for (int i = 0; i < seqs.get(0).size; i++) {
 302                     double excelTime = toExcelTime(times.time(i));
 303                     out.print(String.format(Locale.ENGLISH, "%.6f", excelTime));
 304                     for (Sequence seq : seqs) {
 305                         out.print("," + getFormattedValue(seq.value(i), false));
 306                     }
 307                     out.println();
 308                 }
 309             }
 310 
 311             out.close();
 312             JOptionPane.showMessageDialog(this,
 313                                           Resources.format(Messages.FILE_CHOOSER_SAVED_FILE,
 314                                                            file.getAbsolutePath(),
 315                                                            file.length()));
 316         } catch (IOException ex) {
 317             String msg = ex.getLocalizedMessage();
 318             String path = file.getAbsolutePath();
 319             if (msg.startsWith(path)) {
 320                 msg = msg.substring(path.length()).trim();
 321             }
 322             JOptionPane.showMessageDialog(this,
 323                                           Resources.format(Messages.FILE_CHOOSER_SAVE_FAILED_MESSAGE,
 324                                                            path,
 325                                                            msg),
 326                                           Messages.FILE_CHOOSER_SAVE_FAILED_TITLE,
 327                                           JOptionPane.ERROR_MESSAGE);
 328         }
 329     }
 330 
 331     public void paintComponent(Graphics g) {
 332         super.paintComponent(g);
 333 
 334         Color oldColor = g.getColor();
 335         Font  oldFont  = g.getFont();
 336         Color fg = getForeground();
 337         Color bg = getBackground();
 338         boolean bgIsLight = (bg.getRed() > 200 &&
 339                              bg.getGreen() > 200 &&
 340                              bg.getBlue() > 200);
 341 
 342 
 343         ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
 344                                          RenderingHints.VALUE_ANTIALIAS_ON);
 345 
 346         if (smallFont == null) {


 993             if (file != null) {
 994                 FileFilter filter = getFileFilter();
 995                 if (filter != null && filter instanceof FileNameExtensionFilter) {
 996                     String[] extensions =
 997                         ((FileNameExtensionFilter)filter).getExtensions();
 998 
 999                     boolean goodExt = false;
1000                     for (String ext : extensions) {
1001                         if (file.getName().toLowerCase().endsWith("." + ext.toLowerCase())) {
1002                             goodExt = true;
1003                             break;
1004                         }
1005                     }
1006                     if (!goodExt) {
1007                         file = new File(file.getParent(),
1008                                         file.getName() + "." + extensions[0]);
1009                     }
1010                 }
1011 
1012                 if (file.exists()) {
1013                     String okStr = Messages.FILE_CHOOSER_FILE_EXISTS_OK_OPTION;
1014                     String cancelStr = Messages.FILE_CHOOSER_FILE_EXISTS_CANCEL_OPTION;
1015                     int ret =
1016                         JOptionPane.showOptionDialog(this,
1017                                                      Resources.format(Messages.FILE_CHOOSER_FILE_EXISTS_MESSAGE,
1018                                                                       file.getName()),
1019                                                      Messages.FILE_CHOOSER_FILE_EXISTS_TITLE,
1020                                                      JOptionPane.OK_CANCEL_OPTION,
1021                                                      JOptionPane.WARNING_MESSAGE,
1022                                                      null,
1023                                                      new Object[] { okStr, cancelStr },
1024                                                      okStr);
1025                     if (ret != JOptionPane.OK_OPTION) {
1026                         return;
1027                     }
1028                 }
1029                 setSelectedFile(file);
1030             }
1031             super.approveSelection();
1032         }
1033     }
1034 
1035     public AccessibleContext getAccessibleContext() {
1036         if (accessibleContext == null) {
1037             accessibleContext = new AccessiblePlotter();
1038         }
1039         return accessibleContext;
1040     }
1041 
1042     protected class AccessiblePlotter extends AccessibleJComponent {
1043         protected AccessiblePlotter() {
1044             setAccessibleName(Messages.PLOTTER_ACCESSIBLE_NAME);
1045         }
1046 
1047         public String getAccessibleName() {
1048             String name = super.getAccessibleName();
1049 
1050             if (seqs.size() > 0 && seqs.get(0).size > 0) {
1051                 String keyValueList = "";
1052                 for (Sequence seq : seqs) {
1053                     if (seq.isPlotted) {
1054                         String value = "null";
1055                         if (seq.size > 0) {
1056                             if (unit == Unit.BYTES) {
1057                                 value = Resources.format(Messages.SIZE_BYTES, seq.value(seq.size - 1));
1058                             } else {
1059                                 value =
1060                                     getFormattedValue(seq.value(seq.size - 1), false) +
1061                                     ((unit == Unit.PERCENT) ? "%" : "");
1062                             }
1063                         }
1064                         // Assume format string ends with newline
1065                         keyValueList +=
1066                             Resources.format(Messages.PLOTTER_ACCESSIBLE_NAME_KEY_AND_VALUE,
1067                                     seq.key, value);
1068                     }
1069                 }
1070                 name += "\n" + keyValueList + ".";
1071             } else {
1072                 name += "\n" + Messages.PLOTTER_ACCESSIBLE_NAME_NO_DATA;
1073             }
1074             return name;
1075         }
1076 
1077         public AccessibleRole getAccessibleRole() {
1078             return AccessibleRole.CANVAS;
1079         }
1080     }
1081 }
< prev index next >