KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > kohsuke > stapler > ResponseImpl


1 package org.kohsuke.stapler;
2
3 import javax.servlet.ServletException JavaDoc;
4 import javax.servlet.http.HttpServletResponse JavaDoc;
5 import javax.servlet.http.HttpServletResponseWrapper JavaDoc;
6 import java.io.ByteArrayOutputStream JavaDoc;
7 import java.io.IOException JavaDoc;
8 import java.io.OutputStreamWriter JavaDoc;
9 import java.net.URL JavaDoc;
10
11 /**
12  * @author Kohsuke Kawaguchi
13  */

14 class ResponseImpl extends HttpServletResponseWrapper JavaDoc implements StaplerResponse {
15     private final Stapler stapler;
16     private final HttpServletResponse JavaDoc response;
17
18     public ResponseImpl(Stapler stapler, HttpServletResponse JavaDoc response) {
19         super(response);
20         this.stapler = stapler;
21         this.response = response;
22     }
23
24     public void forward(Object JavaDoc it, String JavaDoc url, StaplerRequest request) throws ServletException JavaDoc, IOException JavaDoc {
25         stapler.invoke(request,response,it,url);
26     }
27
28     public void forwardToPreviousPage(StaplerRequest request) throws ServletException JavaDoc, IOException JavaDoc {
29         String JavaDoc referer = request.getHeader("Referer");
30         if(referer==null) referer=".";
31         sendRedirect(referer);
32     }
33
34     public void sendRedirect2(String JavaDoc url) throws IOException JavaDoc {
35         // Tomcat doesn't encode URL (servlet spec isn't very clear on it)
36
// so do the encoding by ourselves
37
sendRedirect(encode(url));
38     }
39
40     public void serveFile(StaplerRequest req, URL JavaDoc resource) throws ServletException JavaDoc, IOException JavaDoc {
41         stapler.serveStaticResource(req,this,resource);
42     }
43
44     /**
45      * Escapes non-ASCII characters.
46      */

47     public static String JavaDoc encode(String JavaDoc s) {
48         try {
49             boolean escaped = false;
50
51             StringBuffer JavaDoc out = new StringBuffer JavaDoc(s.length());
52
53             ByteArrayOutputStream JavaDoc buf = new ByteArrayOutputStream JavaDoc();
54             OutputStreamWriter JavaDoc w = new OutputStreamWriter JavaDoc(buf,"UTF-8");
55
56             for (int i = 0; i < s.length(); i++) {
57                 int c = (int) s.charAt(i);
58                 if (c<128 && c!=' ') {
59                     out.append((char) c);
60                 } else {
61                     // 1 char -> UTF8
62
w.write(c);
63                     w.flush();
64                     for (byte b : buf.toByteArray()) {
65                         out.append('%');
66                         out.append(toDigit((b >> 4) & 0xF));
67                         out.append(toDigit(b & 0xF));
68                     }
69                     buf.reset();
70                     escaped = true;
71                 }
72             }
73
74             return escaped ? out.toString() : s;
75         } catch (IOException JavaDoc e) {
76             throw new Error JavaDoc(e); // impossible
77
}
78     }
79
80     private static char toDigit(int n) {
81         char ch = Character.forDigit(n,16);
82         if(ch>='a') ch = (char)(ch-'a'+'A');
83         return ch;
84     }
85 }
86
Popular Tags