|
BootStrapDialog |
|
1 /* BootStrapDialog.java 2 * Copyright (c) 1998-2001, The University of Sheffield. 3 * 4 * This file is part of GATE (see http://gate.ac.uk/), and is free 5 * software, licenced under the GNU Library General Public License, 6 * Version 2, June 1991 (in the distribution as file licence.html, 7 * and also available at http://gate.ac.uk/gate/licence.html). 8 * 9 * Cristian URSU 05/03/2001 10 * 11 * $Id: BootStrapDialog.java,v 1.9 2001/07/09 13:43:10 cursu Exp $ 12 * 13 */ 14 15 package gate.gui; 16 17 import gate.*; 18 import gate.annotation.*; 19 import gate.persist.*; 20 import gate.util.*; 21 import gate.creole.*; 22 23 import javax.swing.*; 24 import java.awt.event.*; 25 import java.awt.*; 26 import java.util.*; 27 28 /** 29 * This class is used to handle BootStrap wizard with the Gate GUI interface. 30 */ 31 public class BootStrapDialog extends JDialog{ 32 33 MainFrame mainFrame = null; 34 BootStrapDialog thisBootStrapDialog = null; 35 BootStrap bootStrapWizard = null; 36 // Local data 37 String resourceName = null; 38 String packageName = null; 39 String resourceType = null; 40 Map resourceTypes = null; 41 String className = null; 42 Set resourceInterfaces = null; 43 String possibleInterfaces = null; 44 String pathNewProject = null; 45 46 // GUI components 47 JLabel resourceNameLabel = null; 48 JTextField resourceNameTextField = null; 49 50 JLabel packageNameLabel = null; 51 JTextField packageNameTextField = null; 52 53 JLabel resourceTypesLabel = null; 54 JComboBox resourceTypesComboBox = null; 55 56 JLabel classNameLabel = null; 57 JTextField classNameTextField = null; 58 59 JLabel interfacesLabel = null; 60 JTextField interfacesTextField = null; 61 62 JLabel chooseFolderLabel = null; 63 JTextField chooseFolderTextField = null; 64 JButton chooseFolderButton = null; 65 66 JButton createResourceButton = null; 67 JButton cancelButton = null; 68 69 JFileChooser fileChooser = null; 70 71 public BootStrapDialog(MainFrame aMainFrame){ 72 mainFrame = aMainFrame; 73 thisBootStrapDialog = this; 74 this.setTitle("BootStrap Wizard"); 75 initLocalData(); 76 initGuiComponents(); 77 initListeners(); 78 79 }//BootStrapDialog 80 81 private void doCreateResource(){ 82 // Collect the resourceName and signal ERROR if something goes wrong 83 resourceName = resourceNameTextField.getText(); 84 if (resourceName == null || "".equals(resourceName)){ 85 thisBootStrapDialog.setModal(false); 86 JOptionPane.showMessageDialog(mainFrame, 87 "A name for the resource must be provided", 88 "ERROR !", 89 JOptionPane.ERROR_MESSAGE); 90 thisBootStrapDialog.setModal(true); 91 return; 92 }// End if 93 94 // Collect the packageName and signal ERROR if something goes wrong 95 packageName = packageNameTextField.getText(); 96 if (packageName == null || "".equals(packageName)){ 97 thisBootStrapDialog.setModal(false); 98 JOptionPane.showMessageDialog(mainFrame, 99 "A package name must be provided", 100 "ERROR !", 101 JOptionPane.ERROR_MESSAGE); 102 thisBootStrapDialog.setModal(true); 103 return; 104 }// End if 105 106 // Collect the className and signal ERROR if something goes wrong 107 className = classNameTextField.getText(); 108 if (className == null || "".equals(className)){ 109 thisBootStrapDialog.setModal(false); 110 JOptionPane.showMessageDialog(mainFrame, 111 "A name for the implementing class must be provided", 112 "ERROR !", 113 JOptionPane.ERROR_MESSAGE); 114 thisBootStrapDialog.setModal(true); 115 return; 116 }// End if 117 118 // Collect the pathNewproject and signal ERROR if something goes wrong 119 pathNewProject = chooseFolderTextField.getText(); 120 if (pathNewProject == null || "".equals(pathNewProject)){ 121 thisBootStrapDialog.setModal(false); 122 JOptionPane.showMessageDialog(mainFrame, 123 "A path to the creation folder must be provided", 124 "ERROR !", 125 JOptionPane.ERROR_MESSAGE); 126 thisBootStrapDialog.setModal(true); 127 return; 128 }// End if 129 130 // Collect the resourceType and signal ERROR if something goes wrong 131 resourceType = (String)resourceTypesComboBox.getSelectedItem(); 132 resourceInterfaces = this.getSelectedInterfaces(); 133 134 Thread thread = new Thread(Thread.currentThread().getThreadGroup(), 135 new CreateResourceRunner(), 136 "BootstrapDialog1"); 137 thread.setPriority(Thread.MIN_PRIORITY); 138 thread.start(); 139 }//doCreateResource(); 140 141 /**Initialises the data (the loaded resources)*/ 142 public void initLocalData(){ 143 pathNewProject = new String("."); 144 resourceTypes = new HashMap(); 145 resourceTypes.put("LanguageResource","gate.LanguageResource"); 146 resourceTypes.put("VisualResource","gate.VisualResource"); 147 resourceTypes.put("ProcessingResource","gate.ProcessingResource"); 148 149 possibleInterfaces = (String) resourceTypes.get("LanguageResource"); 150 if (possibleInterfaces == null) 151 possibleInterfaces = new String(); 152 }// initLocalData 153 154 /** 155 * This method initializes the GUI components 156 */ 157 public void initGuiComponents(){ 158 159 //Initialise GUI components 160 this.getContentPane().setLayout( 161 new BoxLayout(this.getContentPane(),BoxLayout.Y_AXIS)); 162 this.setModal(true); 163 // Init resource name 164 resourceNameLabel = new JLabel("Resource name, e.g. myMorph"); 165 resourceNameLabel.setToolTipText("The name of the resource" + 166 " you want to create"); 167 resourceNameLabel.setOpaque(true); 168 resourceNameLabel.setAlignmentX(Component.LEFT_ALIGNMENT); 169 resourceNameTextField = new JTextField(); 170 resourceNameTextField.setAlignmentX(Component.LEFT_ALIGNMENT); 171 resourceNameTextField.setColumns(40); 172 Dimension dim = new Dimension( 173 resourceNameTextField.getPreferredSize().width, 174 resourceNameTextField.getPreferredSize().height); 175 resourceNameTextField.setPreferredSize(dim); 176 resourceNameTextField.setMinimumSize(dim); 177 178 // Init package name 179 packageNameLabel = 180 new JLabel("Resource package, e.g. sheffield.creole.morph"); 181 packageNameLabel.setToolTipText("The Java package of the resource" + 182 " you want to create"); 183 packageNameLabel.setOpaque(true); 184 packageNameLabel.setAlignmentX(Component.LEFT_ALIGNMENT); 185 packageNameTextField = new JTextField(); 186 packageNameTextField.setAlignmentX(Component.LEFT_ALIGNMENT); 187 packageNameTextField.setColumns(40); 188 dim = new Dimension( packageNameTextField.getPreferredSize().width, 189 packageNameTextField.getPreferredSize().height); 190 packageNameTextField.setPreferredSize(dim); 191 packageNameTextField.setMinimumSize(dim); 192 193 // init resourceTypesComboBox 194 resourceTypesLabel = new JLabel("Resource type"); 195 resourceTypesLabel.setToolTipText("Resources must be LRs, PRs or VRs"); 196 resourceTypesLabel.setOpaque(true); 197 resourceTypesLabel.setAlignmentX(Component.LEFT_ALIGNMENT); 198 Vector comboCont = new Vector(resourceTypes.keySet()); 199 Collections.sort(comboCont); 200 resourceTypesComboBox = new JComboBox(comboCont); 201 resourceTypesComboBox.setEditable(false); 202 resourceTypesComboBox.setAlignmentX(Component.LEFT_ALIGNMENT); 203 204 // init class name 205 classNameLabel = new JLabel("Implementing class name, e.g. Morpher"); 206 classNameLabel.setToolTipText("The name of the class that " + 207 "impements this resource"); 208 classNameLabel.setOpaque(true); 209 classNameLabel.setAlignmentX(Component.LEFT_ALIGNMENT); 210 classNameTextField = new JTextField(); 211 classNameTextField.setAlignmentX(Component.LEFT_ALIGNMENT); 212 classNameTextField.setColumns(40); 213 dim = new Dimension(classNameTextField.getPreferredSize().width, 214 classNameTextField.getPreferredSize().height); 215 216 classNameTextField.setPreferredSize(dim); 217 classNameTextField.setMinimumSize(dim); 218 // classNameTextField.setMaximumSize(dim); 219 220 // init interfaces 221 interfacesLabel = new JLabel("Interfaces implemented"); 222 interfacesLabel.setToolTipText( 223 "Any additional interfaces implemented, separated by comma" 224 ); 225 interfacesLabel.setOpaque(true); 226 interfacesLabel.setAlignmentX(Component.LEFT_ALIGNMENT); 227 interfacesTextField = new JTextField(possibleInterfaces); 228 interfacesTextField.setAlignmentX(Component.LEFT_ALIGNMENT); 229 interfacesTextField.setColumns(40); 230 dim = new Dimension(interfacesTextField.getPreferredSize().width, 231 interfacesTextField.getPreferredSize().height); 232 233 interfacesTextField.setPreferredSize(dim); 234 interfacesTextField.setMinimumSize(dim); 235 // interfacesTextField.setMaximumSize(dim); 236 237 // init choose Folder 238 chooseFolderLabel = new JLabel("Create in folder ..."); 239 chooseFolderLabel.setOpaque(true); 240 chooseFolderLabel.setAlignmentX(Component.LEFT_ALIGNMENT); 241 chooseFolderLabel.setToolTipText("Select the name of the folder where" + 242 " you want the resource to be created."); 243 chooseFolderButton = new JButton("Browse"); 244 chooseFolderButton.setAlignmentX(Component.LEFT_ALIGNMENT); 245 chooseFolderTextField = new JTextField(); 246 chooseFolderTextField.setAlignmentX(Component.LEFT_ALIGNMENT); 247 chooseFolderTextField.setColumns(35); 248 dim = new Dimension(chooseFolderTextField.getPreferredSize().width, 249 chooseFolderTextField.getPreferredSize().height); 250 251 chooseFolderTextField.setPreferredSize(dim); 252 chooseFolderTextField.setMinimumSize(dim); 253 // chooseFolderTextField.setMaximumSize(dim); 254 255 // init createresource 256 createResourceButton = new JButton("Finish"); 257 // init cancel 258 cancelButton = new JButton("Cancel"); 259 fileChooser = new JFileChooser(); 260 261 // ARANGE the components 262 // Put all those components at their place 263 Box mainBox = new Box(BoxLayout.Y_AXIS); 264 265 // resourceName 266 Box currentBox = new Box(BoxLayout.Y_AXIS); 267 currentBox.add(resourceNameLabel); 268 currentBox.add(resourceNameTextField); 269 mainBox.add(currentBox); 270 271 mainBox.add(Box.createRigidArea(new Dimension(0,10))); 272 273 // packageName 274 currentBox = new Box(BoxLayout.Y_AXIS); 275 currentBox.add(packageNameLabel); 276 currentBox.add(packageNameTextField); 277 mainBox.add(currentBox); 278 279 mainBox.add(Box.createRigidArea(new Dimension(0,10))); 280 281 // resourceTypes 282 currentBox = new Box(BoxLayout.Y_AXIS); 283 currentBox.add(resourceTypesLabel); 284 currentBox.add(resourceTypesComboBox); 285 mainBox.add(currentBox); 286 287 mainBox.add(Box.createRigidArea(new Dimension(0,10))); 288 289 // className 290 currentBox = new Box(BoxLayout.Y_AXIS); 291 currentBox.add(classNameLabel); 292 currentBox.add(classNameTextField); 293 mainBox.add(currentBox); 294 295 mainBox.add(Box.createRigidArea(new Dimension(0,10))); 296 297 // interfaces 298 currentBox = new Box(BoxLayout.Y_AXIS); 299 currentBox.add(interfacesLabel); 300 currentBox.add(interfacesTextField); 301 mainBox.add(currentBox); 302 303 mainBox.add(Box.createRigidArea(new Dimension(0,10))); 304 305 // folderName 306 currentBox = new Box(BoxLayout.Y_AXIS); 307 currentBox.add(chooseFolderLabel); 308 JPanel tmpBox = new JPanel(); 309 tmpBox.setLayout(new BoxLayout(tmpBox,BoxLayout.X_AXIS)); 310 tmpBox.setAlignmentX(Component.LEFT_ALIGNMENT); 311 tmpBox.add(chooseFolderTextField); 312 tmpBox.add(chooseFolderButton); 313 currentBox.add(tmpBox); 314 mainBox.add(currentBox); 315 316 mainBox.add(Box.createRigidArea(new Dimension(0,20))); 317 318 tmpBox = new JPanel(); 319 tmpBox.setLayout(new BoxLayout(tmpBox,BoxLayout.X_AXIS)); 320 tmpBox.setAlignmentX(Component.LEFT_ALIGNMENT); 321 tmpBox.add(Box.createHorizontalGlue()); 322 tmpBox.add(createResourceButton); 323 tmpBox.add(Box.createRigidArea(new Dimension(25,0))); 324 tmpBox.add(cancelButton); 325 tmpBox.add(Box.createHorizontalGlue()); 326 mainBox.add(tmpBox); 327 328 // Add a space 329 this.getContentPane().add(Box.createVerticalGlue()); 330 this.getContentPane().add(Box.createRigidArea(new Dimension(0,5))); 331 this.getContentPane().add(mainBox); 332 this.getContentPane().add(Box.createRigidArea(new Dimension(0,5))); 333 this.getContentPane().add(Box.createVerticalGlue()); 334 335 this.pack(); 336 //////////////////////////////// 337 // Center it on screen 338 /////////////////////////////// 339 Dimension ownerSize; 340 Point ownerLocation; 341 if(getOwner() == null){ 342 ownerSize = Toolkit.getDefaultToolkit().getScreenSize(); 343 ownerLocation = new Point(0, 0); 344 }else{ 345 ownerSize = getOwner().getSize(); 346 ownerLocation = getOwner().getLocation(); 347 if(ownerSize.height == 0 || 348 ownerSize.width == 0 || 349 !getOwner().isVisible()){ 350 ownerSize = Toolkit.getDefaultToolkit().getScreenSize(); 351 ownerLocation = new Point(0, 0); 352 } 353 } 354 //Center the window 355 Dimension frameSize = getSize(); 356 if (frameSize.height > ownerSize.height) 357 frameSize.height = ownerSize.height; 358 if (frameSize.width > ownerSize.width) 359 frameSize.width = ownerSize.width; 360 setLocation(ownerLocation.x + (ownerSize.width - frameSize.width) / 2, 361 ownerLocation.y + (ownerSize.height - frameSize.height) / 2); 362 }//initGuiComponents 363 364 /** 365 * This one initializes the listeners fot the GUI components 366 */ 367 public void initListeners(){ 368 369 createResourceButton.addActionListener(new java.awt.event.ActionListener(){ 370 public void actionPerformed(ActionEvent e){ 371 doCreateResource(); 372 }//actionPerformed 373 }); 374 375 cancelButton.addActionListener(new java.awt.event.ActionListener(){ 376 public void actionPerformed(ActionEvent e){ 377 thisBootStrapDialog.hide(); 378 }//actionPerformed 379 }); 380 381 resourceTypesComboBox.addActionListener(new ActionListener(){ 382 public void actionPerformed(ActionEvent e){ 383 String selectedItem =(String) resourceTypesComboBox.getSelectedItem(); 384 possibleInterfaces = (String)resourceTypes.get(selectedItem); 385 interfacesTextField.setText(possibleInterfaces); 386 }// actionPerformed(); 387 }); 388 389 chooseFolderButton.addActionListener(new java.awt.event.ActionListener(){ 390 public void actionPerformed(ActionEvent e){ 391 // choose folder code 392 fileChooser.setDialogTitle("Select the path for this resource"); 393 fileChooser.setFileSelectionMode(fileChooser.DIRECTORIES_ONLY); 394 if(fileChooser.showOpenDialog(mainFrame) == fileChooser.APPROVE_OPTION){ 395 pathNewProject = fileChooser.getSelectedFile().toString(); 396 fileChooser.setCurrentDirectory(fileChooser.getCurrentDirectory()); 397 }// End if 398 chooseFolderTextField.setText(pathNewProject); 399 400 }//actionPerformed 401 }); 402 403 }//initListeners 404 405 406 /** It returns the interfaces the resource implements*/ 407 public Set getSelectedInterfaces(){ 408 String interfaces = interfacesTextField.getText(); 409 resourceInterfaces = new HashSet(); 410 if (interfaces == null || "".equals(interfaces)) 411 return resourceInterfaces; 412 StringTokenizer tokenizer = new StringTokenizer(interfaces,","); 413 while (tokenizer.hasMoreElements()){ 414 String token = tokenizer.nextToken(); 415 resourceInterfaces.add(token); 416 }// end While 417 return resourceInterfaces; 418 }//getSelectedInterfaces 419 420 /**Class used to run an annot. diff in a new thread*/ 421 class CreateResourceRunner implements Runnable{ 422 423 public CreateResourceRunner(){ 424 }// CreateResourceRunner() 425 426 public void run(){ 427 428 429 try{ 430 bootStrapWizard = new BootStrap(); 431 bootStrapWizard.createResource(resourceName, 432 packageName, 433 resourceType, 434 className, 435 resourceInterfaces, 436 pathNewProject); 437 thisBootStrapDialog.hide(); 438 JOptionPane.showMessageDialog(mainFrame, 439 resourceName + " creation succeeded !\n" + 440 "Look for it in " + pathNewProject, 441 "DONE !", 442 JOptionPane.DEFAULT_OPTION); 443 }catch (Exception e){ 444 thisBootStrapDialog.setModal(false); 445 e.printStackTrace(Err.getPrintWriter()); 446 JOptionPane.showMessageDialog(mainFrame, 447 e.getMessage() + "\n Resource creation stopped !", 448 "BootStrap error !", 449 JOptionPane.ERROR_MESSAGE); 450 thisBootStrapDialog.setModal(true); 451 }// End try 452 }// run(); 453 }//CreateResourceRunner 454 455 }//BootStrapDialog
|
BootStrapDialog |
|