public boolean handleRequest(String request,
Writer out) {
String path = "";
String query = null;
String name;
try {
// check request url
URL url = new URL("http://localhost"+request);
path = url.getPath();
query = url.getQuery();
if (path.startsWith(this.getHandledPath()) == false) {
return false;
}
out.write("HTTP/1.0 200 OK\r\n");
out.write("Content-type: text/html\r\n\r\n");
out.write("< HTML >< HEAD >< TITLE >" + this.getTitle() + "< /TITLE >< /HEAD >\r\n");
out.write("< BODY >< H1 >log4j< /H1 >\r\n");
out.write(this.getDescription() + "< br >< br >\r\n");
// handle a request with query
if ((query != null) && (query.length() >= 0)) {
StringTokenizer st = new StringTokenizer(query, "&");
String cmd;
String catname;
String catval;
int idx;
while (st.hasMoreTokens()) {
cmd = st.nextToken();
idx = cmd.indexOf("=");
catname = cmd.substring(0, idx);
catval = cmd.substring(idx+1, cmd.length());
if (catname.equalsIgnoreCase("root"))
Category.getRoot().setPriority(Priority.toPriority(catval));
else
Category.getInstance(catname).setPriority(Priority.toPriority(catval));
}
}
// output category information in a form with a simple table
out.write("< form name=\"Formular\" ACTION=\""+this.getHandledPath()+"\" METHOD=\"PUT\" >");
out.write("< table cellpadding=4 >\r\n");
out.write(" < tr >\r\n");
out.write(" < td >< b >Category< /b >< /td >\r\n");
out.write(" < td >< b >Priority< /b >< /td >\r\n");
out.write(" < td >< b >Appender< /b >< /td >\r\n");
out.write(" < /tr >\r\n");
// output for root category
Category cat = Category.getRoot();
out.write(" < tr >< td >root< /td >\r\n");
out.write(" < td >\r\n");
out.write(" < select size=1 name=\""+ cat.getName() +"\" >");
for (int i = 0; i < prios.length; i++) {
if (cat.getChainedPriority().toString().equals(prios[i].toString()))
out.write("< option selected >"+prios[i].toString());
else
out.write("< option >"+prios[i].toString());
}
out.write("< /select >\r\n");
out.write(" < /td >\r\n");
out.write(" < td >\r\n");
for (Enumeration apds = cat.getAllAppenders(); apds.hasMoreElements();) {
Appender apd = (Appender)apds.nextElement();
name = apd.getName();
if (name == null)
name = "< i >(no name)< /i >";
out.write(name);
if (apd instanceof AppenderSkeleton) {
try {
AppenderSkeleton apskel = (AppenderSkeleton)apd;
out.write(" [" + apskel.getThreshold().toString() + "]");
} catch (Exception ex) {
}
}
if (apds.hasMoreElements())
out.write(", ");
}
out.write(" < /td >\r\n");
out.write(" < /tr >\r\n");
// output for all other categories
for (Enumeration en = Category.getCurrentCategories(); en.hasMoreElements();) {
cat = (Category)en.nextElement();
out.write(" < tr >\r\n");
out.write(" < td >" + cat.getName() + "< /td >\r\n");
out.write(" < td >\r\n");
out.write(" < select size=1 name=\""+ cat.getName() +"\" >");
for (int i = 0; i < prios.length; i++) {
if (cat.getChainedPriority().toString().equals(prios[i].toString()))
out.write("< option selected >"+prios[i].toString());
else
out.write("< option >"+prios[i].toString());
}
out.write("< /select >\r\n");
out.write(" < /td >\r\n");
out.write(" < td >\r\n");
for (Enumeration apds = cat.getAllAppenders(); apds.hasMoreElements();) {
Appender apd = (Appender)apds.nextElement();
name = apd.getName();
if (name == null)
name = "< i >(no name)< /i >";
out.write(name);
if (apd instanceof AppenderSkeleton) {
try {
AppenderSkeleton apskel = (AppenderSkeleton)apd;
out.write(" [" + apskel.getThreshold().toString() + "]");
} catch (Exception ex) {
}
}
if (apds.hasMoreElements())
out.write(", ");
}
out.write(" < /td >\r\n");
out.write(" < /tr >\r\n");
}
out.write("< /table >\r\n");
out.write("< input type=submit value=\"Submit\" >");
out.write("< /form >");
out.write("< /BODY >< /HTML >\r\n");
out.flush();
return true;
} catch (Exception ex) {
return false;
}
}
Handles the given request and writes the reply to the given out-stream. |