Skip to content

Commit e8840dd

Browse files
committed
Customize initial connection state in Add JMX Connection dialog
1 parent c69a521 commit e8840dd

File tree

8 files changed

+232
-31
lines changed

8 files changed

+232
-31
lines changed

visualvm/jmx/manifest.mf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ OpenIDE-Module-Layer: org/graalvm/visualvm/jmx/resources/layer.xml
66
OpenIDE-Module-Install: org/graalvm/visualvm/jmx/Installer.class
77
OpenIDE-Module-Localizing-Bundle: org/graalvm/visualvm/jmx/Bundle.properties
88
OpenIDE-Module-Provides: org.graalvm.visualvm.jmx
9-
OpenIDE-Module-Specification-Version: 2.0
9+
OpenIDE-Module-Specification-Version: 2.1
1010

visualvm/jmx/src/org/graalvm/visualvm/jmx/Bundle.properties

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,24 @@ LBL_Usage=<html><nobr><b>Usage</b>: &lt;hostname&gt;:&lt;port&gt; OR service:jmx
3737

3838
LBL_Display_name=&Display name\:
3939

40+
LBL_Caption_Security=Security
41+
4042
LBL_Use_security_credentials=Us&e security credentials
4143

4244
LBL_Save_security_credentials=&Save security credentials
4345

4446
LBL_Insecure_connection=Do &not require SSL connection
4547

48+
LBL_Caption_Connection=Connection
49+
50+
LBL_Connect_Immediately=Connect &immediately
51+
52+
TTP_Connect_Immediately=Attempt to connect immediately after submitting new JMX connection
53+
54+
LBL_Auto_Connect=Connect &automatically
55+
56+
TTP_Auto_Connect=Connect automatically whenever the target application is available
57+
4658
LBL_Default_jmx_connection_name=Default Connection
4759

4860
LBL_Default_jmx_connection_descr=Customizable JMX url and credentials

visualvm/jmx/src/org/graalvm/visualvm/jmx/DefaultCustomizer.java

Lines changed: 100 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,21 +43,27 @@
4343
import java.awt.Insets;
4444
import java.awt.event.ActionEvent;
4545
import java.awt.event.ActionListener;
46+
import java.awt.event.ItemEvent;
4647
import java.net.MalformedURLException;
4748
import java.net.URL;
4849
import java.util.Set;
4950
import javax.swing.BorderFactory;
51+
import javax.swing.Box;
52+
import javax.swing.BoxLayout;
5053
import javax.swing.JCheckBox;
5154
import javax.swing.JLabel;
55+
import javax.swing.JPanel;
5256
import javax.swing.JPasswordField;
5357
import javax.swing.JTextField;
5458
import javax.swing.SwingUtilities;
5559
import javax.swing.UIManager;
5660
import javax.swing.border.Border;
5761
import javax.swing.event.DocumentEvent;
5862
import javax.swing.event.DocumentListener;
63+
import org.graalvm.visualvm.core.options.UISupport;
5964
import org.openide.awt.Mnemonics;
6065
import org.openide.util.NbBundle;
66+
import org.openide.util.NbPreferences;
6167

