| 1 30 31 package com.genimen.djeneric.tools.specifier; 32 33 import java.awt.AWTEvent ; 34 import java.awt.BorderLayout ; 35 import java.awt.Color ; 36 import java.awt.Component ; 37 import java.awt.Dimension ; 38 import java.awt.Image ; 39 import java.awt.SystemColor ; 40 import java.awt.Toolkit ; 41 import java.awt.event.ActionEvent ; 42 import java.awt.event.ActionListener ; 43 import java.awt.event.InputEvent ; 44 import java.awt.event.KeyEvent ; 45 import java.awt.event.MouseEvent ; 46 import java.awt.event.WindowEvent ; 47 import java.io.BufferedWriter ; 48 import java.io.File ; 49 import java.io.FileInputStream ; 50 import java.io.FileNotFoundException ; 51 import java.io.FileWriter ; 52 import java.io.IOException ; 53 import java.io.InputStream ; 54 import java.net.URL ; 55 import java.util.ArrayList ; 56 import java.util.HashMap ; 57 import java.util.Iterator ; 58 import java.util.StringTokenizer ; 59 60 import javax.swing.AbstractAction ; 61 import javax.swing.ActionMap ; 62 import javax.swing.ImageIcon ; 63 import javax.swing.InputMap ; 64 import javax.swing.JButton ; 65 import javax.swing.JComponent ; 66 import javax.swing.JFileChooser ; 67 import javax.swing.JLabel ; 68 import javax.swing.JMenu ; 69 import javax.swing.JMenuBar ; 70 import javax.swing.JMenuItem ; 71 import javax.swing.JOptionPane ; 72 import javax.swing.JPanel ; 73 import javax.swing.JPopupMenu ; 74 import javax.swing.JScrollPane ; 75 import javax.swing.JSplitPane ; 76 import javax.swing.KeyStroke ; 77 import javax.swing.event.TreeExpansionEvent ; 78 import javax.swing.event.TreeSelectionEvent ; 79 import javax.swing.tree.DefaultMutableTreeNode ; 80 import javax.swing.tree.DefaultTreeModel ; 81 import javax.swing.tree.ExpandVetoException ; 82 import javax.swing.tree.TreePath ; 83 84 import com.genimen.djeneric.language.Messages; 85 import com.genimen.djeneric.repository.DjExtent; 86 import com.genimen.djeneric.repository.DjList; 87 import com.genimen.djeneric.repository.DjModelView; 88 import com.genimen.djeneric.repository.DjObject; 89 import com.genimen.djeneric.repository.DjPersistenceManager; 90 import com.genimen.djeneric.repository.DjPersistenceManagerFactory; 91 import com.genimen.djeneric.repository.DjSession; 92 import com.genimen.djeneric.repository.DjUid; 93 import com.genimen.djeneric.repository.exceptions.DjenericException; 94 import com.genimen.djeneric.repository.util.DjObjectCloner; 95 import com.genimen.djeneric.repository.util.DjObjectExporter; 96 import com.genimen.djeneric.repository.util.DjObjectImporter; 97 import com.genimen.djeneric.repository.util.ImportAbortedException; 98 import com.genimen.djeneric.structure.EditorDefinition; 99 import com.genimen.djeneric.structure.ExtentUsage; 100 import com.genimen.djeneric.structure.ResourceDefinition; 101 import com.genimen.djeneric.structure.ScriptDefinition; 102 import com.genimen.djeneric.tools.common.AboutDialog; 103 import com.genimen.djeneric.tools.common.DjenericTool; 104 import com.genimen.djeneric.tools.common.ModelViewDialog; 105 import com.genimen.djeneric.tools.io.DjenericDocumentHandler; 106 import com.genimen.djeneric.tools.specifier.dialogs.ExportOptionsDialog; 107 import com.genimen.djeneric.tools.specifier.dialogs.ImportOptionsDialog; 108 import com.genimen.djeneric.tools.specifier.dialogs.ImportResultDialog; 109 import com.genimen.djeneric.tools.specifier.dialogs.UidResolverDialog; 110 import com.genimen.djeneric.tools.specifier.editor.EditorPanel; 111 import com.genimen.djeneric.tools.specifier.editor.ScriptRunnerPanel; 112 import com.genimen.djeneric.tools.specifier.interfaces.DjenericEditorEnvironment; 113 import com.genimen.djeneric.tools.specifier.interfaces.ObjectEditor; 114 import com.genimen.djeneric.tools.specifier.interfaces.SpecifierPanel; 115 import com.genimen.djeneric.tools.specifier.menusystem.MenuExtensionAction; 116 import com.genimen.djeneric.tools.specifier.menusystem.MenuExtensionDescr; 117 import com.genimen.djeneric.tools.specifier.menusystem.MenuFactory; 118 import com.genimen.djeneric.tools.specifier.tree.DjenericFolder; 119 import com.genimen.djeneric.tools.specifier.tree.DjenericNode; 120 import com.genimen.djeneric.tools.specifier.tree.DjenericTree; 121 import com.genimen.djeneric.tools.specifier.tree.DjenericTreeCellRenderer; 122 import com.genimen.djeneric.tools.specifier.tree.DjenericTreeNode; 123 import com.genimen.djeneric.ui.DjCloseable; 124 import com.genimen.djeneric.ui.DjTabbedPane; 125 import com.genimen.djeneric.ui.DjVerticalFlowLayout; 126 import com.genimen.djeneric.ui.Util; 127 import com.genimen.djeneric.util.DjEnvironment; 128 import com.genimen.djeneric.util.DjFileFilter; 129 import com.genimen.djeneric.util.DjLogPrintStream; 130 import com.genimen.djeneric.util.DjLogger; 131 import com.genimen.djeneric.util.DjResourceClassLoader; 132 import com.genimen.djeneric.util.DjStringReplacer; 133 import com.genimen.djeneric.util.DjVersion; 134 135 public class Specifier extends DjenericTool implements DjenericEditorEnvironment 136 { 137 private static final long serialVersionUID = 1L; 138 private static final String DJENERICMENU_XML = "djenericmenu.xml"; 139 private static final String EXPORTDIR = "exportdir"; 140 protected final String PROPERTIES_FILE_NAME = DjEnvironment.getAbsoluteFileName("specifier.properties"); 141 protected final static String LOG_FILE_NAME = DjEnvironment.getAbsoluteFileName("specifier.log"); 142 public final static String OK_MSG = Messages.getString("global.Ok"); 143 JSplitPane _splitpane = new JSplitPane (); 144 JPanel jPanel1 = new JPanel (); 145 BorderLayout borderLayout1 = new BorderLayout (); 146 JPanel jPanel2 = new JPanel (); 147 JButton _butExpandAll = new JButton (); 148 DjVerticalFlowLayout verticalFlowLayout1 = new DjVerticalFlowLayout(); 149 JScrollPane jScrollPane1 = new JScrollPane (); 150 DjenericTree _tree = new DjenericTree(); 151 JButton _butCollapseAll = new JButton (); 152 JButton _butDelete = new JButton (); 153 JButton _butCopy = new JButton (); 154 JButton _butExport = new JButton (); 155 JButton _butImport = new JButton (); 156 JButton _butCreate = new JButton (); 157 JButton _butEdit = new JButton (); 158 JButton _butReload = new JButton (); 159 DjPersistenceManager _mgr; 160 DjSession _session; 161 DjenericFolder _root = new DjenericFolder(); 162 DefaultTreeModel _treeModel = new DefaultTreeModel (_root); 163 DjenericTreeCellRenderer _treeCellRendrer = new DjenericTreeCellRenderer(); 164 JLabel _lblStatus = new JLabel (); 165 ExtentUsage[] navigatorStructure = null; 166 JPanel _desktopPanel = new JPanel (); 167 BorderLayout borderLayout2 = new BorderLayout (); 168 DjTabbedPane _tabs = new DjTabbedPane(); 169 JButton _butFilter = new JButton (); 170 JLabel jLabel1 = new JLabel (); 171 JLabel jLabel2 = new JLabel (); 172 JLabel jLabel3 = new JLabel (); 173 EditorDefinition[] _editors; 174 HashMap _resources = new HashMap (); 175 HashMap _cachedExtentions = new HashMap (); 176 177 DjModelView _selectedView; 178 179 public Specifier(String repositories) 180 { 181 enableEvents(AWTEvent.WINDOW_EVENT_MASK); 182 setIconImage(getImage("specifier.gif")); 183 try 184 { 185 loadProps(PROPERTIES_FILE_NAME); 186 setStatusLabel(_lblStatus); 187 setupPersistenceManager(repositories); 188 setupSession(); 189 setupContext(); 190 jbInit(); 191 _selectedView = loadView(); 192 DjenericDocumentHandler handler = _selectedView.getDocumentHandler(); 193 setupMenu(handler); 194 setupButtons(); 195 setupWindow(); 196 setupNavigator(handler); 197 setupEditors(handler); 198 setupResources(handler); 199 } 200 catch (Exception e) 201 { 202 handleException(e); 203 System.exit(-1); 204 } 205 } 206 207 private void setupMenu(DjenericDocumentHandler handler) throws DjenericException 208 { 209 JMenuBar menuBar = new JMenuBar (); 210 JMenu mnuFile = new JMenu (); 211 JMenuItem mnuOpen = new JMenuItem (); 212 JMenuItem mnuExit = new JMenuItem (); 213 JMenu mnuHelp = new JMenu (); 214 JMenuItem mnuAbout = new JMenuItem (); 215 JMenuItem mnuReloadAll = new JMenuItem (); 216 mnuReloadAll.setText(Messages.getString("Specifier.ReloadView")); 217 mnuFile.setText(Messages.getString("global.File")); 218 mnuOpen.setText(Messages.getString("ModelEditor.OpenView")); 219 mnuExit.setText(Messages.getString("global.Exit")); 220 mnuHelp.setText(Messages.getString("global.Help")); 221 mnuAbout.setText(Messages.getString("Specifier.About")); 222 mnuReloadAll.setAccelerator(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_F12, 0, false)); 223 mnuOpen.setMnemonic('O'); 224 mnuOpen.setAccelerator(javax.swing.KeyStroke.getKeyStroke(79, java.awt.event.KeyEvent.CTRL_MASK, false)); 225 mnuReloadAll.addActionListener(new java.awt.event.ActionListener () 226 { 227 public void actionPerformed(ActionEvent e) 228 { 229 mnuReloadView(e); 230 } 231 }); 232 mnuExit.addActionListener(new java.awt.event.ActionListener () 233 { 234 public void actionPerformed(ActionEvent e) 235 { 236 mnuExit(e); 237 } 238 }); 239 mnuOpen.addActionListener(new java.awt.event.ActionListener () 240 { 241 public void actionPerformed(ActionEvent e) 242 { 243 mnuOpen(e); 244 } 245 }); 246 mnuAbout.addActionListener(new java.awt.event.ActionListener () 247 { 248 public void actionPerformed(ActionEvent e) 249 { 250 mnuAbout(e); 251 } 252 }); 253 menuBar.add(mnuFile); 254 255 InputStream is = getResourceAsStream(DJENERICMENU_XML); 256 if (is != null) 257 { 258 MenuFactory factory = new MenuFactory(this); 259 try 260 { 261 JMenu [] menus = factory.createMenus(is); 262 for (int i = 0; i < menus.length; i++) 263 menuBar.add(menus[i]); 264 } 265 catch (Exception e) 266 { 267 setStatusMessage(e); 268 } 269 } 270 menuBar.add(mnuHelp); 271 mnuFile.add(mnuOpen); 272 mnuFile.add(mnuReloadAll); 273 mnuFile.add(mnuExit); 274 mnuHelp.add(mnuAbout); 275 ScriptDefinition[] scripts = handler.getScripts(this); 276 for (int i = 0; i < scripts.length; i++) 277 { 278 String menuName = Messages.getString("Specifier.Actions"); 279 String menuItemName = scripts[i].getTitle(); 280 int idx = menuItemName.lastIndexOf('|'); 281 if (idx != -1) 282 { 283 menuName = menuItemName.substring(0, idx).trim(); 284 menuItemName = menuItemName.substring(idx + 1).trim(); 285 if (menuItemName.length() == 0) menuItemName = Messages.getString("Specifier.UnnamedAction"); 286 } 287 StringTokenizer stok = new StringTokenizer (menuName, "|"); 288 JMenu menu = getMenu(menuBar, stok.nextToken()); 289 while (stok.hasMoreTokens()) 290 { 291 menu = getMenu(menu, stok.nextToken()); 292 } 293 JMenuItem menuItem = new JMenuItem (); 294 menuItem.setText(menuItemName); 295 menu.add(menuItem); 296 menuItem.addActionListener(new ScriptAction(this, scripts[i].getCode())); 297 } 298 setJMenuBar(menuBar); 299 invalidate(); 300 validate(); 301 } 302 303 protected void mnuOpen(ActionEvent e) 304 { 305 try 306 { 307 if (isAtLeastOneEditorOpen()) throw new DjenericException(Messages.getString("Specifier.CloseEditorsFirst")); 308 _selectedView = loadView(); 309 reloadViewDefinition(); 310 } 311 catch (DjenericException e1) 312 { 313 setStatusMessage(e1); 314 } 315 } 316 317 protected void mnuReloadView(ActionEvent e) 318 { 319 try 320 { 321 reloadViewDefinition(); 322 setStatusMessage(Messages.getString("Specifier.ViewReloaded"), true); 323 } 324 catch (DjenericException e1) 325 { 326 setStatusMessage(e1); 327 } 328 } 329 330 private JMenu getMenu(JMenu ownerMenu, String menuItemName) 331 { 332 for (int i = 0; i < ownerMenu.getMenuComponentCount(); i++) 333 { 334 if (!(ownerMenu.getMenuComponent(i) instanceof JMenu )) continue; 335 JMenu menu = (JMenu ) ownerMenu.getMenuComponent(i); 336 if (menu.getText().equalsIgnoreCase(menuItemName)) return menu; 337 } 338 JMenu menu = new JMenu (); 339 menu.setText(menuItemName); 340 ownerMenu.add(menu, ownerMenu.getMenuComponentCount()); 341 return menu; 342 } 343 344 private JMenu getMenu(JMenuBar bar, String menuName) 345 { 346 for (int i = 0; i < bar.getMenuCount(); i++) 347 { 348 JMenu menu = bar.getMenu(i); 349 if (menu.getText().equalsIgnoreCase(menuName)) return menu; 350 } 351 JMenu menu = new JMenu (); 352 menu.setText(menuName); 353 bar.add(menu, bar.getMenuCount() - 1); 355 return menu; 356 } 357 358 protected void setupPersistenceManager(String repositories) throws DjenericException, FileNotFoundException  359 { 360 DjPersistenceManagerFactory fact = new DjPersistenceManagerFactory(this, repositories); 361 _mgr = fact.createInstance(); 362 } 363 364 protected void setupSession() throws DjenericException 365 { 366 _session = _mgr.createSession(); 367 _session.setValidateObjectsAfterLoading(false); 368 } 369 370 protected void setupContext() throws DjenericException 371 { 372 _mgr.determineContext(); 373 } 374 375 protected void setupButtons() 376 { 377 _butCreate.setIcon(getImageIcon("new.gif")); 378 _butCollapseAll.setIcon(getImageIcon("collapseall.gif")); 379 _butCopy.setIcon(getImageIcon("copy.gif")); 380 _butExport.setIcon(getImageIcon("export.gif")); 381 _butImport.setIcon(getImageIcon("import.gif")); 382 _butDelete.setIcon(getImageIcon("delete.gif")); 383 _butEdit.setIcon(getImageIcon("edit.gif")); 384 _butExpandAll.setIcon(getImageIcon("expandall.gif")); 385 _butReload.setIcon(getImageIcon("reload.gif")); 386 _butFilter.setIcon(getImageIcon("filter.gif")); 387 } 388 389 protected void setupWindow() 390 { 391 int divloc = Integer.parseInt(getProperty("window.dividerloc", "225")); 392 _splitpane.setDividerLocation(divloc); 393 int width = Integer.parseInt(getProperty("window.width", "400")); 394 int height = Integer.parseInt(getProperty("window.height", "400")); 395 setSize(new Dimension (width, height)); 396 setTitle(Messages.getString("Specifier.title", DjVersion.getVersion(), _selectedView.getCode(), 397 getPersistenceManager().getConnectionTitle())); 398 JComponent contentPane = (JComponent ) getContentPane(); 399 InputMap inputMap = contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); 400 String keyNextTab = "NextTab"; 401 String keyPrevTab = "prevTab"; 402 String keyCloseTab = "closeTab"; 403 String keyCloseAllTab = "closeAllTab"; 404 inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_F6, 0, true), keyNextTab); 405 inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_F6, KeyEvent.SHIFT_DOWN_MASK, true), keyPrevTab); 406 inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_F4, KeyEvent.CTRL_DOWN_MASK, true), keyCloseTab); 407 inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_F4, KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK, true), 408 keyCloseAllTab); 409 ActionMap actionMap = contentPane.getActionMap(); 410 actionMap.put(keyNextTab, new AbstractAction () 411 { 412 private static final long serialVersionUID = 1L; 413 414 public void actionPerformed(ActionEvent e) 415 { 416 nextTab(); 417 } 418 }); 419 actionMap.put(keyPrevTab, new AbstractAction () 420 { 421 private static final long serialVersionUID = 1L; 422 423 public void actionPerformed(ActionEvent e) 424 { 425 prevTab(); 426 } 427 }); 428 actionMap.put(keyCloseTab, new AbstractAction () 429 { 430 private static final long serialVersionUID = 1L; 431 432 public void actionPerformed(ActionEvent e) 433 { 434 closeTab(); 435 } 436 }); 437 actionMap.put(keyCloseAllTab, new AbstractAction () 438 { 439 private static final long serialVersionUID = 1L; 440 441 public void actionPerformed(ActionEvent e) 442 { 443 closeAllTabs(); 444 } 445 }); 446 } 447 448 protected void prevTab() 449 { 450 int idx = _tabs.getSelectedIndex(); 451 if (idx == -1) return; 452 if (idx > 0) 453 { 454 idx--; 455 } 456 else 457 { 458 idx = _tabs.getComponentCount() - 1; 459 } 460 _tabs.setSelectedIndex(idx); 461 } 462 463 protected void nextTab() 464 { 465 int idx = _tabs.getSelectedIndex(); 466 if (idx == -1) return; 467 if (idx < _tabs.getComponentCount() - 1) 468 { 469 idx++; 470 } 471 else 472 { 473 idx = 0; 474 } 475 _tabs.setSelectedIndex(idx); 476 } 477 478 public void removeTab(SpecifierPanel panel) 479 { 480 if (panel instanceof Component ) _tabs.remove((Component ) panel); 481 } 482 483 protected void closeTab() 484 { 485 if (_tabs.getSelectedComponent() instanceof DjCloseable) 486 { 487 DjCloseable te = (DjCloseable) _tabs.getSelectedComponent(); 488 if (te.canClose()) 489 { 490 te.close(); 491 } 492 } 493 else if (_tabs.getSelectedIndex() != 0) 494 { 495 _tabs.remove(_tabs.getSelectedIndex()); 496 } 497 } 498 499 public void closeAllTabs() 500 { 501 while (_tabs.getTabCount() > 0) 502 { 503 if (_tabs.getSelectedComponent() instanceof DjCloseable) 504 { 505 DjCloseable te = (DjCloseable) _tabs.getSelectedComponent(); 506 if (te.canClose()) 507 { 508 te.close(); 509 } 510 else return; 511 } 512 else if (_tabs.getSelectedIndex() != 0) 513 { 514 _tabs.remove(_tabs.getSelectedIndex()); 515 } 516 } 517 } 518 519 protected void reloadView() throws DjenericException 520 { 521 DjSession session = _mgr.createSession(); 522 try 523 { 524 _selectedView.reload(session); 525 } 526 finally 527 { 528 session.close(); 529 } 530 } 531 532 protected boolean isAtLeastOneEditorOpen() 533 { 534 return _tabs.getComponentCount() > 0; 535 } 536 537 protected void reloadViewDefinition() throws DjenericException 538 { 539 boolean modelReloaded = false; 540 if (_mgr.isModelUpdatedExternally()) 541 { 542 if (isAtLeastOneEditorOpen()) throw new DjenericException(Messages.getString("Specifier.CloseEditorsFirst")); 543 _mgr.loadModel(); 544 _session.reset(); 545 modelReloaded = true; 546 } 547 if (modelReloaded) DjLogger.log("Model reloaded"); 548 else DjLogger.log("No need to reload model"); 549 String currentPath = getCurrentSelectionPath(); 550 reloadView(); 551 _root = new DjenericFolder(); 552 _root.setSpecifierPanelContainer(this); 553 _treeModel = new DefaultTreeModel (_root); 554 _root.setTree(_tree); 555 _tree.setModel(_treeModel); 556 DjenericDocumentHandler handler = _selectedView.getDocumentHandler(); 557 setupMenu(handler); 558 setupNavigator(handler); 559 setupEditors(handler); 560 setupResources(handler); 561 setCurrentSelectionPath(currentPath); 562 } 563 564 public void reloadTree() throws DjenericException 565 { 566 String currentPath = getCurrentSelectionPath(); 567 getSession().reset(); 568 for (int i = 0; i < _root.getChildCount(); i++) 569 { 570 if (_root.getChildAt(i) instanceof DjenericTreeNode) 571 { 572 DjenericTreeNode node = (DjenericTreeNode) _root.getChildAt(i); 573 node.reload(); 574 } 575 } 576 setCurrentSelectionPath(currentPath); 577 } 578 579 private void setCurrentSelectionPath(String currentPath) 580 { 581 _root.selectNode(currentPath); 582 } 583 584 private String getCurrentSelectionPath() 585 { 586 DjenericTreeNode[] sels = getSelectedNodes(); 587 String currentPath = ""; 588 if (sels.length > 0) currentPath = sels[0].getPathString(); 589 return currentPath; 590 } 591 592 protected void setupNavigator(DjenericDocumentHandler handler) throws DjenericException 593 { 594 _root.setSpecifierPanelContainer(this); 595 navigatorStructure = _selectedView.getExtentUsages(); 596 for (int i = 0; i < navigatorStructure.length; i++) 597 { 598 DjenericFolder folder = new DjenericFolder(); 599 folder.setExtentUsage(navigatorStructure[i]); 600 _root.insertAsFolder(folder); 601 } 602 _treeModel.nodeStructureChanged(_root); 603 _tree_valueChanged(null); 604 } 605 606 private void setupEditors(DjenericDocumentHandler handler) throws DjenericException 607 { 608 _editors = handler.getEditors(_mgr); 609 } 610 611 protected void setupResources(DjenericDocumentHandler handler) throws DjenericException 612 { 613 ResourceDefinition[] res = handler.getResources(); 614 for (int i = 0; i < res.length; i++) 615 { 616 if (res[i].getType().equalsIgnoreCase("class")) 617 { 618 String name = res[i].getName(); 619 DjStringReplacer sr = new DjStringReplacer(res[i].getPath()); 620 name = sr.replace("/", ".") + name; 621 while (name.startsWith(".")) 622 name = name.substring(1); 623 _resources.put(name, res[i]); 624 } 625 _resources.put(res[i].getPath() + res[i].getName() + "." + res[i].getType(), res[i]); 626 } 627 } 628 629 private DjModelView loadView() throws DjenericException 630 { 631 ModelViewDialog vd = new ModelViewDialog(getContentPane(), _mgr.getCurrentUser()); 632 DjModelView selectedView = vd.getView(); 633 return selectedView; 634 } 635 636 642 protected void jbInit() throws Exception  643 { 644 jPanel1.setLayout(borderLayout1); 645 _butExpandAll.setPreferredSize(new Dimension (24, 24)); 646 _butExpandAll.setToolTipText(Messages.getString("Specifier.ExpandAll")); 647 _butExpandAll.addActionListener(new java.awt.event.ActionListener () 648 { 649 public void actionPerformed(ActionEvent e) 650 { 651 expandAll(e); 652 } 653 }); 654 jPanel2.setLayout(verticalFlowLayout1); 655 _butCollapseAll.setPreferredSize(new Dimension (24, 24)); 656 _butCollapseAll.setToolTipText(Messages.getString("Specifier.CollapseAll")); 657 _butCollapseAll.addActionListener(new java.awt.event.ActionListener () 658 { 659 public void actionPerformed(ActionEvent e) 660 { 661 collapseAll(e); 662 } 663 }); 664 _butDelete.setPreferredSize(new Dimension (24, 24)); 665 _butDelete.setToolTipText(Messages.getString("Specifier.DeleteSelected")); 666 _butDelete.addActionListener(new java.awt.event.ActionListener () 667 { 668 public void actionPerformed(ActionEvent e) 669 { 670 deleteObject(e); 671 } 672 }); 673 _butCopy.setPreferredSize(new Dimension (24, 24)); 674 _butCopy.setToolTipText(Messages.getString("Specifier.CopySelected")); 675 _butCopy.addActionListener(new java.awt.event.ActionListener () 676 { 677 public void actionPerformed(ActionEvent e) 678 { 679 copyObject(); 680 } 681 }); 682 _butExport.setPreferredSize(new Dimension (24, 24)); 683 _butExport.setToolTipText(Messages.getString("Specifier.ExportSelected")); 684 _butExport.addActionListener(new java.awt.event.ActionListener () 685 { 686 public void actionPerformed(ActionEvent e) 687 { 688 exportObject(); 689 } 690 }); 691 _butImport.setPreferredSize(new Dimension (24, 24)); 692 _butImport.setToolTipText(Messages.getString("Specifier.Import")); 693 _butImport.addActionListener(new java.awt.event.ActionListener () 694 { 695 public void actionPerformed(ActionEvent e) 696 { 697 importObject(); 698 } 699 }); 700 _butCreate.setPreferredSize(new Dimension (24, 24)); 701 _butCreate.setToolTipText(Messages.getString("Specifier.CreateNew")); 702 _butCreate.addActionListener(new java.awt.event.ActionListener () 703 { 704 public void actionPerformed(ActionEvent e) 705 { 706 createObject(e); 707 } 708 }); 709 _butEdit.setPreferredSize(new Dimension (24, 24)); 710 _butEdit.setToolTipText(Messages.getString("Specifier.EditSelected")); 711 _butEdit.addActionListener(new java.awt.event.ActionListener () 712 { 713 public void actionPerformed(ActionEvent e) 714 { 715 editObject(e); 716 } 717 }); 718 _butReload.setPreferredSize( |