1 21 22 package org.armedbear.j.jdb; 23 24 import java.util.Iterator ; 25 import java.util.List ; 26 import javax.swing.Box ; 27 import javax.swing.JCheckBox ; 28 import javax.swing.JLabel ; 29 import javax.swing.JPanel ; 30 import javax.swing.JTextField ; 31 import javax.swing.border.EmptyBorder ; 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 private static final String mainClassKey = "jdb.mainClass"; 44 private static final String mainClassArgsKey = "jdb.mainClassArgs"; 45 private static final String classPathKey = "jdb.classPath"; 46 private static final String sourcePathKey = "jdb.sourcePath"; 47 private static final String javaHomeKey = "jdb.javaHome"; 48 private static final String javaExecutableKey = "jdb.javaExecutable"; 49 private static final String 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 startSuspendedCheckBox; 67 private final JdbSession session; 68 69 public JdbDialog(Editor editor) 70 { 71 super(editor, "Jdb", true); 72 this.editor = editor; 73 JLabel label; 74 JPanel panel; 75 JPanel applicationPanel = Utilities.createPanel("Application"); 76 mainClassTextField = new HistoryTextField(30); 77 mainClassHistory = new History(mainClassKey); 78 mainClassTextField.setHistory(mainClassHistory); 79 label = new JLabel ("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 ("Arguments for main class:"); 87 label.setDisplayedMnemonic('A'); 88 addLabelAndTextField(applicationPanel, label, mainClassArgsTextField); 89 mainPanel.add(applicationPanel); 90 JPanel debuggeeVMPanel= Utilities.createPanel("Debuggee VM"); 91 classPathTextField = new HistoryTextField(30); 92 classPathHistory = new History(classPathKey); 93 classPathTextField.setHistory(classPathHistory); 94 label = new JLabel ("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 ("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 ("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 ("Arguments for Java executable:"); 116 label.setDisplayedMnemonic('R'); 117 addLabelAndTextField(debuggeeVMPanel, label, vmArgsTextField); 118 debuggeeVMPanel.add(Box.createVerticalStrut(3)); 119 startSuspendedCheckBox = new JCheckBox ("Start suspended"); 120 startSuspendedCheckBox.setMnemonic('U'); 121 startSuspendedCheckBox.addKeyListener(this); 122 debuggeeVMPanel.add(startSuspendedCheckBox); 123 mainPanel.add(debuggeeVMPanel); 124 JPanel sourcePanel = Utilities.createPanel("Source"); 125 sourcePathTextField = new HistoryTextField(30); 126 sourcePathHistory = new History(sourcePathKey); 127 sourcePathTextField.setHistory(sourcePathHistory); 128 label = new JLabel ("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 session.loadDefaults(); 140 } 141 setDialogDefaults(session); 142 pack(); 143 mainClassTextField.requestFocus(); 144 } 145 146 private void addLabelAndTextField(JPanel panel, JLabel label, 147 JTextField textField) 148 { 149 label.setLabelFor(textField); 150 if (label.getBorder() == null) 151 label.setBorder(new EmptyBorder (0, 0, 3, 0)); 152 panel.add(label); 153 panel.add(textField); 154 textField.addKeyListener(this); 155 } 156 157 private void addVerticalStrut(JPanel 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 classPath = session.getClassPath(); 167 if (classPath == null || classPath.length() < 1) 168 classPath = System.getProperty("class.path"); 169 classPathTextField.setText(classPath); 170 String javaHome = session.getJavaHome(); 171 if (javaHome == null || javaHome.length() == 0) 172 javaHome = System.getProperty("java.home"); 173 javaHomeTextField.setText(javaHome); 174 String 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 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 mainClassArgs = mainClassArgsTextField.getText(); 199 mainClassArgsHistory.append(mainClassArgs); 200 mainClassArgsHistory.save(); 201 String classPath = classPathTextField.getText(); 202 List list = Utilities.getDirectoriesInPath(classPath); 203 for (Iterator it = list.iterator(); it.hasNext();) { 204 String s = (String ) 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 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 javaHome = javaHomeTextField.getText(); 225 javaHomeHistory.append(javaHome); 226 javaHomeHistory.save(); 227 String javaExecutable = javaExecutableTextField.getText(); 228 javaExecutableHistory.append(javaExecutable); 229 javaExecutableHistory.save(); 230 String vmArgs = vmArgsTextField.getText(); 231 vmArgsHistory.append(vmArgs); 232 vmArgsHistory.save(); 233 String sourcePath = sourcePathTextField.getText(); 234 list = Utilities.getDirectoriesInPath(sourcePath); 235 for (Iterator it = list.iterator(); it.hasNext();) { 236 String s = (String ) 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 |