6268
/**
6369
* JmxConnectionCustomizer providing the default JMX Connection dialog to enter
@@ -66,6 +72,13 @@
6672
* @author Jiri Sedlacek
6773
*/
6874
public class DefaultCustomizer extends JmxConnectionCustomizer {
75+
76+
private static final String PROP_CONNECT_IMMEDIATELY = "DefaultJMXCustomizer_prop_connect_immediately"; // NOI18N
77+
private static final String PROP_CONNECT_AUTOMATICALLY = "DefaultJMXCustomizer_prop_connect_automatically"; // NOI18N
78+
79+
private static final boolean DEFAULT_CONNECT_IMMEDIATELY = true;
80+
private static final boolean DEFAULT_CONNECT_AUTOMATICALLY = true;
81+
6982

7083
DefaultCustomizer() {
7184
super(NbBundle.getMessage(DefaultCustomizer.class, "LBL_Default_jmx_connection_name"), // NOI18N
@@ -97,9 +110,14 @@ public Setup getConnectionSetup(PropertiesPanel customizerPanel) {
97110
panel.getUsername(), panel.getPassword(), panel.getSaveCredentials());
98111
boolean persistent = true;
99112
boolean allowInsecure = panel.allowsInsecureConnection();
113+
114+
boolean connectImmediately = panel.isConnectImmediately();
115+
NbPreferences.forModule(DefaultCustomizer.class).putBoolean(PROP_CONNECT_IMMEDIATELY, connectImmediately);
116+
boolean autoConnect = panel.isConnectAutomatically();
117+
NbPreferences.forModule(DefaultCustomizer.class).putBoolean(PROP_CONNECT_AUTOMATICALLY, autoConnect);
100118

101-
return new JmxConnectionCustomizer.Setup(connectionString, displayName,
102-
provider, persistent, allowInsecure);
119+
return new JmxConnectionCustomizer.Setup(connectionString, displayName, provider, persistent,
120+
allowInsecure, connectImmediately, autoConnect);
103121
}
104122

105123

@@ -242,6 +260,14 @@ public final boolean getSaveCredentials() {
242260
public final boolean allowsInsecureConnection() {
243261
return noSSLCheckbox.isSelected();
244262
}
263+
264+
public final boolean isConnectImmediately() {
265+
return connectImmediatelyChoice.isSelected();
266+
}
267+
268+
public final boolean isConnectAutomatically() {
269+
return autoConnectChoice.isSelected();
270+
}
245271

246272

247273
private void initDefaults() {
@@ -380,6 +406,16 @@ public void changedUpdate(DocumentEvent e) {
380406
constraints.anchor = GridBagConstraints.WEST;
381407
constraints.insets = new Insets(8, 5, 0, 0);
382408
add(displaynameField, constraints);
409+
410+
constraints = new GridBagConstraints();
411+
constraints.gridx = 0;
412+
constraints.gridy = 3;
413+
constraints.weightx = 1;
414+
constraints.gridwidth = GridBagConstraints.REMAINDER;
415+
constraints.fill = GridBagConstraints.HORIZONTAL;
416+
constraints.anchor = GridBagConstraints.NORTHWEST;
417+
constraints.insets = new Insets(20, 0, 0, 0);
418+
add(UISupport.createSectionSeparator(NbBundle.getMessage(DefaultCustomizer.class, "LBL_Caption_Security")), constraints); // NOI18N
383419

384420
// securityCheckbox
385421
securityCheckbox = new JCheckBox();
@@ -392,11 +428,11 @@ public void actionPerformed(ActionEvent e) {
392428
});
393429
constraints = new GridBagConstraints();
394430
constraints.gridx = 0;
395-
constraints.gridy = 3;
431+
constraints.gridy = 4;
396432
constraints.gridwidth = GridBagConstraints.REMAINDER;
397433
constraints.fill = GridBagConstraints.NONE;
398434
constraints.anchor = GridBagConstraints.WEST;
399-
constraints.insets = new Insets(15, 0, 0, 0);
435+
constraints.insets = new Insets(8, 0, 0, 0);
400436
add(securityCheckbox, constraints);
401437

402438
// usernameLabel
@@ -405,7 +441,7 @@ public void actionPerformed(ActionEvent e) {
405441
DefaultCustomizer.class, "LBL_Username")); // NOI18N
406442
constraints = new GridBagConstraints();
407443
constraints.gridx = 0;
408-
constraints.gridy = 4;
444+
constraints.gridy = 5;
409445
constraints.gridwidth = 1;
410446
constraints.fill = GridBagConstraints.NONE;
411447
constraints.anchor = GridBagConstraints.EAST;
@@ -430,7 +466,7 @@ public void changedUpdate(DocumentEvent e) {
430466
});
431467
constraints = new GridBagConstraints();
432468
constraints.gridx = 1;
433-
constraints.gridy = 4;
469+
constraints.gridy = 5;
434470
constraints.gridwidth = GridBagConstraints.REMAINDER;
435471
constraints.fill = GridBagConstraints.HORIZONTAL;
436472
constraints.anchor = GridBagConstraints.WEST;
@@ -443,7 +479,7 @@ public void changedUpdate(DocumentEvent e) {
443479
DefaultCustomizer.class, "LBL_Password")); // NOI18N
444480
constraints = new GridBagConstraints();
445481
constraints.gridx = 0;
446-
constraints.gridy = 5;
482+
constraints.gridy = 6;
447483
constraints.gridwidth = 1;
448484
constraints.fill = GridBagConstraints.NONE;
449485
constraints.anchor = GridBagConstraints.EAST;
@@ -468,7 +504,7 @@ public void changedUpdate(DocumentEvent e) {
468504
});
469505
constraints = new GridBagConstraints();
470506
constraints.gridx = 1;
471-
constraints.gridy = 5;
507+
constraints.gridy = 6;
472508
constraints.gridwidth = GridBagConstraints.REMAINDER;
473509
constraints.fill = GridBagConstraints.HORIZONTAL;
474510
constraints.anchor = GridBagConstraints.WEST;
@@ -486,7 +522,7 @@ public void actionPerformed(ActionEvent e) {
486522
});
487523
constraints = new GridBagConstraints();
488524
constraints.gridx = 0;
489-
constraints.gridy = 6;
525+
constraints.gridy = 7;
490526
constraints.gridwidth = GridBagConstraints.REMAINDER;
491527
constraints.fill = GridBagConstraints.HORIZONTAL;
492528
constraints.anchor = GridBagConstraints.EAST;
@@ -504,17 +540,68 @@ public void actionPerformed(ActionEvent e) {
504540
});
505541
constraints = new GridBagConstraints();
506542
constraints.gridx = 0;
507-
constraints.gridy = 7;
543+
constraints.gridy = 8;
508544
constraints.gridwidth = GridBagConstraints.REMAINDER;
509545
constraints.fill = GridBagConstraints.HORIZONTAL;
510546
constraints.anchor = GridBagConstraints.WEST;
511547
constraints.insets = new Insets(15, 0, 0, 0);
512548
add(noSSLCheckbox, constraints);
549+
550+
// --- connection options ------------------------------------------
551+
constraints = new GridBagConstraints();
552+
constraints.gridx = 0;
553+
constraints.gridy = 9;
554+
constraints.weightx = 1;
555+
constraints.gridwidth = GridBagConstraints.REMAINDER;
556+
constraints.fill = GridBagConstraints.HORIZONTAL;
557+
constraints.anchor = GridBagConstraints.NORTHWEST;
558+
constraints.insets = new Insets(20, 0, 0, 0);
559+
add(UISupport.createSectionSeparator(NbBundle.getMessage(DefaultCustomizer.class, "LBL_Caption_Connection")), constraints); // NOI18N
560+
561+
JPanel connectOptions = new JPanel(null);
562+
connectOptions.setLayout(new BoxLayout(connectOptions, BoxLayout.LINE_AXIS));
563+
constraints = new GridBagConstraints();
564+
constraints.gridx = 0;
565+
constraints.gridy = 10;
566+
constraints.gridwidth = GridBagConstraints.REMAINDER;
567+
constraints.fill = GridBagConstraints.HORIZONTAL;
568+
constraints.anchor = GridBagConstraints.WEST;
569+
constraints.insets = new Insets(8, 0, 0, 0);
570+
add(connectOptions, constraints);
571+
572+
connectImmediatelyChoice = new JCheckBox() {
573+
protected void fireItemStateChanged(ItemEvent e) {
574+
super.fireItemStateChanged(e);
575+
if (autoConnectChoice != null) {
576+
autoConnectChoice.setEnabled(isSelected());
577+
}
578+
}
579+
};
580+
Mnemonics.setLocalizedText(connectImmediatelyChoice, NbBundle.getMessage(DefaultCustomizer.class, "LBL_Connect_Immediately")); // NOI18N
581+
connectImmediatelyChoice.setToolTipText(NbBundle.getMessage(DefaultCustomizer.class, "TTP_Connect_Immediately")); // NOI18N
582+
connectOptions.add(connectImmediatelyChoice);
583+
584+
connectOptions.add(Box.createHorizontalStrut(8));
585+
586+
autoConnectChoice = new JCheckBox() {
587+
public void setEnabled(boolean enabled) {
588+
super.setEnabled(enabled);
589+
if (!enabled) setSelected(false);
590+
}
591+
};
592+
Mnemonics.setLocalizedText(autoConnectChoice, NbBundle.getMessage(DefaultCustomizer.class, "LBL_Auto_Connect")); // NOI18N
593+
autoConnectChoice.setToolTipText(NbBundle.getMessage(DefaultCustomizer.class, "TTP_Auto_Connect")); // NOI18N
594+
connectOptions.add(autoConnectChoice);
595+
596+
connectImmediatelyChoice.setSelected(NbPreferences.forModule(DefaultCustomizer.class).getBoolean(PROP_CONNECT_IMMEDIATELY, DEFAULT_CONNECT_IMMEDIATELY));
597+
if (connectImmediatelyChoice.isSelected()) autoConnectChoice.setSelected(NbPreferences.forModule(DefaultCustomizer.class).getBoolean(PROP_CONNECT_AUTOMATICALLY, DEFAULT_CONNECT_AUTOMATICALLY));
598+
else autoConnectChoice.setEnabled(false);
599+
// -----------------------------------------------------------------
513600

514601
// spacer
515602
constraints = new GridBagConstraints();
516603
constraints.gridx = 0;
517-
constraints.gridy = 8;
604+
constraints.gridy = 11;
518605
constraints.weightx = 1;
519606
constraints.weighty = 1;
520607
constraints.gridwidth = GridBagConstraints.REMAINDER;
@@ -553,6 +640,8 @@ public void actionPerformed(ActionEvent e) {
553640
private JPasswordField passwordField;
554641
private JCheckBox saveCheckbox;
555642
private JCheckBox noSSLCheckbox;
643+
private JCheckBox connectImmediatelyChoice;
644+
private JCheckBox autoConnectChoice;
556645
}
557646

558647

0 commit comments

Comments
 (0)