/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
*
*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
* pmTop.java
* Top level
*/
package com.sun.admin.pm.client;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.Vector;
import java.lang.*;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.table.AbstractTableModel;
import javax.swing.text.*;
import javax.swing.border.*;
import javax.swing.*;
import com.sun.admin.pm.server.*;
/*
* Top window for printer manager
*/
public class pmTop extends JPanel {
static private pmTop myTop = null;
static private pmHelpFrame helpFrame = null;
static private pmAboutBox aboutBox = null;
static private pmLogDisplay commandLog = null;
static private pmFindFrame findFrame = null;
JLabel nameserviceLabel = new JLabel();
JLabel domainhostLabel;
JLabel defaultpLabel;
String defaultPrinter;
JScrollPane scrollPane;
JTable listTable;
Host host = new Host();
private JPanel north = new JPanel();
JPanel center;
listTableModel listModel;
ListSelectionModel listSM;
JMenuBar menuBar;
JFrame parentFrame;
JCheckBoxMenuItem logCheck;
JCheckBoxMenuItem confirmCheck;
JCheckBoxMenuItem usePPD;
JCheckBoxMenuItem useLocalhost;
JMenuItem modifyMenuItem = null;
JMenuItem deleteMenuItem = null;
JMenuItem access;
JMenuItem local;
JMenuItem network;
int actionindex = 0;
private String newNS;
NameService ns = null;
NameService nisns = null;
NameService systemns = null;
NameService ldapns = null;
pmAccess accessView = null;
pmInstallPrinter localinstallView = null;
pmInstallPrinter networkinstallView = null;
pmDelete deleteView = null;
pmInstallPrinter modifyView = null;
pmLoad loadView = null;
String clickedPrinter;
String selectedPrinter = null;
String selprinterServer = null;
int selectedRow = -1;
String cmdLog = null;
String errorLog = null;
String warningLog = null;
boolean runningAuth = false;
boolean isRoot = false;
pmFrame frame;
public pmTop(JFrame parent) {
parentFrame = parent;
setLayout(new BorderLayout());
pmTopInit();
}
public void pmTopInit() {
try {
systemns = new NameService("system");
} catch (Exception e) {
Debug.message("CLNT: system:Nameservice exception " + e);
}
try {
nisns = new NameService("nis");
} catch (Exception e) {
Debug.message("CLNT: nis:Nameservice exception " + e);
}
try {
ldapns = new NameService("ldap");
} catch (Exception e) {
Debug.message("CLNT: ldap:Nameservice exception " + e);
}
ns = systemns;
newNS = "files";
// determine root privileges
try {
ns.checkAuth();
} catch (Exception ax) {
Debug.message("CLNT: checkAuth threw " + ax);
}
if (ns.isAuth()) {
runningAuth = true;
isRoot = true;
Debug.message("CLNT: Running as root");
} else
Debug.message("CLNT: Not running as root");
northPanel();
centerPanel();
southPanel();
}
// Set values so that printer selection null
public void clearSelected() {
selectedPrinter = null;
selprinterServer = null;
selectedRow = -1;
enableEditMenuItems(false);
}
// Create north panel with GridBagLayout
public void northPanel() {
menuBar = new JMenuBar();
menuBar.setBorder(new EmptyBorder(5, 5, 5, 5));
menuBar.add(appMenu());
menuBar.add(objectMenu());
menuBar.add(toolsMenu());
menuBar.add(Box.createHorizontalGlue());
menuBar.add(helpMenu());
parentFrame.setJMenuBar(menuBar);
}
public class listTableModel extends AbstractTableModel {
int numColumns;
String[] columnNames = {
pmUtility.getResource("Printer.Name"),
pmUtility.getResource("Printer.Server"),
pmUtility.getResource("Description")
};
// Initialize for JTable calls from SWING classes
Vector data = new Vector(0, 0);
public listTableModel() {
numColumns = getColumnCount();
}
public void insertlistTable(String rowDataList[], int numcols) {
Vector rowData = new Vector(3, 1);
data = new Vector(100, 5);
int j = 0;
if ((rowDataList.length) <= 1) {
return;
}
for (int i = 0; i < rowDataList.length; i = i + 3) {
rowData = new Vector(3, 1);
for (j = 0; j < 3; j++) {
rowData.addElement(
rowDataList[i + j]);
}
data.addElement(rowData);
}
}
public void removeRow(int row) {
data.removeElementAt(row);
}
public int getRowCount() {
return data.size();
}
public int getColumnCount() {
return columnNames.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
Vector rowVector = (Vector)data.elementAt(row);
return rowVector.elementAt(col);
}
public void setValueAt(String value, int row, int col) {
Vector rowVector = (Vector)data.elementAt(row);
rowVector.setElementAt(value, col);
}
public void addRow(Vector row) {
data.addElement(row);
}
public int findValue(String value) {
for (int i = 0; i < data.size(); i++) {
if (getValueAt(i, 0).equals(value))
return i;
}
return -1;
}
};
// called on enter or double-click
void modifySelectedPrinter() {
ListSelectionModel m = listTable.getSelectionModel();
if (m.isSelectionEmpty()) {
Debug.message("CLNT: list selection is empty");
return;
}
int selectedRow = m.getMinSelectionIndex();
Debug.message("CLNT: list row selected is " + selectedRow);
selectedPrinter =
(String) listTable.getModel().getValueAt(selectedRow, 0);
selprinterServer =
(String)listTable.getModel().getValueAt(selectedRow, 1);
Debug.message("CLNT: selectedPrinter is " + selectedPrinter);
doModify();
}
// Create printer list in center panel
public void centerPanel() {
center = new JPanel();
listModel = new listTableModel();
listTable = new JTable(listModel);
listTable.setColumnSelectionAllowed(false);
listTable.setRowSelectionAllowed(true);
listTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
listTable.setShowGrid(false);
listTable.registerKeyboardAction(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.message("CLNT: enter action");
if (runningAuth)
modifySelectedPrinter();
else
Toolkit.getDefaultToolkit().beep();
}},
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false),
JComponent.WHEN_IN_FOCUSED_WINDOW);
listTable.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
Point pt = e.getPoint();
int rowIndex = listTable.rowAtPoint(pt);
int colIndex = listTable.columnAtPoint(pt);
int clickCount = e.getClickCount();
Debug.message("CLNT: getClickCount() is " + clickCount);
if (clickCount == 2) {
if (rowIndex == -1) {
Debug.message("CLNT: clicked outside table");
} else {
if (runningAuth)
modifySelectedPrinter();
else
Toolkit.getDefaultToolkit().beep();
}
}
}
});
// Add selection listener
ListSelectionModel rowSelectModel = listTable.getSelectionModel();
rowSelectModel.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
listSM = (ListSelectionModel)e.getSource();
Debug.message("CLNT: listSM is " + listSM);
if (listSM.isSelectionEmpty()) {
Debug.message("CLNT: list selection is empty");
enableEditMenuItems(false);
} else {
selectedRow = listSM.getMinSelectionIndex();
Debug.message(
"CLNT: list element selected" + selectedRow);
selectedPrinter =
(String)listTable.getModel().getValueAt(selectedRow, 0);
selprinterServer =
(String)listTable.getModel().getValueAt(selectedRow, 1);
Debug.message(
"CLNT: selectedPrinter is " + selectedPrinter);
enableEditMenuItems(true);
}
}
});
GridBagConstraints c = new GridBagConstraints();
center.setLayout(new BorderLayout());
c.insets = new Insets(35, 50, 35, 50);
try {
listModel.insertlistTable(PrinterUtil.getPrinterList(ns),
listModel.getColumnCount());
} catch (Exception e) {
Debug.fatal("CLNT: pmTop:getPrinterList() caught " + e);
pmMessageDialog m = new pmMessageDialog(
frame,
pmUtility.getResource("Error"),
pmUtility.getResource(
"Cannot.get.list.of.printers.Exiting."),
myTop,
"getPrinterListFailed");
m.setVisible(true);
System.exit(-1);
}
scrollPane = new JScrollPane();
scrollPane.setViewportView(listTable);
listTable.setPreferredScrollableViewportSize(
new Dimension(500, 500));
scrollPane.getViewport().setView(listTable);
center.add(scrollPane);
add("Center", center);
}
// Create south panel with grid layout
public void southPanel() {
JPanel south = new JPanel();
GridBagConstraints c = new GridBagConstraints();
south.setLayout(new GridBagLayout());
// Constraints applied across all entries
c.fill = GridBagConstraints.BOTH;
c.insets = new Insets(6, 6, 6, 6);
c.gridheight = 1;
c.gridwidth = 1;
c.gridy = 1;
// Create the labels
c.gridx = 0;
c.weightx = c.weighty = 1.0;
try {
defaultpLabel =
new JLabel(pmUtility.getResource("Default.Printer:") +
" " + PrinterUtil.getDefaultPrinter(ns));
} catch (Exception e) {
Debug.warning("CLNT: pmTop:getDefaultPrinter() caught " + e);
defaultpLabel = new JLabel(
pmUtility.getResource("Default.Printer:"));
}
south.add(defaultpLabel, c);
if (newNS.startsWith("files")) {
try {
domainhostLabel = new JLabel(pmUtility.getResource(
"Host:") + " " + host.getLocalHostName());
nameserviceLabel.setText(" ");
} catch (Exception e) {
Debug.warning("CLNT: pmTop:getLocalHostName caught " + e);
}
} else {
try {
nameserviceLabel.setText(
pmUtility.getResource("Naming.Service:") + " " + newNS);
domainhostLabel = new JLabel(
pmUtility.getResource("Domain:") + " " +
host.getDomainName());
} catch (Exception e) {
Debug.warning("CLNT: pmTop:getDomainName caught " + e);
}
}
c.weightx = c.weighty = 1.0;
c.gridx = 2;
south.add(nameserviceLabel, c);
c.gridx = 3;
south.add(domainhostLabel, c);
add("South", south);
}
public JMenu appMenu() {
// name service
// ---
// cmd line console
// confirm all actions
// use ppd file
// ---
// exit
JMenu appMenu = new JMenu(pmUtility.getResource("Print.Manager"));
appMenu.setMnemonic(
pmUtility.getIntResource("Print.Manager.mnemonic"));
appMenu.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
Debug.message("CLNT: appMenu MouseListener");
};
});
JMenuItem load = new JMenuItem(
pmUtility.getResource("Select.Naming.Service"),
pmUtility.getIntResource("Select.Naming.Service.mnemonic"));
load.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.message("CLNT: call from load action");
if (loadView != null)
loadView.setVisible(true);
else
loadView = new pmLoad(myTop);
loadView.Show();
};
});
load.setEnabled(true);
appMenu.add(load);
appMenu.addSeparator();
logCheck = new JCheckBoxMenuItem(
pmUtility.getResource("Show.Command-Line.Console"));
logCheck.setMnemonic(
pmUtility.getIntResource("Show.Command-Line.Console.mnemonic"));
logCheck.addActionListener(new AbstractAction() {
public void actionPerformed(ActionEvent e) {
Debug.message("CLNT: call from checkbox action");
JCheckBoxMenuItem c = (JCheckBoxMenuItem) e.getSource();
if (c.isSelected() == true) {
commandLog.setVisible(true);
} else {
commandLog.setVisible(false);
}
}
});
if (!runningAuth)
logCheck.setEnabled(false);
appMenu.add(logCheck);
confirmCheck = new JCheckBoxMenuItem(
pmUtility.getResource("Confirm.All.Actions"), false);
confirmCheck.setMnemonic(
pmUtility.getIntResource("Confirm.All.Actions.mnemonic"));
if (!runningAuth)
confirmCheck.setEnabled(false);
appMenu.add(confirmCheck);
usePPD = new JCheckBoxMenuItem(
pmUtility.getResource("Use.PPD.files"), true);
usePPD.setMnemonic(pmUtility.getIntResource("Use.PPD.files.mnemonic"));
useLocalhost = new JCheckBoxMenuItem(
pmUtility.getResource("Use.localhost"), false);
useLocalhost.setMnemonic(
pmUtility.getIntResource("Use.localhost.mnemonic"));
if (!runningAuth) {
usePPD.setEnabled(false);
useLocalhost.setEnabled(false);
}
appMenu.add(usePPD);
appMenu.add(useLocalhost);
appMenu.addSeparator();
JMenuItem exit = new JMenuItem(
pmUtility.getResource("Exit"),
pmUtility.getIntResource("Exit.mnemonic"));
exit.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.message("CLNT: call from exit action");
System.exit(0);
};
});
exit.setEnabled(true);
appMenu.add(exit);
return appMenu;
}
// disable everything is not running as root
public JMenu objectMenu() {
// add access to printer...
// ---
// new local printer...
// new network printer...
// ---
// delete printer
// modify properties...
JMenu objectMenu = new JMenu(
pmUtility.getResource("Printer"));
objectMenu.setMnemonic(
pmUtility.getIntResource("Printer.mnemonic"));
access = new JMenuItem(
pmUtility.getResource("Add.Access.to.Printer..."),
pmUtility.getIntResource("Add.Access.to.Printer.mnemonic"));
access.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.message("CLNT: call from access action");
if (accessView != null)
accessView.setVisible(true);
else
accessView = new pmAccess(myTop);
accessView.Show();
};
});
if (!runningAuth)
access.setEnabled(false);
objectMenu.add(access);
objectMenu.addSeparator();
local = new JMenuItem(
pmUtility.getResource("New.Attached.Printer..."),
pmUtility.getIntResource("New.Attached.Printer.mnemonic"));
local.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.message("CLNT: call from localinstall action");
if (localinstallView != null)
localinstallView.setVisible(true);
else {
try {
localinstallView = new pmInstallPrinter(
myTop, Constants.ADDLOCAL);
} catch (Exception ex) {
Debug.message("CLNT:pmTop:caught exception" + ex);
}
}
localinstallView.Show();
};
});
if (!runningAuth)
local.setEnabled(false);
objectMenu.add(local);
network = new JMenuItem(
pmUtility.getResource("New.Network.Printer..."),
pmUtility.getIntResource("New.Network.Printer.mnemonic"));
network.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.message("CLNT: call from networkinstall action");
if (networkinstallView != null)
networkinstallView.setVisible(true);
else {
try {
networkinstallView = new
pmInstallPrinter(myTop, Constants.ADDNETWORK);
} catch (Exception ex) {
Debug.message("CLNT:pmTop:caught exception" + ex);
}
}
networkinstallView.Show();
};
});
if (!runningAuth)
network.setEnabled(false);
objectMenu.add(network);
objectMenu.addSeparator();
modifyMenuItem = new JMenuItem(
pmUtility.getResource("Modify.Printer.Properties..."),
pmUtility.getIntResource("Modify.Printer.Properties.mnemonic"));
modifyMenuItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.message("CLNT: Modify " + selectedPrinter);
Debug.message("CLNT: Modify " + selprinterServer);
doModify();
};
});
modifyMenuItem.setEnabled(false);
objectMenu.add(modifyMenuItem);
deleteMenuItem = new JMenuItem(
pmUtility.getResource("Delete.Printer..."),
pmUtility.getIntResource("Delete.Printer.mnemonic"));
deleteMenuItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.message("CLNT: call from delete action");
if (selectedPrinter == null) {
Debug.warning("CLNT: selectedPrinter is null");
Debug.message("CLNT: cannot call pmDelete");
// show error window
} else {
deleteView = new pmDelete(myTop);
}
};
});
deleteMenuItem.setEnabled(false);
objectMenu.add(deleteMenuItem);
return objectMenu;
}
// returns true iff name was found in the printer list
public boolean findPrinterInList(String name) {
int row = -1;
try {
String p = name.trim();
row = listModel.findValue(p);
} catch (Exception ee) {
Debug.warning("CLNT: pmTop:find ActionList: caught " + ee);
}
if (row != -1) {
selectedRow = row;
listTable.clearSelection();
listTable.setRowSelectionInterval(row, row);
listTable.scrollRectToVisible(listTable.getCellRect(row, 0, true));
listTable.revalidate();
scrollPane.revalidate();
scrollPane.repaint();
}
return row != -1;
}
public JMenu toolsMenu() {
// find printer...
JMenu toolsMenu = new JMenu(
pmUtility.getResource("Tools"));
toolsMenu.setMnemonic(
pmUtility.getIntResource("Tools.mnemonic"));
JMenuItem find = new JMenuItem(
pmUtility.getResource("Find.Printer"),
pmUtility.getIntResource("Find.Printer.mnemonic"));
find.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.message("CLNT: call from find action");
findFrame.setVisible(true);
}
});
toolsMenu.add(find);
return toolsMenu;
}
// Create help Menu
public JMenu helpMenu() {
JMenu helpMenu = new JMenu(pmUtility.getResource("Help"));
helpMenu.setMnemonic(pmUtility.getIntResource("Help.mnemonic"));
JMenuItem ov = new JMenuItem(
pmUtility.getResource("Overview"),
pmUtility.getIntResource("Overview.mnemonic"));
ov.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
myTop.showHelpItem("Overview");
};
});
helpMenu.add(ov);
JMenuItem on = new JMenuItem(
pmUtility.getResource("On.Help"),
pmUtility.getIntResource("On.Help.mnemonic"));
on.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
myTop.showHelpItem("HelpOnHelp");
};
});
helpMenu.add(on);
helpMenu.addSeparator();
JMenuItem about = new JMenuItem(
pmUtility.getResource("About.Print.Manager"),
pmUtility.getIntResource("About.Print.Manager.mnemonic"));
about.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.message("CLNT: call from about help action");
aboutBox.setVisible(true);
};
});
helpMenu.add(about);
helpMenu.addSeparator();
JMenuItem settings = new JMenuItem(
pmUtility.getResource("Print.Manager.Settings"),
pmUtility.getIntResource("Print.Manager.Settings.mnemonic"));
settings.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.message("CLNT: print manager settings help action");
myTop.showHelpItem("PrintManagerSettings");
};
});
helpMenu.add(settings);
return helpMenu;
}
public void actionPerformed(java.awt.event.ActionEvent e) {
}
public void doModify() {
if (modifyView != null)
modifyView.pmScreendispose();
try {
if (selectedPrinter == null || selprinterServer == null) {
} else {
if ((host.getLocalHostName()).equals(selprinterServer) ||
selprinterServer.equals("localhost")) {
if (isNetwork()) {
modifyView = new
pmInstallPrinter(
myTop, Constants.MODIFYNETWORK);
} else {
modifyView = new
pmInstallPrinter(
myTop, Constants.MODIFYATTACHED);
}
modifyView.Show();
} else {
try {
modifyView = new pmInstallPrinter(
myTop, Constants.MODIFYREMOTE);
} catch (Exception e) {
Debug.message(
"CLNT:pmTop:caught exception" + e);
}
modifyView.Show();
}
}
} catch (Exception e) {
Debug.warning("CLNT: pmTop:getLocalHostName() caught " + e);
}
} // doModify()
public boolean isNetwork() {
Printer newpr = new Printer(myTop.ns);
newpr.setPrinterName(selectedPrinter);
try {
newpr.getPrinterDetails();
} catch (Exception e) {
Debug.warning("CLNT: pmTop:getPrinterDetails() caught " + e);
}
pmCalls.debugShowPrinter(newpr);
if (newpr.getDestination() != null) {
Debug.message("CLNT: isNetwork:getDestination " +
newpr.getDestination());
return true;
} else {
Debug.message("CLNT: isNetwork:getDestination is null");
return false;
}
}
// Set the new namespace
public void pmsetNS() {
String serverNS;
// translate from gui to server
if (newNS.startsWith("files")) {
serverNS = new String("system");
useLocalhost.setState(true);
} else if (newNS.equals("NIS")) {
serverNS = new String("nis");
useLocalhost.setState(false);
} else if (newNS.equals("LDAP")) {
serverNS = new String("ldap");
useLocalhost.setState(false);
} else {
serverNS = new String("system");
useLocalhost.setState(true);
}
Debug.message("CLNT: newNS: " + newNS +
"\n serverNS: " + serverNS +
"\n ns.getNameService(): " + ns.getNameService());
if (!serverNS.equals(ns.getNameService())) {
if (newNS.startsWith("files")) {
useLocalhost.setState(true);
ns = systemns;
} else if (newNS.equals("NIS")) {
useLocalhost.setState(false);
ns = nisns;
} else if (newNS.equals("LDAP")) {
useLocalhost.setState(false);
ns = ldapns;
} else {
useLocalhost.setState(true);
ns = systemns;
}
}
// This tool is read-only unless the user is root on the
// print server. Thus, don't check for namespace authorization
// if user is not root.
if (isRoot) {
// Check if user is authorized with this nameservice
if (ns.isAuth()) {
runningAuth = true;
} else {
// nis/ldap is a special case
// need to login to nis/ldap server
if (ns.getNameService().equals("nis") == true ||
ns.getNameService().equals("ldap") == true) {
try {
if (!ns.isAuth()) {
pmUtility.doLogin(myTop, loadView.frame);
runningAuth = true;
}
} catch (pmUserCancelledException e) {
Debug.message(
"CLNT:pmTop:user cancelled login");
runningAuth = false;
} catch (pmGuiException e) {
Debug.message(
"CLNT:pmTop:login nis/ldap failed: " + e);
runningAuth = false;
pmMessageDialog m = new pmMessageDialog(
loadView.frame,
pmUtility.getResource("Error"),
pmUtility.getResource(
"Required.login.failed."),
myTop,
"LoginFailed");
m.setVisible(true);
} catch (Exception e) {
Debug.message(
"CLNT:pmTop:login nis/ldap failed: " + e);
runningAuth = false;
pmMessageDialog m = new pmMessageDialog(
loadView.frame,
pmUtility.getResource("Error"),
pmUtility.getResource(
"Required.login.failed."),
myTop,
"LoginFailed");
m.setVisible(true);
}
} else {
try {
ns.checkAuth();
runningAuth = true;
} catch (Exception ca) {
runningAuth = false;
pmMessageDialog m = new pmMessageDialog(
loadView.frame,
pmUtility.getResource("Error"),
pmUtility.getResource(
"User.not.authorized.to.modify.this.namespace."),
myTop,
"AuthorizationFailed");
m.setVisible(true);
}
}
}
if (!serverNS.equals(ns.getNameService())) {
deleteAllScreens();
}
// Change front panel as unauthorized to modify
if (!runningAuth) {
logCheck.setEnabled(false);
confirmCheck.setEnabled(false);
usePPD.setEnabled(false);
useLocalhost.setEnabled(false);
access.setEnabled(false);
local.setEnabled(false);
network.setEnabled(false);
modifyMenuItem.setEnabled(false);
deleteMenuItem.setEnabled(false);
} else {
logCheck.setEnabled(true);
confirmCheck.setEnabled(true);
access.setEnabled(true);
local.setEnabled(true);
network.setEnabled(true);
if (pmMisc.isppdCachefile())
usePPD.setEnabled(true);
else
usePPD.setEnabled(false);
if (ns.getNameService().equals("system") == true) {
useLocalhost.setEnabled(true);
useLocalhost.setVisible(true);
} else {
useLocalhost.setVisible(false);
}
}
} else {
runningAuth = false;
}
Debug.message("CLNT: NEW ns.getNameService(): " +
ns.getNameService());
}
class topnsListener implements ItemListener {
public topnsListener() {}
public void itemStateChanged(ItemEvent e) {
Debug.message("CLNT: hello from topnsListener" + e.getItem());
if (e.getStateChange() == ItemEvent.SELECTED) {
newNS = (String)e.getItem();
}
}
}
public void pmsetdefaultpLabel() {
try {
defaultpLabel.setText(
pmUtility.getResource("Default.Printer:") +
" " + PrinterUtil.getDefaultPrinter(ns));
Debug.message(
"CLNT: pmTop:pmsetdefaultpLabel(): default printer: " +
PrinterUtil.getDefaultPrinter(ns));
} catch (Exception e) {
Debug.warning("CLNT: pmTop:getDefaultPrinter() caught " + e);
}
}
public boolean getLogOption() {
return logCheck.getState();
}
public void setLogOption(boolean val) {
logCheck.setState(val);
}
public boolean getConfirmOption() {
return confirmCheck.getState();
}
public boolean getUsePPD() {
return usePPD.getState();
}
public boolean getUseLocalhost() {
return useLocalhost.getState();
}
public void doFind(String printer) {
}
public void deleteAllScreens() {
if (accessView != null)
accessView.pmScreendispose();
accessView = null;
if (localinstallView != null)
localinstallView.pmScreendispose();
localinstallView = null;
if (networkinstallView != null)
networkinstallView.pmScreendispose();
networkinstallView = null;
if (modifyView != null)
modifyView.pmScreendispose();
modifyView = null;
if (loadView != null)
loadView.pmScreendispose();
loadView = null;
}
/*
* enable/disable modify and delete items
* this must be called when:
* . an existing printer is selected
* . the selection is disabled
*/
void enableEditMenuItems(boolean state) {
if (!runningAuth)
return;
modifyMenuItem.setEnabled(state);
deleteMenuItem.setEnabled(state);
}
/*
* set the log/error state for the current operation
*/
void setLogData(String cmd, String err, String warn) {
cmdLog = cmd;
errorLog = err;
warningLog = warn;
}
/*
* display current log state for the specified action
* if the cmdLog is empty nothing at all will be displayed!
*/
void showLogData(String actionName) {
// Debug.info("CLNT: showLogData():actionName: " + actionName);
// Debug.info("CLNT: showLogData():cmdLog: " + cmdLog);
if (cmdLog == null)
return;
addToCommandLog(actionName + "\n");
// iterate over multiline cmds
StringTokenizer st = new StringTokenizer(
cmdLog, "\n\r", false);
while (st.hasMoreTokens()) {
addToCommandLog("% " + st.nextToken());
addToCommandLog("\n");
}
if (errorLog != null) {
st = new StringTokenizer(errorLog, "\n\r", false);
while (st.hasMoreTokens()) {
addToCommandLog(st.nextToken());
addToCommandLog("\n");
}
}
if (warningLog != null) {
st = new StringTokenizer(warningLog, "\n\r", false);
while (st.hasMoreTokens()) {
addToCommandLog(st.nextToken());
addToCommandLog("\n");
}
}
addToCommandLog("***\n");
}
private void addToCommandLog(String s) {
commandLog.addText(s);
}
public void showHelpItem(String tag) {
if (helpFrame != null)
helpFrame.showHelp(tag);
else
Toolkit.getDefaultToolkit().beep();
}
public void pmsetNSLabel() {
if (newNS.startsWith("files")) {
nameserviceLabel.setText(" ");
Debug.message("CLNT: pmsetNSLabel:nameserviceLabel is : " +
nameserviceLabel.getText());
try {
domainhostLabel.setText(
pmUtility.getResource("Host:") + " " +
host.getLocalHostName());
} catch (Exception e) {
Debug.warning(
"CLNT: pmTop:getLocalHostName caught " + e);
}
} else {
nameserviceLabel.setText(
pmUtility.getResource("Naming.Service:") + newNS);
Debug.message(
"CLNT: pmsetNSLabel:nameserviceLabel is : " +
nameserviceLabel.getText());
try {
domainhostLabel.setText(
pmUtility.getResource("Domain:") + " " +
host.getDomainName());
} catch (Exception e) {
Debug.warning(
"CLNT: pmTop:getDomainName caught " + e);
}
}
}
// Update the list of printers
// Printer list will change if nameservice changes and when user
// adds/deletes/changes printers
public void pmsetPrinterList() {
Debug.message("CLNT: pmsetPrinterList() ns is :" +
ns.getNameService());
try {
listModel.insertlistTable(PrinterUtil.getPrinterList(ns),
listModel.getColumnCount());
} catch (Exception e) {
Debug.warning("CLNT: pmTop:getPrinterList() caught " + e);
}
listTable.clearSelection();
scrollPane.getViewport().setView(listTable);
scrollPane.revalidate();
scrollPane.repaint();
}
// returns -1 if error, 0 otherwise
protected static int parseArgs(String[] args) {
int rv = 0;
for (int i = 0; i < args.length; ++i) {
if (args[i].compareTo("-debugall") == 0)
Debug.setDebugLevel(Debug.ALL);
else if (args[i].compareTo("-debugnone") == 0)
Debug.setDebugLevel(Debug.NONE);
else if (args[i].compareTo("-debugwarn") == 0)
Debug.setDebugLevel(Debug.WARNING);
else if (args[i].compareTo("-debugerr") == 0)
Debug.setDebugLevel(Debug.ERROR);
else if (args[i].compareTo("-debugfatal") == 0)
Debug.setDebugLevel(Debug.FATAL);
else if (args[i].compareTo("-debugmsg") == 0)
Debug.setDebugLevel(Debug.MESSAGE);
else if (args[i].compareTo("-debuginfo") == 0)
Debug.setDebugLevel(Debug.INFO);
}
return rv;
}
public static void main(String[] args) {
if (parseArgs(args) < 0)
System.exit(-1);
// use pmFrame to get app icon
pmFrame frame = new pmFrame(pmUtility.getResource("info_name"));
myTop = new pmTop(frame);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.getContentPane().add("Center", myTop);
frame.pack();
frame.setVisible(true);
frame.repaint();
pmLoad firstload = new pmLoad(myTop);
myTop.loadView = firstload;
firstload.Show();
aboutBox = new pmAboutBox();
commandLog = new pmLogDisplay(myTop, "ShowCommandConsole");
findFrame = new pmFindFrame(myTop);
/*
* Make sure to open the help frame after the about box,
* command log, and find frame windows have been opened.
* Otherwise it might cause null pointer exceptions as it
* takes a long time for the help frame to load.
*/
helpFrame = new pmHelpFrame();
}
// disable Enter action **for all JTextFields**
static {
JTextField f = new JTextField();
KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
Keymap map = f.getKeymap();
map.removeKeyStrokeBinding(enter);
}
}