KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > armedbear > j > jdb > JdbDialog


1 /*
2  * JdbDialog.java
3  *
4  * Copyright (C) 2000-2003 Peter Graves
5  * $Id: JdbDialog.java,v 1.2 2003/05/15 01:18:18 piso Exp $
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  */

21
22 package org.armedbear.j.jdb;
23
24 import java.util.Iterator JavaDoc;
25 import java.util.List JavaDoc;
26 import javax.swing.Box JavaDoc;
27 import javax.swing.JCheckBox JavaDoc;
28 import javax.swing.JLabel JavaDoc;
29 import javax.swing.JPanel JavaDoc;
30 import javax.swing.JTextField JavaDoc;
31 import javax.swing.border.EmptyBorder JavaDoc;
32 import org.armedbear.j.AbstractDialog;
33 import org.armedbear.j.Editor;
34 import org.armedbear.j.File;
35 import org.armedbear.j.History;
36 import org.armedbear.j.HistoryTextField;
37 import org.armedbear.j.MessageDialog;
38 import org.armedbear.j.Utilities;
39
40 public final class JdbDialog extends AbstractDialog
41 {
42     // History.
43
private static final String JavaDoc mainClassKey = "jdb.mainClass";
44     private static final String JavaDoc mainClassArgsKey = "jdb.mainClassArgs";
45     private static final String JavaDoc classPathKey = "jdb.classPath";
46     private static final String JavaDoc sourcePathKey = "jdb.sourcePath";
47     private static final String JavaDoc javaHomeKey = "jdb.javaHome";
48     private static final String JavaDoc javaExecutableKey = "jdb.javaExecutable";
49     private static final String JavaDoc vmArgsKey = "jdb.vmArgs";
50
51     private final Editor editor;
52     private final HistoryTextField classPathTextField;
53     private final HistoryTextField mainClassArgsTextField;
54     private final HistoryTextField mainClassTextField;
55     private final HistoryTextField sourcePathTextField;
56     private final HistoryTextField javaHomeTextField;
57     private final HistoryTextField javaExecutableTextField;
58     private final HistoryTextField vmArgsTextField;
59     private final History mainClassHistory;
60     private final History mainClassArgsHistory;
61     private final History classPathHistory;
62     private final History sourcePathHistory;
63     private final History javaHomeHistory;
64     private final History javaExecutableHistory;
65     private final History vmArgsHistory;
66     private final JCheckBox JavaDoc startSuspendedCheckBox;
67     private final JdbSession session;
68
69     public JdbDialog(Editor editor)
70     {
71         super(editor, "Jdb", true);
72         this.editor = editor;
73         JLabel JavaDoc label;
74         JPanel JavaDoc panel;
75         JPanel JavaDoc applicationPanel = Utilities.createPanel("Application");
76         mainClassTextField = new HistoryTextField(30);
77         mainClassHistory = new History(mainClassKey);
78         mainClassTextField.setHistory(mainClassHistory);
79         label = new JLabel JavaDoc("Main class:");
80         label.setDisplayedMnemonic('M');
81         addLabelAndTextField(applicationPanel, label, mainClassTextField);
82         addVerticalStrut(applicationPanel);
83         mainClassArgsTextField = new HistoryTextField(30);
84         mainClassArgsHistory = new History(mainClassArgsKey);
85         mainClassArgsTextField.setHistory(mainClassArgsHistory);
86         label = new JLabel JavaDoc("Arguments for main class:");
87         label.setDisplayedMnemonic('A');
88         addLabelAndTextField(applicationPanel, label, mainClassArgsTextField);
89         mainPanel.add(applicationPanel);
90         JPanel JavaDoc debuggeeVMPanel= Utilities.createPanel("Debuggee VM");
91         classPathTextField = new HistoryTextField(30);
92         classPathHistory = new History(classPathKey);
93         classPathTextField.setHistory(classPathHistory);
94         label = new JLabel JavaDoc("Class path:");
95         label.setDisplayedMnemonic('C');
96         addLabelAndTextField(debuggeeVMPanel, label, classPathTextField);
97         addVerticalStrut(debuggeeVMPanel);
98         javaHomeTextField = new HistoryTextField(30);
99         javaHomeHistory = new History(javaHomeKey);
100         javaHomeTextField.setHistory(javaHomeHistory);
101         label = new JLabel JavaDoc("Java home:");
102         label.setDisplayedMnemonic('J');
103         addLabelAndTextField(debuggeeVMPanel, label, javaHomeTextField);
104         addVerticalStrut(debuggeeVMPanel);
105         javaExecutableTextField = new HistoryTextField(30);
106         javaExecutableHistory = new History(javaExecutableKey);
107         javaExecutableTextField.setHistory(javaExecutableHistory);
108         label = new JLabel JavaDoc("Java executable:");
109         label.setDisplayedMnemonic('X');
110         addLabelAndTextField(debuggeeVMPanel, label, javaExecutableTextField);
111         addVerticalStrut(debuggeeVMPanel);
112         vmArgsTextField = new HistoryTextField(30);
113         vmArgsHistory = new History(vmArgsKey);
114         vmArgsTextField.setHistory(vmArgsHistory);
115         label = new JLabel JavaDoc("Arguments for Java executable:");
116         label.setDisplayedMnemonic('R');
117         addLabelAndTextField(debuggeeVMPanel, label, vmArgsTextField);
118         debuggeeVMPanel.add(Box.createVerticalStrut(3));
119         startSuspendedCheckBox = new JCheckBox JavaDoc("Start suspended");
120         startSuspendedCheckBox.setMnemonic('U');
121         startSuspendedCheckBox.addKeyListener(this);
122         debuggeeVMPanel.add(startSuspendedCheckBox);
123         mainPanel.add(debuggeeVMPanel);
124         JPanel JavaDoc sourcePanel = Utilities.createPanel("Source");
125         sourcePathTextField = new HistoryTextField(30);
126         sourcePathHistory = new History(sourcePathKey);
127         sourcePathTextField.setHistory(sourcePathHistory);
128         label = new JLabel JavaDoc("Source path:");
129         label.setDisplayedMnemonic('S');
130         addLabelAndTextField(sourcePanel, label, sourcePathTextField);
131         mainPanel.add(sourcePanel);
132         addOKCancel();
133         Jdb jdb = Jdb.findJdb();
134         if (jdb != null) {
135             session = jdb.getSession();
136         } else {
137             session = new JdbSession();
138             // Load default session.
139
session.loadDefaults();
140         }
141         setDialogDefaults(session);
142         pack();
143         mainClassTextField.requestFocus();
144     }
145
146     private void addLabelAndTextField(JPanel JavaDoc panel, JLabel JavaDoc label,
147         JTextField JavaDoc textField)
148     {
149         label.setLabelFor(textField);
150         if (label.getBorder() == null)
151             label.setBorder(new EmptyBorder JavaDoc(0, 0, 3, 0));
152         panel.add(label);
153         panel.add(textField);
154         textField.addKeyListener(this);
155     }
156
157     private void addVerticalStrut(JPanel JavaDoc panel)
158     {
159         panel.add(Box.createVerticalStrut(6));
160     }
161
162     private void setDialogDefaults(JdbSession session)
163     {
164         mainClassTextField.setText(session.getMainClass());
165         mainClassArgsTextField.setText(session.getMainClassArgs());
166         String JavaDoc classPath = session.getClassPath();
167         if (classPath == null || classPath.length() < 1)
168             classPath = System.getProperty("class.path");
169         classPathTextField.setText(classPath);
170         String JavaDoc javaHome = session.getJavaHome();
171         if (javaHome == null || javaHome.length() == 0)
172             javaHome = System.getProperty("java.home");
173         javaHomeTextField.setText(javaHome);
174         String JavaDoc javaExecutable = session.getJavaExecutable();
175         if (javaExecutable == null || javaExecutable.length() == 0)
176             javaExecutable = "java";
177         javaExecutableTextField.setText(javaExecutable);
178         vmArgsTextField.setText(session.getVMArgs());
179         startSuspendedCheckBox.setSelected(session.getStartSuspended());
180         sourcePathTextField.setText(session.getSourcePath());
181     }
182
183     public JdbSession getSession()
184     {
185         return session;
186     }
187
188     protected void ok()
189     {
190         String JavaDoc mainClass = mainClassTextField.getText();
191         if (mainClass == null || mainClass.length() < 1) {
192             mainClassTextField.requestFocus();
193             MessageDialog.showMessageDialog("No main class specified", "Error");
194             return;
195         }
196         mainClassHistory.append(mainClass);
197         mainClassHistory.save();
198         String JavaDoc mainClassArgs = mainClassArgsTextField.getText();
199         mainClassArgsHistory.append(mainClassArgs);
200         mainClassArgsHistory.save();
201         String JavaDoc classPath = classPathTextField.getText();
202         List JavaDoc list = Utilities.getDirectoriesInPath(classPath);
203         for (Iterator JavaDoc it = list.iterator(); it.hasNext();) {
204             String JavaDoc s = (String JavaDoc) it.next();
205             File file = File.getInstance(s);
206             if (file == null){
207                 classPathTextField.requestFocus();
208                 MessageDialog.showMessageDialog(
209                     "Invalid class path component \"" + s + '"',
210                     "Error");
211                 return;
212             }
213             // File might be directory or jar file.
214
if (!file.exists()){
215                 classPathTextField.requestFocus();
216                 MessageDialog.showMessageDialog(
217                     "Class path component \"" + s + "\" does not exist",
218                     "Error");
219                 return;
220             }
221         }
222         classPathHistory.append(classPath);
223         classPathHistory.save();
224         String JavaDoc javaHome = javaHomeTextField.getText();
225         javaHomeHistory.append(javaHome);
226         javaHomeHistory.save();
227         String JavaDoc javaExecutable = javaExecutableTextField.getText();
228         javaExecutableHistory.append(javaExecutable);
229         javaExecutableHistory.save();
230         String JavaDoc vmArgs = vmArgsTextField.getText();
231         vmArgsHistory.append(vmArgs);
232         vmArgsHistory.save();
233         String JavaDoc sourcePath = sourcePathTextField.getText();
234         list = Utilities.getDirectoriesInPath(sourcePath);
235         for (Iterator JavaDoc it = list.iterator(); it.hasNext();) {
236             String JavaDoc s = (String JavaDoc) it.next();
237             File file = File.getInstance(s);
238             if (file == null){
239                 sourcePathTextField.requestFocus();
240                 MessageDialog.showMessageDialog(
241                     "Invalid source path component \"" + s + '"',
242                     "Error");
243                 return;
244             }
245             if (!file.isDirectory()){
246                 sourcePathTextField.requestFocus();
247                 MessageDialog.showMessageDialog(
248                     "Source path component \"" + s + "\" does not exist",
249                     "Error");
250                 return;
251             }
252         }
253         sourcePathHistory.append(sourcePath);
254         sourcePathHistory.save();
255         session.setMainClass(mainClass);
256         session.setMainClassArgs(mainClassArgs);
257         session.setClassPath(classPath);
258         session.setJavaHome(javaHome);
259         session.setJavaExecutable(javaExecutable);
260         session.setVMArgs(vmArgs);
261         session.setStartSuspended(startSuspendedCheckBox.isSelected());
262         session.setSourcePath(sourcePath);
263         dispose();
264     }
265 }
266
Popular Tags