1 package com.icesoft.faces.webapp.http.servlet; 2 3 import com.icesoft.faces.webapp.http.common.Request; 4 import com.icesoft.faces.webapp.http.common.Response; 5 import com.icesoft.faces.webapp.http.common.ResponseHandler; 6 7 import javax.servlet.http.Cookie ; 8 import javax.servlet.http.HttpServletRequest ; 9 import javax.servlet.http.HttpServletResponse ; 10 import java.io.IOException ; 11 import java.io.InputStream ; 12 import java.io.OutputStream ; 13 import java.net.URI ; 14 import java.text.DateFormat ; 15 import java.text.ParseException ; 16 import java.text.SimpleDateFormat ; 17 import java.util.ArrayList ; 18 import java.util.Date ; 19 import java.util.Enumeration ; 20 import java.util.TimeZone ; 21 22 public class ServletRequestResponse implements Request, Response { 23 private final static DateFormat DATE_FORMAT = new SimpleDateFormat ("EEE, dd MMM yyyy HH:mm:ss zzz"); 24 25 static { 26 DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT")); 27 } 28 29 protected HttpServletRequest request; 30 protected HttpServletResponse response; 31 32 public ServletRequestResponse(HttpServletRequest request, HttpServletResponse response) { 33 this.request = request; 34 this.response = response; 35 } 36 37 public String getMethod() { 38 return request.getMethod(); 39 } 40 41 public URI getURI() { 42 String query = request.getQueryString(); 43 URI uri = URI.create(request.getRequestURL().toString()); 44 return query == null ? uri : URI.create(uri + "?" + query); 45 } 46 47 public String getHeader(String name) { 48 return request.getHeader(name); 49 } 50 51 public String [] getHeaderAsStrings(String name) { 52 Enumeration e = request.getHeaders(name); 53 ArrayList values = new ArrayList (); 54 while (e.hasMoreElements()) values.add(e.nextElement()); 55 return (String []) values.toArray(new String [values.size()]); 56 } 57 58 public Date getHeaderAsDate(String name) { 59 try { 60 return DATE_FORMAT.parse(request.getHeader(name)); 61 } catch (ParseException e) { 62 throw new RuntimeException (e); 63 } 64 } 65 66 public int getHeaderAsInteger(String name) { 67 return Integer.parseInt(request.getHeader(name)); 68 } 69 70 public boolean containsParameter(String name) { 71 return request.getParameter(name) != null; 72 } 73 74 public String getParameter(String name) { 75 checkExistenceOf(name); 76 return (String ) request.getParameter(name); 77 } 78 79 public String [] getParameterAsStrings(String name) { 80 checkExistenceOf(name); 81 return request.getParameterValues(name); 82 } 83 84 public int getParameterAsInteger(String name) { 85 return Integer.parseInt(getParameter(name)); 86 } 87 88 public boolean getParameterAsBoolean(String name) { 89 return Boolean.valueOf(getParameter(name)).booleanValue(); 90 } 91 92 public String getParameter(String name, String defaultValue) { 93 try { 94 return getParameter(name); 95 } catch (Exception e) { 96 return defaultValue; 97 } 98 } 99 100 public int getParameterAsInteger(String name, int defaultValue) { 101 try { 102 return getParameterAsInteger(name); 103 } catch (Exception e) { 104 return defaultValue; 105 } 106 } 107 108 public boolean getParameterAsBoolean(String name, boolean defaultValue) { 109 try { 110 return getParameterAsBoolean(name); 111 } catch (Exception e) { 112 return defaultValue; 113 } 114 } 115 116 public InputStream readBody() throws IOException { 117 return request.getInputStream(); 118 } 119 120 public void readBodyInto(OutputStream out) throws IOException { 121 copy(readBody(), out); 122 } 123 124 public void respondWith(ResponseHandler handler) throws Exception { 125 handler.respond(this); 126 } 127 128 public void setStatus(int code) { 129 response.setStatus(code); 130 } 131 132 public void setHeader(String name, String value) { 133 if ("Content-Type".equals(name)) { 134 response.setContentType(value); 135 } else if ("Content-Length".equals(name)) { 136 response.setContentLength(Integer.parseInt(value)); 137 } else { 138 response.setHeader(name, value); 139 } 140 } 141 142 public void setHeader(String name, String [] values) { 143 for (int i = 0; i < values.length; i++) { 144 response.addHeader(name, values[i]); 145 } 146 } 147 148 public void setHeader(String name, Date value) { 149 response.setDateHeader(name, value.getTime()); 150 } 151 152 public void setHeader(String name, int value) { 153 response.setIntHeader(name, value); 154 } 155 156 public void addCookie(Cookie cookie) { 157 response.addCookie(cookie); 158 } 159 160 public OutputStream writeBody() throws IOException { 161 return response.getOutputStream(); 162 } 163 164 public void writeBodyFrom(InputStream in) throws IOException { 165 copy(in, writeBody()); 166 } 167 168 private static void copy(InputStream input, OutputStream output) throws IOException { 169 byte[] buf = new byte[4096]; 170 int len = 0; 171 while ((len = input.read(buf)) > -1) output.write(buf, 0, len); 172 } 173 174 private void checkExistenceOf(String name) { 175 if (request.getParameter(name) == null) 176 throw new RuntimeException ("Query does not contain parameter named: " + name); 177 } 178 } 179 | Popular Tags |