Separated the bsvc console for clarity.
[jsvc.git] / src / dolda / jsvc / util / Restarts.java
1 package dolda.jsvc.util;
2
3 import dolda.jsvc.*;
4 import java.net.*;
5 import java.io.*;
6
7 public class Restarts {
8     public static RequestRestart redirect(final URL to) {
9         return(new RequestRestart() {
10                 public void respond(Request req) {
11                     req.status(303);
12                     req.outheaders().put("Location", to.toString());
13                 }
14             });
15     }
16
17     public static RequestRestart redirect(final String path) {
18         return(new RequestRestart() {
19                 public void respond(Request req) {
20                     req.status(303);
21                     URL url;
22                     try {
23                         url = new URL(req.url(), path);
24                     } catch(MalformedURLException e) {
25                         throw(new RuntimeException("Bad relative URL: + " + path, e));
26                     }
27                     req.outheaders().put("Location", url.toString());
28                 }
29             });
30     }
31
32     public static RequestRestart redirectctx(final String path) {
33         return(new RequestRestart() {
34                 public void respond(Request req) {
35                     req.status(303);
36                     URL url;
37                     try {
38                         url = new URL(req.rooturl(), Misc.stripslashes(path, true, false));
39                     } catch(MalformedURLException e) {
40                         throw(new RuntimeException("Bad relative URL: + " + path, e));
41                     }
42                     req.outheaders().put("Location", url.toString());
43                 }
44             });
45     }
46     
47     public static RequestRestart stdresponse(final int code, final String title, final String message) {
48         return(new RequestRestart() {
49                 public void respond(Request req) {
50                     req.status(code);
51                     req.outheaders().put("content-type", "text/html; charset=us-ascii");
52                     PrintWriter out;
53                     try {
54                         out = new PrintWriter(new OutputStreamWriter(req.output(), "US-ASCII"));
55                     } catch(UnsupportedEncodingException e) {
56                         throw(new Error(e));
57                     }
58                     out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
59                     out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">");
60                     out.println("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-US\">");
61                     out.println("<head><title>" + title + "</title></head>");
62                     out.println("<body>");
63                     out.println("<h1>" + title + "</h1>");
64                     out.println(message);
65                     out.println("</body>");
66                     out.println("</html>");
67                     out.flush();
68                 }
69             });
70     }
71     
72     public static RequestRestart stdresponse(int code, String message) {
73         return(stdresponse(code, "An error occurred", message));
74     }
75
76     public static RequestRestart stdresponse(int code) {
77         return(stdresponse(code, "An error occurred", Misc.statustext(code)));
78     }
79     
80     public static RequestRestart done() {
81         return(new RequestRestart() {
82                 public void respond(Request req) {
83                 }
84             });
85     }
86 }