History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/com/sun/tools/example/debug/gui/LaunchTool.java (1 of 18352 files). Show all

Unified · Split

java/pkg/com/sun/tools/example/debug/gui/LaunchTool.java+263−0
@@ -0,0 +1,263 @@
1/*
2 * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package com.sun.tools.example.debug.gui;
27
28import java.util.List;
29import java.util.ArrayList;
30import java.util.Map;
31import java.util.HashMap;
32import java.awt.BorderLayout;
33import java.awt.Container;
34import java.awt.event.ActionEvent;
35import java.awt.event.ActionListener;
36import javax.swing.*;
37import javax.swing.border.Border;
38import javax.swing.border.TitledBorder;
39
40import com.sun.jdi.*;
41import com.sun.jdi.connect.*;
42
43import com.sun.tools.example.debug.bdi.*;
44
45class LaunchTool {
46
47 private final ExecutionManager runtime;
48
49 private abstract class ArgRep {
50 final Connector.Argument arg;
51 final JPanel panel;
52
53 ArgRep(Connector.Argument arg) {
54 this.arg = arg;
55 panel = new JPanel();
56 Border etched = BorderFactory.createEtchedBorder();
57 Border titled = BorderFactory.createTitledBorder(etched,
58 arg.description(),
59 TitledBorder.LEFT, TitledBorder.TOP);
60 panel.setBorder(titled);
61 }
62
63 abstract String getText();
64
65 boolean isValid() {
66 return arg.isValid(getText());
67 }
68
69 boolean isSpecified() {
70 String value = getText();
71 return (value != null && value.length() > 0) ||
72 !arg.mustSpecify();
73 }
74
75 void install() {
76 arg.setValue(getText());
77 }
78 }
79
80 private class StringArgRep extends ArgRep {
81 final JTextField textField;
82
83 StringArgRep(Connector.Argument arg, JPanel comp) {
84 super(arg);
85 textField = new JTextField(arg.value(), 50 );
86 textField.setBorder(BorderFactory.createLoweredBevelBorder());
87
88 panel.add(new JLabel(arg.label(), SwingConstants.RIGHT));
89 panel.add(textField); // , BorderLayout.CENTER);
90 comp.add(panel);
91 }
92
93 @Override
94 String getText() {
95 return textField.getText();
96 }
97 }
98
99 private class BooleanArgRep extends ArgRep {
100 final JCheckBox check;
101
102 BooleanArgRep(Connector.BooleanArgument barg, JPanel comp) {
103 super(barg);
104 check = new JCheckBox(barg.label());
105 check.setSelected(barg.booleanValue());
106 panel.add(check);
107 comp.add(panel);
108 }
109
110 @Override
111 String getText() {
112 return ((Connector.BooleanArgument)arg)
113 .stringValueOf(check.getModel().isSelected());
114 }
115 }
116
117
118 private LaunchTool(ExecutionManager runtime) {
119 this.runtime = runtime;
120 }
121
122 private Connector selectConnector() {
123 final JDialog dialog = new JDialog();
124 Container content = dialog.getContentPane();
125 final JPanel radioPanel = new JPanel();
126 final ButtonGroup radioGroup = new ButtonGroup();
127 VirtualMachineManager manager = Bootstrap.virtualMachineManager();
128 List<Connector> all = manager.allConnectors();
129 Map<ButtonModel, Connector> modelToConnector = new HashMap<ButtonModel, Connector>(all.size(), 0.5f);
130
131 dialog.setModal(true);
132 dialog.setTitle("Select Connector Type");
133 radioPanel.setLayout(new BoxLayout(radioPanel, BoxLayout.Y_AXIS));
134 for (Connector connector : all) {
135 JRadioButton radio = new JRadioButton(connector.description());
136 modelToConnector.put(radio.getModel(), connector);
137 radioPanel.add(radio);
138 radioGroup.add(radio);
139 }
140 content.add(radioPanel);
141
142 final boolean[] oked = {false};
143 JPanel buttonPanel = okCancel( dialog, new ActionListener() {
144 @Override
145 public void actionPerformed(ActionEvent event) {
146 if (radioGroup.getSelection() == null) {
147 JOptionPane.showMessageDialog(dialog,
148 "Please select a connector type",
149 "No Selection",
150 JOptionPane.ERROR_MESSAGE);
151 } else {
152 oked[0] = true;
153 dialog.setVisible(false);
154 dialog.dispose();
155 }
156 }
157 } );
158 content.add(BorderLayout.SOUTH, buttonPanel);
159 dialog.pack();
160 dialog.setVisible(true);
161
162 return oked[0] ?
163 modelToConnector.get(radioGroup.getSelection()) :
164 null;
165 }
166
167 private void configureAndConnect(final Connector connector) {
168 final JDialog dialog = new JDialog();
169 final Map<String, Connector.Argument> args = connector.defaultArguments();
170
171 dialog.setModal(true);
172 dialog.setTitle("Connector Arguments");
173 Container content = dialog.getContentPane();
174 JPanel guts = new JPanel();
175 Border etched = BorderFactory.createEtchedBorder();
176 BorderFactory.createTitledBorder(etched,
177 connector.description(),
178 TitledBorder.LEFT, TitledBorder.TOP);
179 guts.setBorder(etched);
180 guts.setLayout(new BoxLayout(guts, BoxLayout.Y_AXIS));
181
182 // guts.add(new JLabel(connector.description()));
183
184 final List<ArgRep> argReps = new ArrayList<ArgRep>(args.size());
185 for (Connector.Argument arg : args.values()) {
186 ArgRep ar;
187 if (arg instanceof Connector.BooleanArgument) {
188 ar = new BooleanArgRep((Connector.BooleanArgument)arg, guts);
189 } else {
190 ar = new StringArgRep(arg, guts);
191 }
192 argReps.add(ar);
193 }
194 content.add(guts);
195
196 JPanel buttonPanel = okCancel( dialog, new ActionListener() {
197 @Override
198 public void actionPerformed(ActionEvent event) {
199 for (ArgRep ar : argReps) {
200 if (!ar.isSpecified()) {
201 JOptionPane.showMessageDialog(dialog,
202 ar.arg.label() +
203 ": Argument must be specified",
204 "No argument", JOptionPane.ERROR_MESSAGE);
205 return;
206 }
207 if (!ar.isValid()) {
208 JOptionPane.showMessageDialog(dialog,
209 ar.arg.label() +
210 ": Bad argument value: " +
211 ar.getText(),
212 "Bad argument", JOptionPane.ERROR_MESSAGE);
213 return;
214 }
215 ar.install();
216 }
217 try {
218 if (runtime.explictStart(connector, args)) {
219 dialog.setVisible(false);
220 dialog.dispose();
221 } else {
222 JOptionPane.showMessageDialog(dialog,
223 "Bad arguments values: See diagnostics window.",
224 "Bad arguments", JOptionPane.ERROR_MESSAGE);
225 }
226 } catch (VMLaunchFailureException exc) {
227 JOptionPane.showMessageDialog(dialog,
228 "Launch Failure: " + exc,
229 "Launch Failed",JOptionPane.ERROR_MESSAGE);
230 }
231 }
232 } );
233 content.add(BorderLayout.SOUTH, buttonPanel);
234 dialog.pack();
235 dialog.setVisible(true);
236 }
237
238 private JPanel okCancel(final JDialog dialog, ActionListener okListener) {
239 JPanel buttonPanel = new JPanel();
240 JButton ok = new JButton("OK");
241 JButton cancel = new JButton("Cancel");
242 buttonPanel.add(ok);
243 buttonPanel.add(cancel);
244 ok.addActionListener(okListener);
245 cancel.addActionListener( new ActionListener() {
246 @Override
247 public void actionPerformed(ActionEvent event) {
248 dialog.setVisible(false);
249 dialog.dispose();
250 }
251 } );
252 return buttonPanel;
253 }
254
255 static void queryAndLaunchVM(ExecutionManager runtime)
256 throws VMLaunchFailureException {
257 LaunchTool lt = new LaunchTool(runtime);
258 Connector connector = lt.selectConnector();
259 if (connector != null) {
260 lt.configureAndConnect(connector);
261 }
262 }
263}