/*
* 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
*/
/*
* ident "%Z%%M% %I% %E% SMI"
*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
* DoPrinterUtil class
* Worker utility class.
*/
package com.sun.admin.pm.server;
import java.io.*;
import java.util.*;
public class DoPrinterUtil {
public static String getDefault(String ns) throws Exception
{
Debug.message("SVR: DoPrinterUtil.getDefault()");
Debug.message("SVR: name service equals " + ns);
String o = null;
String cmd = "/usr/bin/lpget -n " + ns + " _default";
SysCommand syscmd = new SysCommand();
syscmd.exec(cmd);
o = syscmd.getOutput();
syscmd = null;
if (o == null) {
return (null);
}
int i = o.indexOf("use=");
if (i == -1) {
return (null);
}
o = o.substring(i);
String dflt = DoPrinterView.getToken(o + "\n", "use=");
Debug.message("SVR: default is " + dflt);
return (new String(dflt));
}
public static String[] getDevices() throws Exception
{
Debug.message("SVR: DoPrinterUtil.getDevices()");
int i = 0;
String dev = "";
String devices = "";
String serial_possibilities[] = {"a", "b", "c", "d",
"e", "f", "g", "h", "i", "j", "k", "l", "m",
"n", "o", "p", "q", "r", "s", "t", "u", "v",
"w", "x", "y", "z"};
String cmd = "/usr/bin/find /dev -print";
SysCommand syscmd = new SysCommand();
syscmd.exec(cmd);
if (syscmd.getExitValue() != 0) {
String errstr = syscmd.getError();
syscmd = null;
throw new pmCmdFailedException(errstr);
}
String o = syscmd.getOutput();
syscmd = null;
if (o == null) {
return (null);
}
o = o.concat("\n");
for (i = 0; i < serial_possibilities.length; i++) {
dev = "/dev/term/" + serial_possibilities[i] + "\n";
if (o.indexOf(dev) != -1) {
devices = devices.concat(" " + dev + " ");
}
}
// sparc bpp parallel ports
for (i = 0; i < 100; i++) {
dev = "/dev/bpp" + i + "\n";
if (o.indexOf(dev) != -1) {
devices = devices.concat(" " + dev + " ");
}
}
// sparc ecpp parallel ports
for (i = 0; i < 100; i++) {
dev = "/dev/ecpp" + i + "\n";
if (o.indexOf(dev) != -1) {
devices = devices.concat(" " + dev + " ");
}
}
// intel parallel ports
for (i = 0; i < 100; i++) {
dev = "/dev/lp" + i + "\n";
if (o.indexOf(dev) != -1) {
devices = devices.concat(" " + dev + " ");
}
}
// USB
for (i = 0; i < 100; i++) {
dev = "/dev/printers/" + i + "\n";
if (o.indexOf(dev) != -1) {
devices = devices.concat(" " + dev + " ");
}
}
// SunPics
dev = "/dev/lpvi\n";
if (o.indexOf(dev) != -1) {
devices = devices.concat(" " + dev + " ");
}
o = null;
if (devices.equals("")) {
return (null);
}
String ret[];
StringTokenizer st = new StringTokenizer(devices);
if (st.countTokens() == 0) {
return (null);
} else {
ret = new String[st.countTokens()];
for (i = 0; st.hasMoreTokens(); i++) {
ret[i] = st.nextToken();
}
}
return (ret);
}
public static String[] getMakes() throws Exception
{
int i;
Debug.message("SVR: DoPrinterUtil.getMakes()");
String cmd = "/usr/lib/lp/bin/getmakes";
SysCommand syscmd = new SysCommand();
syscmd.exec(cmd);
if (syscmd.getExitValue() != 0) {
String errstr = syscmd.getError();
syscmd = null;
throw new pmCmdFailedException(errstr);
}
String makes = syscmd.getOutput();
String ret[];
StringTokenizer st = new StringTokenizer(makes);
if (st.countTokens() == 0) {
return (null);
} else {
ret = new String[st.countTokens()];
for (i = 0; st.hasMoreTokens(); i++) {
ret[i] = st.nextToken();
}
}
return (ret);
}
public static String[] getModels(String make) throws Exception
{
int i;
String ret[];
Debug.message("SVR:getModels()");
if (make == null) {
Debug.message("SVR:getModels: make is null");
return (null);
}
// Make call for models for this make
String cmd = "/usr/lib/lp/bin/getmodels " + make;
SysCommand syscmd = new SysCommand();
syscmd.exec(cmd);
if (syscmd.getExitValue() != 0) {
String errstr = syscmd.getError();
syscmd = null;
throw new pmCmdFailedException(errstr);
}
String models = syscmd.getOutput();
if (models != null) {
StringTokenizer st = new StringTokenizer(models, "\n");
if (st.countTokens() == 0) {
Debug.message("SVR:String tokenizer count is zero");
return (null);
} else {
ret = new String[st.countTokens()];
for (i = 0; st.hasMoreTokens(); i++) {
ret[i] = st.nextToken();
}
}
return (ret);
} else
return (null);
}
public static String[] getPPDs(String make, String model) throws Exception
{
int i;
String ret[];
ret = new String[2];
if ((make == null) || (model == null)) {
return null;
}
// get ppd files for this make/model
String cmd = "/usr/lib/lp/bin/getppds " + make + " " + model;
SysCommand syscmd = new SysCommand();
syscmd.exec(cmd);
if (syscmd.getExitValue() != 0) {
String errstr = syscmd.getError();
syscmd = null;
throw new pmCmdFailedException(errstr);
}
String ppds = syscmd.getOutput();
StringTokenizer st = new StringTokenizer(ppds, "\n");
if (st.countTokens() == 0) {
return (null);
} else {
ret = new String[st.countTokens()];
for (i = 0; st.hasMoreTokens(); i++) {
ret[i] = st.nextToken();
}
}
return (ret);
}
public static String[] getMakeModelNick(String ppdfilename) throws Exception
{
int i;
String ret[] = null;
if (ppdfilename == null) {
return (null);
}
// get ppd files for this make/model
String cmd = "/usr/lib/lp/bin/ppdfilename2mmp " + ppdfilename;
SysCommand syscmd = new SysCommand();
syscmd.exec(cmd);
if (syscmd.getExitValue() != 0) {
String errstr = syscmd.getError();
syscmd = null;
throw new pmCmdFailedException(errstr);
}
String mmp = syscmd.getOutput();
if (mmp != null) {
ret = new String[2];
StringTokenizer st = new StringTokenizer(mmp, "\n");
if (st.countTokens() == 0) {
return (null);
} else {
ret = new String[st.countTokens()];
for (i = 0; st.hasMoreTokens(); i++) {
ret[i] = st.nextToken();
}
}
}
return (ret);
}
public static String getPPDFile(
String make, String model, String ppd) throws Exception
{
int i;
String ret[];
ret = new String[2];
if (ppd == null) {
return (null);
}
// get ppd path/filename for this ppd
String cmd = "/usr/lib/lp/bin/getppdfile " +
make + ":" + " " + model + ":" + " " + ppd + ":";
SysCommand syscmd = new SysCommand();
syscmd.exec(cmd);
if (syscmd.getExitValue() != 0) {
String errstr = syscmd.getError();
syscmd = null;
throw new pmCmdFailedException(errstr);
}
String ppdfile = syscmd.getOutput();
return (ppdfile);
}
public static String[] getProbe(String device)
{
int i;
String pmake = null;
String pmodel = null;
String tokens[] = null;
String ret[];
ret = new String[2];
if (device == null)
return (null);
Debug.message("SVR: DoPrinterUtil.getProbe()");
// Get Manufacturer and Model for printer in this port
String cmd = "/usr/lib/lp/bin/printer-info -M -m " + device;
SysCommand syscmd = new SysCommand();
try {
syscmd.exec(cmd);
} catch (Exception e) {
System.out.println(e);
}
if (syscmd.getExitValue() != 0) {
String errstr = syscmd.getError();
syscmd = null;
return (null);
}
String mm = syscmd.getOutput();
if (mm != null) {
int numtokens;
StringTokenizer st = new StringTokenizer(mm, ":" + "\n");
if (st.countTokens() == 0) {
return (null);
} else {
numtokens = st.countTokens();
tokens = new String[st.countTokens()];
for (i = 0; st.hasMoreTokens(); i++) {
tokens[i] = st.nextToken();
}
}
for (i = 0; i < numtokens; i++) {
if ((tokens[i].trim()).equals("Manufacturer")) {
pmake = new String(tokens[i + 1].trim());
} else { if ((tokens[i].trim()).equals("Model"))
pmodel = new String(tokens[i + 1].trim());
}
}
if (pmake != null)
ret[0] = pmake;
if (pmodel != null)
ret[1] = pmodel;
return (ret);
}
return (null);
}
public static boolean isMakeModel(
String make,
String model)
{
int exitvalue;
Debug.message("SVR: DoPrinterUtil.isMakeModel() " + make + " " + model);
SysCommand syscmd = new SysCommand();
// syscmd.exec("/usr/bin/lpget -n " + ns + " " + name);
exitvalue = syscmd.getExitValue();
syscmd = null;
if (exitvalue == 0) {
return (true);
}
return (false);
}
public static String[] getList(String nsarg)
throws Exception
{
Debug.message("SVR: DoPrinterUtil.getList()");
int i = 0;
int j = 0;
int listi = 0;
String cmd = null;
String printername = "";
String printserver = "";
String comment = "";
String nameservice;
String list[];
String o = null;
cmd = "/usr/bin/lpget -n " + nsarg + " list";
SysCommand syscmd = new SysCommand();
syscmd.exec(cmd);
if (syscmd.getExitValue() != 0) {
String errstr = syscmd.getError();
syscmd = null;
throw new pmCmdFailedException(errstr);
}
o = syscmd.getOutput();
syscmd = null;
if (o == null) {
return (null);
}
// Count entries
int index = 0;
while ((index = o.indexOf("bsdaddr=", index)) != -1) {
index = index + 8;
i++;
}
if (i <= 0)
return (null);
list = new String [i*3];
int colon = 0;
int nextcolon = 0;
while ((colon = o.indexOf(":\n", colon + 1)) != -1) {
nextcolon = o.indexOf(":\n", colon + 1);
if (nextcolon == -1)
nextcolon = o.length();
// Extract printername
i = colon;
while ((o.charAt(i) != '\n') && (i != 0)) {
i--;
}
if (i == 0)
printername = o.substring(i, colon);
else
printername = o.substring(i + 1, colon);
// Skip _all and _default keywords
if (printername.equals("_all")) {
continue;
}
if (printername.equals("_default")) {
continue;
}
// Extract servername
i = o.indexOf("bsdaddr=", colon);
if ((i != -1) && (i < nextcolon)) {
j = o.indexOf(",", i);
if (j != -1)
printserver = o.substring(i + 8, j);
}
// Skip entries without a server.
if (printserver.equals("")) {
Debug.warning(
"SVR: printer does not have a server: "
+ printername);
continue;
}
// Extract description
i = o.indexOf("description=", colon);
if ((i != -1) && (i < nextcolon)) {
j = i;
while (j < o.length()) {
if (o.charAt(j) == '\n')
break;
j++;
}
comment = o.substring(i + 12, j);
}
list[listi++] = printername;
list[listi++] = printserver;
list[listi++] = comment;
printername = "";
printserver = "";
comment = "";
}
return (list);
}
public static boolean exists(
String name,
String ns) throws Exception
{
int exitvalue;
Debug.message("SVR: DoPrinterUtil.exists() " + ns);
SysCommand syscmd = new SysCommand();
syscmd.exec("/usr/bin/lpget -n " + ns + " " + name);
exitvalue = syscmd.getExitValue();
syscmd = null;
if (exitvalue == 0) {
return (true);
}
return (false);
}
public static boolean isLocal(
String pn) throws Exception
{
int exitvalue;
Debug.message("SVR: DoPrinterUtil.isLocal()");
SysCommand syscmd = new SysCommand();
syscmd.exec("/usr/bin/test -d /etc/lp/printers/" + pn);
exitvalue = syscmd.getExitValue();
syscmd = null;
if (exitvalue != 0) {
return (false);
}
return (true);
}
public static boolean isLocalhost(
String queue) throws Exception
{
int exitvalue;
String o = null;
Debug.message("SVR: DoPrinterUtil.isLocalhost():queue " + queue);
SysCommand syscmd = new SysCommand();
syscmd.exec("/usr/bin/grep " + queue + " /etc/printers.conf");
exitvalue = syscmd.getExitValue();
if (exitvalue != 0) {
Debug.message(
"SVR:DoPrinterUtil:isLocalhost:failed:queue: " + queue);
return (false);
}
o = syscmd.getOutput();
syscmd = null;
Debug.message("SVR:DoPrinterUtil.java:isLocalhost: output: " + o);
if (o.indexOf("localhost") != -1)
return (true);
else
return (false);
}
}