/*
* $Id: WmlTemplates.java,v 1.5 2002/09/16 08:05:06 jkl Exp $
*
* Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
*
* Use is subject to license terms, as defined in
* Anvil Sofware License, Version 1.1. See LICENSE
* file, or http://njet.org/license-1.1.txt
*/
package anvil.server;
import java.io.IOException;
import java.io.Writer;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URL;
import java.net.MalformedURLException;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import anvil.Location;
import anvil.ErrorListener;
import anvil.ErrorEvent;
import anvil.ForgingException;
import anvil.script.ScriptException;
import anvil.util.Conversions;
/**
* class WmlTemplates
*
* @author: Jaripekka Salminen
* @author: Jani Lehtim�ki
*/
public class WmlTemplates
{
public static final void message(HttpServletRequest request,
HttpServletResponse response, int errorCode, String errorMessage) throws IOException
{
String msg = "" + errorCode + " " +errorMessage;
PrintWriter out = new PrintWriter(response.getOutputStream());
response.setStatus(errorCode);
out.println("<?xml version=\"1.0\"?>");
out.println("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">");
out.println("<wml>");
out.print("<card title=\"");
out.print(msg);
out.println("\">");
out.println("<p align='center'>");
out.print("Resource ");
String str = request.getPathInfo();
out.println((str != null) ? str : "");
out.print(" at ");
str = request.getHeader("Host");
out.print((str != null) ? str : "localhost");
out.println("</p>");
out.println("</card>");
out.println("</wml>");
out.flush();
}
public static final void exception(Context context, Exception exception) throws IOException
{
PrintWriter out = new PrintWriter(context.getOutputStream());
out.println("<?xml version=\"1.0\"?>");
out.println("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">");
out.println("<wml>");
out.println("<card title=\"Site Error\">");
out.println("<p align='center'>");
if (exception instanceof ForgingException) {
out.println("Parsing errors");
} else if (exception instanceof ScriptException) {
out.println("Runtime error");
} else if (exception instanceof IOException) {
out.println("IO Error");
} else {
out.println("Error");
}
out.println("<br/>");
if (exception instanceof ForgingException) {
ErrorListener listener = ((ForgingException)exception).getErrorListener();
Enumeration e = listener.getEvents();
int count = 0;
while(e.hasMoreElements()) {
ErrorEvent evt = (ErrorEvent)e.nextElement();
Location loc = evt.getLocation();
String url;
if (loc != null) {
url = loc.getURL().toString();
out.print(url);
if (loc.getLine()>0) {
out.print(" [");
out.print(loc.getLine());
if (loc.getColumn()>0) {
out.print(":");
out.print(loc.getColumn());
}
out.print("]");
}
out.println();
} else {
out.println("Unknown location");
}
String msg = evt.getMessage();
if (msg != null) {
out.print(Conversions.encodeEntities(msg));
}
count++;
out.println("<br/>");
}
} else if (exception instanceof ScriptException) {
out.println("Uncaught exception:\n");
out.print(((ScriptException)exception).getData().toString());
} else if (exception instanceof IOException) {
out.print(context.getPathinfo());
out.print(" ");
out.print(exception.getMessage());
} else {
out.print(exception.getMessage());
exception.printStackTrace(out);
}
out.println("</p>");
out.println("</card>");
out.println("</wml>");
out.flush();
}
}