jdk/src/share/classes/sun/tools/jconsole/Plotter.java
changeset 12851 3334e1c781d0
parent 5506 202f599c92aa
child 14342 8435a30053c1
equal deleted inserted replaced
12850:f4a05c228eca 12851:3334e1c781d0
    36 import javax.swing.*;
    36 import javax.swing.*;
    37 import javax.swing.border.*;
    37 import javax.swing.border.*;
    38 import javax.swing.filechooser.*;
    38 import javax.swing.filechooser.*;
    39 import javax.swing.filechooser.FileFilter;
    39 import javax.swing.filechooser.FileFilter;
    40 
    40 
       
    41 
    41 import com.sun.tools.jconsole.JConsoleContext;
    42 import com.sun.tools.jconsole.JConsoleContext;
    42 
       
    43 import static com.sun.tools.jconsole.JConsoleContext.ConnectionState.*;
       
    44 
    43 
    45 import static sun.tools.jconsole.Formatter.*;
    44 import static sun.tools.jconsole.Formatter.*;
    46 import static sun.tools.jconsole.ProxyClient.*;
    45 import static sun.tools.jconsole.ProxyClient.*;
    47 import static sun.tools.jconsole.Resources.*;
       
    48 import static sun.tools.jconsole.Utilities.*;
       
    49 
    46 
    50 @SuppressWarnings("serial")
    47 @SuppressWarnings("serial")
    51 public class Plotter extends JComponent
    48 public class Plotter extends JComponent
    52                      implements Accessible, ActionListener, PropertyChangeListener {
    49                      implements Accessible, ActionListener, PropertyChangeListener {
    53 
    50 
    54     public static enum Unit {
    51     public static enum Unit {
    55         NONE, BYTES, PERCENT
    52         NONE, BYTES, PERCENT
    56     }
    53     }
    57 
    54 
    58     static final String[] rangeNames = {
    55     static final String[] rangeNames = {
    59         Resources.getText(" 1 min"),
    56         Messages.ONE_MIN,
    60         Resources.getText(" 5 min"),
    57         Messages.FIVE_MIN,
    61         Resources.getText("10 min"),
    58         Messages.TEN_MIN,
    62         Resources.getText("30 min"),
    59         Messages.THIRTY_MIN,
    63         Resources.getText(" 1 hour"),
    60         Messages.ONE_HOUR,
    64         Resources.getText(" 2 hours"),
    61         Messages.TWO_HOURS,
    65         Resources.getText(" 3 hours"),
    62         Messages.THREE_HOURS,
    66         Resources.getText(" 6 hours"),
    63         Messages.SIX_HOURS,
    67         Resources.getText("12 hours"),
    64         Messages.TWELVE_HOURS,
    68         Resources.getText(" 1 day"),
    65         Messages.ONE_DAY,
    69         Resources.getText(" 7 days"),
    66         Messages.SEVEN_DAYS,
    70         Resources.getText(" 1 month"),
    67         Messages.ONE_MONTH,
    71         Resources.getText(" 3 months"),
    68         Messages.THREE_MONTHS,
    72         Resources.getText(" 6 months"),
    69         Messages.SIX_MONTHS,
    73         Resources.getText(" 1 year"),
    70         Messages.ONE_YEAR,
    74         Resources.getText("All")
    71         Messages.ALL
    75     };
    72     };
    76 
    73 
    77     static final int[] rangeValues = {
    74     static final int[] rangeValues = {
    78         1,
    75         1,
    79         5,
    76         5,
   245     }
   242     }
   246 
   243 
   247     @Override
   244     @Override
   248     public JPopupMenu getComponentPopupMenu() {
   245     public JPopupMenu getComponentPopupMenu() {
   249         if (popupMenu == null) {
   246         if (popupMenu == null) {
   250             popupMenu = new JPopupMenu(Resources.getText("Chart:"));
   247             popupMenu = new JPopupMenu(Messages.CHART_COLON);
   251             timeRangeMenu = new JMenu(Resources.getText("Plotter.timeRangeMenu"));
   248             timeRangeMenu = new JMenu(Messages.PLOTTER_TIME_RANGE_MENU);
   252             timeRangeMenu.setMnemonic(getMnemonicInt("Plotter.timeRangeMenu"));
   249             timeRangeMenu.setMnemonic(Resources.getMnemonicInt(Messages.PLOTTER_TIME_RANGE_MENU));
   253             popupMenu.add(timeRangeMenu);
   250             popupMenu.add(timeRangeMenu);
   254             menuRBs = new JRadioButtonMenuItem[rangeNames.length];
   251             menuRBs = new JRadioButtonMenuItem[rangeNames.length];
   255             ButtonGroup rbGroup = new ButtonGroup();
   252             ButtonGroup rbGroup = new ButtonGroup();
   256             for (int i = 0; i < rangeNames.length; i++) {
   253             for (int i = 0; i < rangeNames.length; i++) {
   257                 menuRBs[i] = new JRadioButtonMenuItem(rangeNames[i]);
   254                 menuRBs[i] = new JRadioButtonMenuItem(rangeNames[i]);
   263                 timeRangeMenu.add(menuRBs[i]);
   260                 timeRangeMenu.add(menuRBs[i]);
   264             }
   261             }
   265 
   262 
   266             popupMenu.addSeparator();
   263             popupMenu.addSeparator();
   267 
   264 
   268             saveAsMI = new JMenuItem(getText("Plotter.saveAsMenuItem"));
   265             saveAsMI = new JMenuItem(Messages.PLOTTER_SAVE_AS_MENU_ITEM);
   269             saveAsMI.setMnemonic(getMnemonicInt("Plotter.saveAsMenuItem"));
   266             saveAsMI.setMnemonic(Resources.getMnemonicInt(Messages.PLOTTER_SAVE_AS_MENU_ITEM));
   270             saveAsMI.addActionListener(this);
   267             saveAsMI.addActionListener(this);
   271             popupMenu.add(saveAsMI);
   268             popupMenu.add(saveAsMI);
   272         }
   269         }
   273         return popupMenu;
   270         return popupMenu;
   274     }
   271     }
   316                 }
   313                 }
   317             }
   314             }
   318 
   315 
   319             out.close();
   316             out.close();
   320             JOptionPane.showMessageDialog(this,
   317             JOptionPane.showMessageDialog(this,
   321                                           getText("FileChooser.savedFile",
   318                                           Resources.format(Messages.FILE_CHOOSER_SAVED_FILE,
   322                                                   file.getAbsolutePath(),
   319                                                            file.getAbsolutePath(),
   323                                                   file.length()));
   320                                                            file.length()));
   324         } catch (IOException ex) {
   321         } catch (IOException ex) {
   325             String msg = ex.getLocalizedMessage();
   322             String msg = ex.getLocalizedMessage();
   326             String path = file.getAbsolutePath();
   323             String path = file.getAbsolutePath();
   327             if (msg.startsWith(path)) {
   324             if (msg.startsWith(path)) {
   328                 msg = msg.substring(path.length()).trim();
   325                 msg = msg.substring(path.length()).trim();
   329             }
   326             }
   330             JOptionPane.showMessageDialog(this,
   327             JOptionPane.showMessageDialog(this,
   331                                           getText("FileChooser.saveFailed.message",
   328                                           Resources.format(Messages.FILE_CHOOSER_SAVE_FAILED_MESSAGE,
   332                                                   path, msg),
   329                                                            path,
   333                                           getText("FileChooser.saveFailed.title"),
   330                                                            msg),
       
   331                                           Messages.FILE_CHOOSER_SAVE_FAILED_TITLE,
   334                                           JOptionPane.ERROR_MESSAGE);
   332                                           JOptionPane.ERROR_MESSAGE);
   335         }
   333         }
   336     }
   334     }
   337 
   335 
   338     @Override
   336     @Override
  1018                                         file.getName() + "." + extensions[0]);
  1016                                         file.getName() + "." + extensions[0]);
  1019                     }
  1017                     }
  1020                 }
  1018                 }
  1021 
  1019 
  1022                 if (file.exists()) {
  1020                 if (file.exists()) {
  1023                     String okStr = getText("FileChooser.fileExists.okOption");
  1021                     String okStr = Messages.FILE_CHOOSER_FILE_EXISTS_OK_OPTION;
  1024                     String cancelStr = getText("FileChooser.fileExists.cancelOption");
  1022                     String cancelStr = Messages.FILE_CHOOSER_FILE_EXISTS_CANCEL_OPTION;
  1025                     int ret =
  1023                     int ret =
  1026                         JOptionPane.showOptionDialog(this,
  1024                         JOptionPane.showOptionDialog(this,
  1027                                                      getText("FileChooser.fileExists.message",
  1025                                                      Resources.format(Messages.FILE_CHOOSER_FILE_EXISTS_MESSAGE,
  1028                                                              file.getName()),
  1026                                                                       file.getName()),
  1029                                                      getText("FileChooser.fileExists.title"),
  1027                                                      Messages.FILE_CHOOSER_FILE_EXISTS_TITLE,
  1030                                                      JOptionPane.OK_CANCEL_OPTION,
  1028                                                      JOptionPane.OK_CANCEL_OPTION,
  1031                                                      JOptionPane.WARNING_MESSAGE,
  1029                                                      JOptionPane.WARNING_MESSAGE,
  1032                                                      null,
  1030                                                      null,
  1033                                                      new Object[] { okStr, cancelStr },
  1031                                                      new Object[] { okStr, cancelStr },
  1034                                                      okStr);
  1032                                                      okStr);
  1051     }
  1049     }
  1052 
  1050 
  1053     protected class AccessiblePlotter extends AccessibleJComponent {
  1051     protected class AccessiblePlotter extends AccessibleJComponent {
  1054         private static final long serialVersionUID = -3847205410473510922L;
  1052         private static final long serialVersionUID = -3847205410473510922L;
  1055         protected AccessiblePlotter() {
  1053         protected AccessiblePlotter() {
  1056             setAccessibleName(getText("Plotter.accessibleName"));
  1054             setAccessibleName(Messages.PLOTTER_ACCESSIBLE_NAME);
  1057         }
  1055         }
  1058 
  1056 
  1059         @Override
  1057         @Override
  1060         public String getAccessibleName() {
  1058         public String getAccessibleName() {
  1061             String name = super.getAccessibleName();
  1059             String name = super.getAccessibleName();
  1065                 for (Sequence seq : seqs) {
  1063                 for (Sequence seq : seqs) {
  1066                     if (seq.isPlotted) {
  1064                     if (seq.isPlotted) {
  1067                         String value = "null";
  1065                         String value = "null";
  1068                         if (seq.size > 0) {
  1066                         if (seq.size > 0) {
  1069                             if (unit == Unit.BYTES) {
  1067                             if (unit == Unit.BYTES) {
  1070                                 value = getText("Size Bytes", seq.value(seq.size - 1));
  1068                                 value = Resources.format(Messages.SIZE_BYTES, seq.value(seq.size - 1));
  1071                             } else {
  1069                             } else {
  1072                                 value =
  1070                                 value =
  1073                                     getFormattedValue(seq.value(seq.size - 1), false) +
  1071                                     getFormattedValue(seq.value(seq.size - 1), false) +
  1074                                     ((unit == Unit.PERCENT) ? "%" : "");
  1072                                     ((unit == Unit.PERCENT) ? "%" : "");
  1075                             }
  1073                             }
  1076                         }
  1074                         }
  1077                         // Assume format string ends with newline
  1075                         // Assume format string ends with newline
  1078                         keyValueList +=
  1076                         keyValueList +=
  1079                             getText("Plotter.accessibleName.keyAndValue",
  1077                             Resources.format(Messages.PLOTTER_ACCESSIBLE_NAME_KEY_AND_VALUE,
  1080                                     seq.key, value);
  1078                                     seq.key, value);
  1081                     }
  1079                     }
  1082                 }
  1080                 }
  1083                 name += "\n" + keyValueList + ".";
  1081                 name += "\n" + keyValueList + ".";
  1084             } else {
  1082             } else {
  1085                 name += "\n" + getText("Plotter.accessibleName.noData");
  1083                 name += "\n" + Messages.PLOTTER_ACCESSIBLE_NAME_NO_DATA;
  1086             }
  1084             }
  1087             return name;
  1085             return name;
  1088         }
  1086         }
  1089 
  1087 
  1090         @Override
  1088         @Override