public int cmdShow(final Dictionary opts, final Reader in,
final PrintWriter out, final Session session) {
Integer res = (Integer) AccessController
.doPrivileged(new PrivilegedAction() {
public Object run() {
ServiceReference sr = bc.getServiceReference(LOGREADER);
if (sr == null) {
out.println("Unable to get a LogReaderService");
return new Integer(1);
}
LogReaderService lr = (LogReaderService) bc
.getService(sr);
if (lr == null) {
out.println("Unable to get a LogReaderService");
return new Integer(1);
}
ArrayList bv = null;
String[] selection = (String[]) opts.get("bundle");
if (selection != null) {
Bundle[] b = bc.getBundles();
Util.selectBundles(b, selection);
bv = new ArrayList();
for (int i = 0; i < b.length; i++) {
if (b[i] != null) {
bv.add(b[i]);
}
}
}
boolean fflag = opts.get("-f") != null;
String lflag = (String) opts.get("-l");
int level;
if (lflag != null) {
if (lflag.equalsIgnoreCase("error")) {
level = LogService.LOG_ERROR;
} else if (lflag.equalsIgnoreCase("warning")) {
level = LogService.LOG_WARNING;
} else if (lflag.equalsIgnoreCase("info")) {
level = LogService.LOG_INFO;
} else if (lflag.equalsIgnoreCase("debug")) {
level = LogService.LOG_DEBUG;
} else {
out.println("Unknown level: " + lflag);
return new Integer(1);
}
} else {
level = LogService.LOG_DEBUG;
}
String hflag = (String) opts.get("-h");
long startTime = 0;
if (hflag != null) {
try {
startTime = System.currentTimeMillis()
- (long) (60 * 60 * 1000 * (new Double(
hflag)).doubleValue());
} catch (NumberFormatException e) {
out
.println("Illegal number of hours: "
+ hflag);
return new Integer(1);
}
}
String nflag = (String) opts.get("-n");
int count = Integer.MAX_VALUE;
if (nflag != null) {
try {
count = Integer.parseInt(nflag);
} catch (NumberFormatException e) {
out
.println("Illegal number as count: "
+ nflag);
return new Integer(1);
}
}
Enumeration e = lr.getLog();
Vector lv = new Vector();
boolean rflag = opts.get("-r") == null;
while (e.hasMoreElements()) {
LogEntry le = (LogEntry) e.nextElement();
Bundle b = le.getBundle();
if (b == null && fflag || bv == null && !fflag
|| bv != null && bv.contains(b)) {
if (count-- <= 0) {
break;
}
if (le.getLevel() > level) {
continue;
}
if (le.getTime() < startTime) {
break;
}
if (rflag) {
lv.insertElementAt(le, 0);
} else {
lv.addElement(le);
}
}
}
StringBuffer sb = new StringBuffer();
SimpleDateFormat tf = new SimpleDateFormat(
"MMM dd HH:mm:ss ");
for (e = lv.elements(); e.hasMoreElements();) {
LogEntry le = (LogEntry) e.nextElement();
sb.setLength(0);
sb.append(tf.format(new Date(le.getTime())));
pad(sb, 16);
switch (le.getLevel()) {
case LogService.LOG_INFO:
sb.append("INFO");
break;
case LogService.LOG_DEBUG:
sb.append("DEBUG");
break;
case LogService.LOG_WARNING:
sb.append("WARNING");
break;
case LogService.LOG_ERROR:
sb.append("ERROR");
break;
default:
sb.append("UNKNOWN");
break;
}
pad(sb, 23);
Bundle b = le.getBundle();
if (b != null) {
sb.append(" #" + b.getBundleId());
pad(sb, 28);
sb.append(Util.shortName(b));
} else {
sb.append(" FRAMEWORK");
}
pad(sb, 42);
sb.append(" - ");
sb.append(le.getMessage());
final ServiceReference leSr
= le.getServiceReference();
if (leSr != null) {
sb.append(", Service#");
sb.append(leSr.getProperty(Constants.SERVICE_ID));
sb.append(": ");
sb.append(Util.showServiceClasses(leSr));
}
out.println(sb.toString());
if (le.getException() != null