1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * 23 * 24 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 25 * Use is subject to license terms. 26 * 27 * pmTop.java 28 * Top level 29 */ 30 31 package com.sun.admin.pm.client; 32 33 import java.awt.*; 34 import java.awt.event.*; 35 import java.util.*; 36 import java.util.Vector; 37 import java.lang.*; 38 import javax.swing.JPanel; 39 import javax.swing.JTable; 40 import javax.swing.ListSelectionModel; 41 import javax.swing.event.ListSelectionListener; 42 import javax.swing.event.ListSelectionEvent; 43 import javax.swing.table.AbstractTableModel; 44 import javax.swing.text.*; 45 import javax.swing.border.*; 46 import javax.swing.*; 47 48 import com.sun.admin.pm.server.*; 49 50 51 /* 52 * Top window for printer manager 53 */ 54 55 public class pmTop extends JPanel { 56 57 static private pmTop myTop = null; 58 static private pmHelpFrame helpFrame = null; 59 static private pmAboutBox aboutBox = null; 60 static private pmLogDisplay commandLog = null; 61 static private pmFindFrame findFrame = null; 62 63 JLabel nameserviceLabel = new JLabel(); 64 JLabel domainhostLabel; 65 JLabel defaultpLabel; 66 String defaultPrinter; 67 JScrollPane scrollPane; 68 JTable listTable; 69 Host host = new Host(); 70 private JPanel north = new JPanel(); 71 JPanel center; 72 listTableModel listModel; 73 ListSelectionModel listSM; 74 75 JMenuBar menuBar; 76 JFrame parentFrame; 77 JCheckBoxMenuItem logCheck; 78 JCheckBoxMenuItem confirmCheck; 79 JCheckBoxMenuItem usePPD; 80 JCheckBoxMenuItem useLocalhost; 81 JMenuItem modifyMenuItem = null; 82 JMenuItem deleteMenuItem = null; 83 84 JMenuItem access; 85 JMenuItem local; 86 JMenuItem network; 87 88 int actionindex = 0; 89 private String newNS; 90 NameService ns = null; 91 NameService nisns = null; 92 NameService systemns = null; 93 NameService ldapns = null; 94 95 pmAccess accessView = null; 96 pmInstallPrinter localinstallView = null; 97 pmInstallPrinter networkinstallView = null; 98 pmDelete deleteView = null; 99 pmInstallPrinter modifyView = null; 100 pmLoad loadView = null; 101 102 String clickedPrinter; 103 String selectedPrinter = null; 104 String selprinterServer = null; 105 int selectedRow = -1; 106 107 String cmdLog = null; 108 String errorLog = null; 109 String warningLog = null; 110 111 boolean runningAuth = false; 112 boolean isRoot = false; 113 114 pmFrame frame; 115 116 pmTop(JFrame parent)117 public pmTop(JFrame parent) { 118 parentFrame = parent; 119 setLayout(new BorderLayout()); 120 pmTopInit(); 121 122 } 123 pmTopInit()124 public void pmTopInit() { 125 126 try { 127 systemns = new NameService("system"); 128 } catch (Exception e) { 129 Debug.message("CLNT: system:Nameservice exception " + e); 130 } 131 try { 132 nisns = new NameService("nis"); 133 } catch (Exception e) { 134 Debug.message("CLNT: nis:Nameservice exception " + e); 135 } 136 try { 137 ldapns = new NameService("ldap"); 138 } catch (Exception e) { 139 Debug.message("CLNT: ldap:Nameservice exception " + e); 140 } 141 142 ns = systemns; 143 newNS = "files"; 144 145 // determine root privileges 146 try { 147 ns.checkAuth(); 148 } catch (Exception ax) { 149 Debug.message("CLNT: checkAuth threw " + ax); 150 } 151 152 if (ns.isAuth()) { 153 runningAuth = true; 154 isRoot = true; 155 Debug.message("CLNT: Running as root"); 156 } else 157 Debug.message("CLNT: Not running as root"); 158 159 northPanel(); 160 centerPanel(); 161 southPanel(); 162 163 } 164 165 // Set values so that printer selection null clearSelected()166 public void clearSelected() { 167 selectedPrinter = null; 168 selprinterServer = null; 169 selectedRow = -1; 170 enableEditMenuItems(false); 171 } 172 173 174 // Create north panel with GridBagLayout northPanel()175 public void northPanel() { 176 177 menuBar = new JMenuBar(); 178 menuBar.setBorder(new EmptyBorder(5, 5, 5, 5)); 179 menuBar.add(appMenu()); 180 menuBar.add(objectMenu()); 181 menuBar.add(toolsMenu()); 182 menuBar.add(Box.createHorizontalGlue()); 183 menuBar.add(helpMenu()); 184 185 parentFrame.setJMenuBar(menuBar); 186 } 187 188 public class listTableModel extends AbstractTableModel { 189 int numColumns; 190 191 String[] columnNames = { 192 pmUtility.getResource("Printer.Name"), 193 pmUtility.getResource("Printer.Server"), 194 pmUtility.getResource("Description") 195 196 }; 197 198 // Initialize for JTable calls from SWING classes 199 Vector data = new Vector(0, 0); 200 listTableModel()201 public listTableModel() { 202 numColumns = getColumnCount(); 203 } 204 insertlistTable(String rowDataList[], int numcols)205 public void insertlistTable(String rowDataList[], int numcols) { 206 Vector rowData = new Vector(3, 1); 207 data = new Vector(100, 5); 208 int j = 0; 209 210 if ((rowDataList.length) <= 1) { 211 return; 212 } 213 214 for (int i = 0; i < rowDataList.length; i = i + 3) { 215 rowData = new Vector(3, 1); 216 for (j = 0; j < 3; j++) { 217 rowData.addElement( 218 rowDataList[i + j]); 219 } 220 data.addElement(rowData); 221 } 222 } 223 removeRow(int row)224 public void removeRow(int row) { 225 data.removeElementAt(row); 226 } 227 getRowCount()228 public int getRowCount() { 229 return data.size(); 230 } 231 getColumnCount()232 public int getColumnCount() { 233 return columnNames.length; 234 } 235 getColumnName(int col)236 public String getColumnName(int col) { 237 return columnNames[col]; 238 } 239 getValueAt(int row, int col)240 public Object getValueAt(int row, int col) { 241 Vector rowVector = (Vector)data.elementAt(row); 242 return rowVector.elementAt(col); 243 } 244 setValueAt(String value, int row, int col)245 public void setValueAt(String value, int row, int col) { 246 Vector rowVector = (Vector)data.elementAt(row); 247 rowVector.setElementAt(value, col); 248 } 249 addRow(Vector row)250 public void addRow(Vector row) { 251 data.addElement(row); 252 } 253 findValue(String value)254 public int findValue(String value) { 255 for (int i = 0; i < data.size(); i++) { 256 if (getValueAt(i, 0).equals(value)) 257 return i; 258 } 259 return -1; 260 } 261 262 }; 263 264 265 // called on enter or double-click modifySelectedPrinter()266 void modifySelectedPrinter() { 267 268 ListSelectionModel m = listTable.getSelectionModel(); 269 270 if (m.isSelectionEmpty()) { 271 Debug.message("CLNT: list selection is empty"); 272 return; 273 } 274 275 int selectedRow = m.getMinSelectionIndex(); 276 277 Debug.message("CLNT: list row selected is " + selectedRow); 278 279 selectedPrinter = 280 (String) listTable.getModel().getValueAt(selectedRow, 0); 281 selprinterServer = 282 (String)listTable.getModel().getValueAt(selectedRow, 1); 283 284 Debug.message("CLNT: selectedPrinter is " + selectedPrinter); 285 286 doModify(); 287 } 288 289 290 // Create printer list in center panel centerPanel()291 public void centerPanel() { 292 293 center = new JPanel(); 294 295 listModel = new listTableModel(); 296 listTable = new JTable(listModel); 297 listTable.setColumnSelectionAllowed(false); 298 listTable.setRowSelectionAllowed(true); 299 listTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 300 listTable.setShowGrid(false); 301 listTable.registerKeyboardAction(new ActionListener() { 302 303 public void actionPerformed(ActionEvent e) { 304 Debug.message("CLNT: enter action"); 305 if (runningAuth) 306 modifySelectedPrinter(); 307 else 308 Toolkit.getDefaultToolkit().beep(); 309 }}, 310 KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false), 311 JComponent.WHEN_IN_FOCUSED_WINDOW); 312 313 314 listTable.addMouseListener(new MouseAdapter() { 315 public void mouseClicked(MouseEvent e) { 316 Point pt = e.getPoint(); 317 int rowIndex = listTable.rowAtPoint(pt); 318 int colIndex = listTable.columnAtPoint(pt); 319 int clickCount = e.getClickCount(); 320 321 Debug.message("CLNT: getClickCount() is " + clickCount); 322 323 if (clickCount == 2) { 324 if (rowIndex == -1) { 325 Debug.message("CLNT: clicked outside table"); 326 } else { 327 if (runningAuth) 328 modifySelectedPrinter(); 329 else 330 Toolkit.getDefaultToolkit().beep(); 331 } 332 } 333 } 334 }); 335 336 // Add selection listener 337 ListSelectionModel rowSelectModel = listTable.getSelectionModel(); 338 339 rowSelectModel.addListSelectionListener(new ListSelectionListener() { 340 341 public void valueChanged(ListSelectionEvent e) { 342 343 listSM = (ListSelectionModel)e.getSource(); 344 Debug.message("CLNT: listSM is " + listSM); 345 346 if (listSM.isSelectionEmpty()) { 347 Debug.message("CLNT: list selection is empty"); 348 enableEditMenuItems(false); 349 } else { 350 selectedRow = listSM.getMinSelectionIndex(); 351 Debug.message( 352 "CLNT: list element selected" + selectedRow); 353 selectedPrinter = 354 (String)listTable.getModel().getValueAt(selectedRow, 0); 355 selprinterServer = 356 (String)listTable.getModel().getValueAt(selectedRow, 1); 357 Debug.message( 358 "CLNT: selectedPrinter is " + selectedPrinter); 359 enableEditMenuItems(true); 360 } 361 } 362 }); 363 364 GridBagConstraints c = new GridBagConstraints(); 365 center.setLayout(new BorderLayout()); 366 367 c.insets = new Insets(35, 50, 35, 50); 368 369 try { 370 listModel.insertlistTable(PrinterUtil.getPrinterList(ns), 371 listModel.getColumnCount()); 372 } catch (Exception e) { 373 Debug.fatal("CLNT: pmTop:getPrinterList() caught " + e); 374 pmMessageDialog m = new pmMessageDialog( 375 frame, 376 pmUtility.getResource("Error"), 377 pmUtility.getResource( 378 "Cannot.get.list.of.printers.Exiting."), 379 myTop, 380 "getPrinterListFailed"); 381 m.setVisible(true); 382 System.exit(-1); 383 } 384 385 scrollPane = new JScrollPane(); 386 scrollPane.setViewportView(listTable); 387 388 listTable.setPreferredScrollableViewportSize( 389 new Dimension(500, 500)); 390 scrollPane.getViewport().setView(listTable); 391 center.add(scrollPane); 392 add("Center", center); 393 } 394 395 // Create south panel with grid layout 396 southPanel()397 public void southPanel() { 398 JPanel south = new JPanel(); 399 GridBagConstraints c = new GridBagConstraints(); 400 south.setLayout(new GridBagLayout()); 401 402 // Constraints applied across all entries 403 c.fill = GridBagConstraints.BOTH; 404 c.insets = new Insets(6, 6, 6, 6); 405 c.gridheight = 1; 406 c.gridwidth = 1; 407 c.gridy = 1; 408 409 // Create the labels 410 c.gridx = 0; 411 c.weightx = c.weighty = 1.0; 412 413 try { 414 defaultpLabel = 415 new JLabel(pmUtility.getResource("Default.Printer:") + 416 " " + PrinterUtil.getDefaultPrinter(ns)); 417 418 } catch (Exception e) { 419 Debug.warning("CLNT: pmTop:getDefaultPrinter() caught " + e); 420 defaultpLabel = new JLabel( 421 pmUtility.getResource("Default.Printer:")); 422 } 423 424 south.add(defaultpLabel, c); 425 426 427 if (newNS.startsWith("files")) { 428 try { 429 domainhostLabel = new JLabel(pmUtility.getResource( 430 "Host:") + " " + host.getLocalHostName()); 431 432 nameserviceLabel.setText(" "); 433 434 } catch (Exception e) { 435 Debug.warning("CLNT: pmTop:getLocalHostName caught " + e); 436 } 437 438 } else { 439 try { 440 nameserviceLabel.setText( 441 pmUtility.getResource("Naming.Service:") + " " + newNS); 442 domainhostLabel = new JLabel( 443 pmUtility.getResource("Domain:") + " " + 444 host.getDomainName()); 445 } catch (Exception e) { 446 Debug.warning("CLNT: pmTop:getDomainName caught " + e); 447 } 448 } 449 450 c.weightx = c.weighty = 1.0; 451 c.gridx = 2; 452 south.add(nameserviceLabel, c); 453 c.gridx = 3; 454 south.add(domainhostLabel, c); 455 add("South", south); 456 } 457 458 appMenu()459 public JMenu appMenu() { 460 // name service 461 // --- 462 // cmd line console 463 // confirm all actions 464 // use ppd file 465 // --- 466 // exit 467 468 JMenu appMenu = new JMenu(pmUtility.getResource("Print.Manager")); 469 appMenu.setMnemonic( 470 pmUtility.getIntResource("Print.Manager.mnemonic")); 471 472 appMenu.addMouseListener(new MouseAdapter() { 473 public void mouseClicked(MouseEvent e) { 474 Debug.message("CLNT: appMenu MouseListener"); 475 }; 476 }); 477 478 JMenuItem load = new JMenuItem( 479 pmUtility.getResource("Select.Naming.Service"), 480 pmUtility.getIntResource("Select.Naming.Service.mnemonic")); 481 482 load.addActionListener( 483 new ActionListener() { 484 public void actionPerformed(ActionEvent e) { 485 Debug.message("CLNT: call from load action"); 486 if (loadView != null) 487 loadView.setVisible(true); 488 else 489 loadView = new pmLoad(myTop); 490 loadView.Show(); 491 492 }; 493 }); 494 load.setEnabled(true); 495 appMenu.add(load); 496 497 appMenu.addSeparator(); 498 499 logCheck = new JCheckBoxMenuItem( 500 pmUtility.getResource("Show.Command-Line.Console")); 501 logCheck.setMnemonic( 502 pmUtility.getIntResource("Show.Command-Line.Console.mnemonic")); 503 504 logCheck.addActionListener(new AbstractAction() { 505 public void actionPerformed(ActionEvent e) { 506 Debug.message("CLNT: call from checkbox action"); 507 JCheckBoxMenuItem c = (JCheckBoxMenuItem) e.getSource(); 508 if (c.isSelected() == true) { 509 commandLog.setVisible(true); 510 } else { 511 commandLog.setVisible(false); 512 } 513 } 514 }); 515 516 if (!runningAuth) 517 logCheck.setEnabled(false); 518 519 appMenu.add(logCheck); 520 521 confirmCheck = new JCheckBoxMenuItem( 522 pmUtility.getResource("Confirm.All.Actions"), false); 523 confirmCheck.setMnemonic( 524 pmUtility.getIntResource("Confirm.All.Actions.mnemonic")); 525 if (!runningAuth) 526 confirmCheck.setEnabled(false); 527 528 appMenu.add(confirmCheck); 529 530 usePPD = new JCheckBoxMenuItem( 531 pmUtility.getResource("Use.PPD.files"), true); 532 usePPD.setMnemonic(pmUtility.getIntResource("Use.PPD.files.mnemonic")); 533 534 useLocalhost = new JCheckBoxMenuItem( 535 pmUtility.getResource("Use.localhost"), false); 536 useLocalhost.setMnemonic( 537 pmUtility.getIntResource("Use.localhost.mnemonic")); 538 539 540 if (!runningAuth) { 541 usePPD.setEnabled(false); 542 useLocalhost.setEnabled(false); 543 } 544 appMenu.add(usePPD); 545 appMenu.add(useLocalhost); 546 547 appMenu.addSeparator(); 548 549 JMenuItem exit = new JMenuItem( 550 pmUtility.getResource("Exit"), 551 pmUtility.getIntResource("Exit.mnemonic")); 552 553 exit.addActionListener( 554 new ActionListener() { 555 public void actionPerformed(ActionEvent e) { 556 Debug.message("CLNT: call from exit action"); 557 System.exit(0); 558 }; 559 }); 560 561 exit.setEnabled(true); 562 appMenu.add(exit); 563 564 return appMenu; 565 } 566 567 // disable everything is not running as root objectMenu()568 public JMenu objectMenu() { 569 // add access to printer... 570 // --- 571 // new local printer... 572 // new network printer... 573 // --- 574 // delete printer 575 // modify properties... 576 577 JMenu objectMenu = new JMenu( 578 pmUtility.getResource("Printer")); 579 580 objectMenu.setMnemonic( 581 pmUtility.getIntResource("Printer.mnemonic")); 582 583 access = new JMenuItem( 584 pmUtility.getResource("Add.Access.to.Printer..."), 585 pmUtility.getIntResource("Add.Access.to.Printer.mnemonic")); 586 587 access.addActionListener( 588 new ActionListener() { 589 public void actionPerformed(ActionEvent e) { 590 Debug.message("CLNT: call from access action"); 591 if (accessView != null) 592 accessView.setVisible(true); 593 else 594 accessView = new pmAccess(myTop); 595 accessView.Show(); 596 }; 597 }); 598 599 if (!runningAuth) 600 access.setEnabled(false); 601 602 objectMenu.add(access); 603 objectMenu.addSeparator(); 604 605 local = new JMenuItem( 606 pmUtility.getResource("New.Attached.Printer..."), 607 pmUtility.getIntResource("New.Attached.Printer.mnemonic")); 608 609 local.addActionListener( 610 new ActionListener() { 611 public void actionPerformed(ActionEvent e) { 612 Debug.message("CLNT: call from localinstall action"); 613 if (localinstallView != null) 614 localinstallView.setVisible(true); 615 else { 616 try { 617 localinstallView = new pmInstallPrinter( 618 myTop, Constants.ADDLOCAL); 619 } catch (Exception ex) { 620 Debug.message("CLNT:pmTop:caught exception" + ex); 621 } 622 } 623 localinstallView.Show(); 624 }; 625 }); 626 627 if (!runningAuth) 628 local.setEnabled(false); 629 630 objectMenu.add(local); 631 632 network = new JMenuItem( 633 pmUtility.getResource("New.Network.Printer..."), 634 pmUtility.getIntResource("New.Network.Printer.mnemonic")); 635 636 network.addActionListener( 637 new ActionListener() { 638 public void actionPerformed(ActionEvent e) { 639 Debug.message("CLNT: call from networkinstall action"); 640 if (networkinstallView != null) 641 networkinstallView.setVisible(true); 642 else { 643 try { 644 networkinstallView = new 645 pmInstallPrinter(myTop, Constants.ADDNETWORK); 646 } catch (Exception ex) { 647 Debug.message("CLNT:pmTop:caught exception" + ex); 648 } 649 } 650 651 networkinstallView.Show(); 652 }; 653 }); 654 655 if (!runningAuth) 656 network.setEnabled(false); 657 658 objectMenu.add(network); 659 objectMenu.addSeparator(); 660 661 modifyMenuItem = new JMenuItem( 662 pmUtility.getResource("Modify.Printer.Properties..."), 663 pmUtility.getIntResource("Modify.Printer.Properties.mnemonic")); 664 665 modifyMenuItem.addActionListener( 666 new ActionListener() { 667 public void actionPerformed(ActionEvent e) { 668 669 Debug.message("CLNT: Modify " + selectedPrinter); 670 Debug.message("CLNT: Modify " + selprinterServer); 671 672 doModify(); 673 }; 674 }); 675 676 modifyMenuItem.setEnabled(false); 677 objectMenu.add(modifyMenuItem); 678 679 deleteMenuItem = new JMenuItem( 680 pmUtility.getResource("Delete.Printer..."), 681 pmUtility.getIntResource("Delete.Printer.mnemonic")); 682 683 deleteMenuItem.addActionListener( 684 new ActionListener() { 685 public void actionPerformed(ActionEvent e) { 686 Debug.message("CLNT: call from delete action"); 687 if (selectedPrinter == null) { 688 Debug.warning("CLNT: selectedPrinter is null"); 689 Debug.message("CLNT: cannot call pmDelete"); 690 // show error window 691 } else { 692 deleteView = new pmDelete(myTop); 693 } 694 }; 695 }); 696 deleteMenuItem.setEnabled(false); 697 objectMenu.add(deleteMenuItem); 698 return objectMenu; 699 } 700 701 // returns true iff name was found in the printer list findPrinterInList(String name)702 public boolean findPrinterInList(String name) { 703 704 int row = -1; 705 706 try { 707 String p = name.trim(); 708 row = listModel.findValue(p); 709 } catch (Exception ee) { 710 Debug.warning("CLNT: pmTop:find ActionList: caught " + ee); 711 } 712 713 if (row != -1) { 714 selectedRow = row; 715 listTable.clearSelection(); 716 listTable.setRowSelectionInterval(row, row); 717 listTable.scrollRectToVisible(listTable.getCellRect(row, 0, true)); 718 listTable.revalidate(); 719 scrollPane.revalidate(); 720 scrollPane.repaint(); 721 } 722 return row != -1; 723 } 724 toolsMenu()725 public JMenu toolsMenu() { 726 727 // find printer... 728 JMenu toolsMenu = new JMenu( 729 pmUtility.getResource("Tools")); 730 toolsMenu.setMnemonic( 731 pmUtility.getIntResource("Tools.mnemonic")); 732 733 JMenuItem find = new JMenuItem( 734 pmUtility.getResource("Find.Printer"), 735 pmUtility.getIntResource("Find.Printer.mnemonic")); 736 find.addActionListener( 737 new ActionListener() { 738 public void actionPerformed(ActionEvent e) { 739 Debug.message("CLNT: call from find action"); 740 findFrame.setVisible(true); 741 } 742 }); 743 744 toolsMenu.add(find); 745 return toolsMenu; 746 } 747 748 // Create help Menu 749 helpMenu()750 public JMenu helpMenu() { 751 JMenu helpMenu = new JMenu(pmUtility.getResource("Help")); 752 helpMenu.setMnemonic(pmUtility.getIntResource("Help.mnemonic")); 753 754 JMenuItem ov = new JMenuItem( 755 pmUtility.getResource("Overview"), 756 pmUtility.getIntResource("Overview.mnemonic")); 757 ov.addActionListener(new ActionListener() { 758 public void actionPerformed(ActionEvent e) { 759 myTop.showHelpItem("Overview"); 760 }; 761 }); 762 763 helpMenu.add(ov); 764 765 JMenuItem on = new JMenuItem( 766 pmUtility.getResource("On.Help"), 767 pmUtility.getIntResource("On.Help.mnemonic")); 768 on.addActionListener(new ActionListener() { 769 public void actionPerformed(ActionEvent e) { 770 myTop.showHelpItem("HelpOnHelp"); 771 }; 772 }); 773 774 helpMenu.add(on); 775 helpMenu.addSeparator(); 776 777 JMenuItem about = new JMenuItem( 778 pmUtility.getResource("About.Print.Manager"), 779 pmUtility.getIntResource("About.Print.Manager.mnemonic")); 780 about.addActionListener(new ActionListener() { 781 public void actionPerformed(ActionEvent e) { 782 Debug.message("CLNT: call from about help action"); 783 aboutBox.setVisible(true); 784 }; 785 }); 786 787 helpMenu.add(about); 788 helpMenu.addSeparator(); 789 790 JMenuItem settings = new JMenuItem( 791 pmUtility.getResource("Print.Manager.Settings"), 792 pmUtility.getIntResource("Print.Manager.Settings.mnemonic")); 793 settings.addActionListener(new ActionListener() { 794 public void actionPerformed(ActionEvent e) { 795 Debug.message("CLNT: print manager settings help action"); 796 myTop.showHelpItem("PrintManagerSettings"); 797 }; 798 }); 799 800 helpMenu.add(settings); 801 return helpMenu; 802 } 803 actionPerformed(java.awt.event.ActionEvent e)804 public void actionPerformed(java.awt.event.ActionEvent e) { 805 } 806 doModify()807 public void doModify() { 808 809 if (modifyView != null) 810 modifyView.pmScreendispose(); 811 812 try { 813 814 if (selectedPrinter == null || selprinterServer == null) { 815 816 } else { 817 818 if ((host.getLocalHostName()).equals(selprinterServer) || 819 selprinterServer.equals("localhost")) { 820 821 if (isNetwork()) { 822 823 modifyView = new 824 pmInstallPrinter( 825 myTop, Constants.MODIFYNETWORK); 826 827 } else { 828 modifyView = new 829 pmInstallPrinter( 830 myTop, Constants.MODIFYATTACHED); 831 } 832 833 modifyView.Show(); 834 835 } else { 836 837 try { 838 modifyView = new pmInstallPrinter( 839 myTop, Constants.MODIFYREMOTE); 840 } catch (Exception e) { 841 Debug.message( 842 "CLNT:pmTop:caught exception" + e); 843 } 844 modifyView.Show(); 845 } 846 } 847 } catch (Exception e) { 848 Debug.warning("CLNT: pmTop:getLocalHostName() caught " + e); 849 } 850 } // doModify() 851 852 isNetwork()853 public boolean isNetwork() { 854 855 Printer newpr = new Printer(myTop.ns); 856 newpr.setPrinterName(selectedPrinter); 857 858 try { 859 newpr.getPrinterDetails(); 860 } catch (Exception e) { 861 Debug.warning("CLNT: pmTop:getPrinterDetails() caught " + e); 862 } 863 864 pmCalls.debugShowPrinter(newpr); 865 866 if (newpr.getDestination() != null) { 867 Debug.message("CLNT: isNetwork:getDestination " + 868 newpr.getDestination()); 869 return true; 870 } else { 871 Debug.message("CLNT: isNetwork:getDestination is null"); 872 return false; 873 } 874 } 875 876 // Set the new namespace pmsetNS()877 public void pmsetNS() { 878 879 String serverNS; 880 881 // translate from gui to server 882 if (newNS.startsWith("files")) { 883 serverNS = new String("system"); 884 useLocalhost.setState(true); 885 } else if (newNS.equals("NIS")) { 886 serverNS = new String("nis"); 887 useLocalhost.setState(false); 888 } else if (newNS.equals("LDAP")) { 889 serverNS = new String("ldap"); 890 useLocalhost.setState(false); 891 } else { 892 serverNS = new String("system"); 893 useLocalhost.setState(true); 894 } 895 896 Debug.message("CLNT: newNS: " + newNS + 897 "\n serverNS: " + serverNS + 898 "\n ns.getNameService(): " + ns.getNameService()); 899 900 if (!serverNS.equals(ns.getNameService())) { 901 902 if (newNS.startsWith("files")) { 903 useLocalhost.setState(true); 904 ns = systemns; 905 } else if (newNS.equals("NIS")) { 906 useLocalhost.setState(false); 907 ns = nisns; 908 } else if (newNS.equals("LDAP")) { 909 useLocalhost.setState(false); 910 ns = ldapns; 911 } else { 912 useLocalhost.setState(true); 913 ns = systemns; 914 } 915 } 916 917 918 // This tool is read-only unless the user is root on the 919 // print server. Thus, don't check for namespace authorization 920 // if user is not root. 921 922 if (isRoot) { 923 // Check if user is authorized with this nameservice 924 if (ns.isAuth()) { 925 runningAuth = true; 926 } else { 927 // nis/ldap is a special case 928 // need to login to nis/ldap server 929 if (ns.getNameService().equals("nis") == true || 930 ns.getNameService().equals("ldap") == true) { 931 932 try { 933 if (!ns.isAuth()) { 934 pmUtility.doLogin(myTop, loadView.frame); 935 runningAuth = true; 936 } 937 } catch (pmUserCancelledException e) { 938 Debug.message( 939 "CLNT:pmTop:user cancelled login"); 940 runningAuth = false; 941 } catch (pmGuiException e) { 942 Debug.message( 943 "CLNT:pmTop:login nis/ldap failed: " + e); 944 runningAuth = false; 945 pmMessageDialog m = new pmMessageDialog( 946 loadView.frame, 947 pmUtility.getResource("Error"), 948 pmUtility.getResource( 949 "Required.login.failed."), 950 myTop, 951 "LoginFailed"); 952 m.setVisible(true); 953 } catch (Exception e) { 954 Debug.message( 955 "CLNT:pmTop:login nis/ldap failed: " + e); 956 runningAuth = false; 957 pmMessageDialog m = new pmMessageDialog( 958 loadView.frame, 959 pmUtility.getResource("Error"), 960 pmUtility.getResource( 961 "Required.login.failed."), 962 myTop, 963 "LoginFailed"); 964 m.setVisible(true); 965 } 966 } else { 967 try { 968 ns.checkAuth(); 969 runningAuth = true; 970 } catch (Exception ca) { 971 runningAuth = false; 972 pmMessageDialog m = new pmMessageDialog( 973 loadView.frame, 974 pmUtility.getResource("Error"), 975 pmUtility.getResource( 976 "User.not.authorized.to.modify.this.namespace."), 977 myTop, 978 "AuthorizationFailed"); 979 m.setVisible(true); 980 } 981 } 982 } 983 984 if (!serverNS.equals(ns.getNameService())) { 985 deleteAllScreens(); 986 } 987 988 // Change front panel as unauthorized to modify 989 if (!runningAuth) { 990 logCheck.setEnabled(false); 991 confirmCheck.setEnabled(false); 992 usePPD.setEnabled(false); 993 useLocalhost.setEnabled(false); 994 access.setEnabled(false); 995 local.setEnabled(false); 996 network.setEnabled(false); 997 modifyMenuItem.setEnabled(false); 998 deleteMenuItem.setEnabled(false); 999 } else { 1000 logCheck.setEnabled(true); 1001 confirmCheck.setEnabled(true); 1002 access.setEnabled(true); 1003 local.setEnabled(true); 1004 network.setEnabled(true); 1005 if (pmMisc.isppdCachefile()) 1006 usePPD.setEnabled(true); 1007 else 1008 usePPD.setEnabled(false); 1009 if (ns.getNameService().equals("system") == true) { 1010 useLocalhost.setEnabled(true); 1011 useLocalhost.setVisible(true); 1012 } else { 1013 useLocalhost.setVisible(false); 1014 } 1015 } 1016 1017 } else { 1018 runningAuth = false; 1019 } 1020 1021 1022 Debug.message("CLNT: NEW ns.getNameService(): " + 1023 ns.getNameService()); 1024 1025 } 1026 1027 class topnsListener implements ItemListener { topnsListener()1028 public topnsListener() {} 1029 itemStateChanged(ItemEvent e)1030 public void itemStateChanged(ItemEvent e) { 1031 Debug.message("CLNT: hello from topnsListener" + e.getItem()); 1032 if (e.getStateChange() == ItemEvent.SELECTED) { 1033 newNS = (String)e.getItem(); 1034 } 1035 } 1036 } 1037 pmsetdefaultpLabel()1038 public void pmsetdefaultpLabel() { 1039 try { 1040 defaultpLabel.setText( 1041 pmUtility.getResource("Default.Printer:") + 1042 " " + PrinterUtil.getDefaultPrinter(ns)); 1043 1044 Debug.message( 1045 "CLNT: pmTop:pmsetdefaultpLabel(): default printer: " + 1046 PrinterUtil.getDefaultPrinter(ns)); 1047 1048 } catch (Exception e) { 1049 Debug.warning("CLNT: pmTop:getDefaultPrinter() caught " + e); 1050 } 1051 } 1052 getLogOption()1053 public boolean getLogOption() { 1054 return logCheck.getState(); 1055 } 1056 setLogOption(boolean val)1057 public void setLogOption(boolean val) { 1058 logCheck.setState(val); 1059 } 1060 getConfirmOption()1061 public boolean getConfirmOption() { 1062 return confirmCheck.getState(); 1063 } 1064 getUsePPD()1065 public boolean getUsePPD() { 1066 return usePPD.getState(); 1067 } 1068 getUseLocalhost()1069 public boolean getUseLocalhost() { 1070 return useLocalhost.getState(); 1071 } 1072 doFind(String printer)1073 public void doFind(String printer) { 1074 } 1075 deleteAllScreens()1076 public void deleteAllScreens() { 1077 1078 if (accessView != null) 1079 accessView.pmScreendispose(); 1080 accessView = null; 1081 1082 if (localinstallView != null) 1083 localinstallView.pmScreendispose(); 1084 localinstallView = null; 1085 1086 if (networkinstallView != null) 1087 networkinstallView.pmScreendispose(); 1088 networkinstallView = null; 1089 1090 if (modifyView != null) 1091 modifyView.pmScreendispose(); 1092 modifyView = null; 1093 1094 if (loadView != null) 1095 loadView.pmScreendispose(); 1096 loadView = null; 1097 } 1098 1099 1100 /* 1101 * enable/disable modify and delete items 1102 * this must be called when: 1103 * . an existing printer is selected 1104 * . the selection is disabled 1105 */ enableEditMenuItems(boolean state)1106 void enableEditMenuItems(boolean state) { 1107 if (!runningAuth) 1108 return; 1109 modifyMenuItem.setEnabled(state); 1110 deleteMenuItem.setEnabled(state); 1111 } 1112 1113 /* 1114 * set the log/error state for the current operation 1115 */ setLogData(String cmd, String err, String warn)1116 void setLogData(String cmd, String err, String warn) { 1117 cmdLog = cmd; 1118 errorLog = err; 1119 warningLog = warn; 1120 } 1121 1122 /* 1123 * display current log state for the specified action 1124 * if the cmdLog is empty nothing at all will be displayed! 1125 */ showLogData(String actionName)1126 void showLogData(String actionName) { 1127 1128 // Debug.info("CLNT: showLogData():actionName: " + actionName); 1129 // Debug.info("CLNT: showLogData():cmdLog: " + cmdLog); 1130 1131 if (cmdLog == null) 1132 return; 1133 1134 addToCommandLog(actionName + "\n"); 1135 1136 // iterate over multiline cmds 1137 StringTokenizer st = new StringTokenizer( 1138 cmdLog, "\n\r", false); 1139 while (st.hasMoreTokens()) { 1140 addToCommandLog("% " + st.nextToken()); 1141 addToCommandLog("\n"); 1142 } 1143 1144 if (errorLog != null) { 1145 st = new StringTokenizer(errorLog, "\n\r", false); 1146 while (st.hasMoreTokens()) { 1147 addToCommandLog(st.nextToken()); 1148 addToCommandLog("\n"); 1149 } 1150 } 1151 1152 if (warningLog != null) { 1153 st = new StringTokenizer(warningLog, "\n\r", false); 1154 while (st.hasMoreTokens()) { 1155 addToCommandLog(st.nextToken()); 1156 addToCommandLog("\n"); 1157 } 1158 } 1159 1160 addToCommandLog("***\n"); 1161 } 1162 addToCommandLog(String s)1163 private void addToCommandLog(String s) { 1164 commandLog.addText(s); 1165 } 1166 showHelpItem(String tag)1167 public void showHelpItem(String tag) { 1168 if (helpFrame != null) 1169 helpFrame.showHelp(tag); 1170 else 1171 Toolkit.getDefaultToolkit().beep(); 1172 } 1173 pmsetNSLabel()1174 public void pmsetNSLabel() { 1175 1176 if (newNS.startsWith("files")) { 1177 1178 nameserviceLabel.setText(" "); 1179 Debug.message("CLNT: pmsetNSLabel:nameserviceLabel is : " + 1180 nameserviceLabel.getText()); 1181 1182 try { 1183 domainhostLabel.setText( 1184 pmUtility.getResource("Host:") + " " + 1185 host.getLocalHostName()); 1186 } catch (Exception e) { 1187 Debug.warning( 1188 "CLNT: pmTop:getLocalHostName caught " + e); 1189 } 1190 1191 } else { 1192 nameserviceLabel.setText( 1193 pmUtility.getResource("Naming.Service:") + newNS); 1194 Debug.message( 1195 "CLNT: pmsetNSLabel:nameserviceLabel is : " + 1196 nameserviceLabel.getText()); 1197 1198 try { 1199 domainhostLabel.setText( 1200 pmUtility.getResource("Domain:") + " " + 1201 host.getDomainName()); 1202 } catch (Exception e) { 1203 Debug.warning( 1204 "CLNT: pmTop:getDomainName caught " + e); 1205 } 1206 } 1207 } 1208 1209 // Update the list of printers 1210 // Printer list will change if nameservice changes and when user 1211 // adds/deletes/changes printers 1212 pmsetPrinterList()1213 public void pmsetPrinterList() { 1214 1215 Debug.message("CLNT: pmsetPrinterList() ns is :" + 1216 ns.getNameService()); 1217 1218 try { 1219 listModel.insertlistTable(PrinterUtil.getPrinterList(ns), 1220 listModel.getColumnCount()); 1221 } catch (Exception e) { 1222 Debug.warning("CLNT: pmTop:getPrinterList() caught " + e); 1223 } 1224 1225 listTable.clearSelection(); 1226 scrollPane.getViewport().setView(listTable); 1227 scrollPane.revalidate(); 1228 scrollPane.repaint(); 1229 } 1230 1231 1232 // returns -1 if error, 0 otherwise parseArgs(String[] args)1233 protected static int parseArgs(String[] args) { 1234 int rv = 0; 1235 1236 for (int i = 0; i < args.length; ++i) { 1237 if (args[i].compareTo("-debugall") == 0) 1238 Debug.setDebugLevel(Debug.ALL); 1239 else if (args[i].compareTo("-debugnone") == 0) 1240 Debug.setDebugLevel(Debug.NONE); 1241 else if (args[i].compareTo("-debugwarn") == 0) 1242 Debug.setDebugLevel(Debug.WARNING); 1243 else if (args[i].compareTo("-debugerr") == 0) 1244 Debug.setDebugLevel(Debug.ERROR); 1245 else if (args[i].compareTo("-debugfatal") == 0) 1246 Debug.setDebugLevel(Debug.FATAL); 1247 else if (args[i].compareTo("-debugmsg") == 0) 1248 Debug.setDebugLevel(Debug.MESSAGE); 1249 else if (args[i].compareTo("-debuginfo") == 0) 1250 Debug.setDebugLevel(Debug.INFO); 1251 } 1252 1253 return rv; 1254 } 1255 main(String[] args)1256 public static void main(String[] args) { 1257 1258 if (parseArgs(args) < 0) 1259 System.exit(-1); 1260 1261 // use pmFrame to get app icon 1262 pmFrame frame = new pmFrame(pmUtility.getResource("info_name")); 1263 1264 myTop = new pmTop(frame); 1265 1266 frame.addWindowListener(new WindowAdapter() { 1267 public void windowClosing(WindowEvent e) { 1268 System.exit(0); 1269 } 1270 }); 1271 1272 frame.getContentPane().add("Center", myTop); 1273 frame.pack(); 1274 frame.setVisible(true); 1275 frame.repaint(); 1276 1277 pmLoad firstload = new pmLoad(myTop); 1278 myTop.loadView = firstload; 1279 firstload.Show(); 1280 1281 aboutBox = new pmAboutBox(); 1282 commandLog = new pmLogDisplay(myTop, "ShowCommandConsole"); 1283 findFrame = new pmFindFrame(myTop); 1284 1285 /* 1286 * Make sure to open the help frame after the about box, 1287 * command log, and find frame windows have been opened. 1288 * Otherwise it might cause null pointer exceptions as it 1289 * takes a long time for the help frame to load. 1290 */ 1291 helpFrame = new pmHelpFrame(); 1292 1293 } 1294 1295 // disable Enter action **for all JTextFields** 1296 static { 1297 JTextField f = new JTextField(); 1298 KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); 1299 Keymap map = f.getKeymap(); 1300 map.removeKeyStrokeBinding(enter); 1301 } 1302 1303 } 1304