001 package com.khubla.pragmatach.framework.api;
002
003 import java.io.ByteArrayOutputStream;
004 import java.io.InputStream;
005 import java.util.Map;
006
007 import javax.servlet.ServletConfig;
008 import javax.servlet.ServletContext;
009 import javax.servlet.http.HttpServletRequest;
010 import javax.servlet.http.HttpServletResponse;
011 import javax.servlet.http.HttpSession;
012
013 import org.apache.commons.io.IOUtils;
014
015 import com.khubla.pragmatach.framework.annotation.Route;
016
017 /**
018 * @author tome
019 */
020 public class Request {
021 /**
022 * HttpServletRequest
023 */
024 private final HttpServletRequest httpServletRequest;
025 /**
026 * method
027 */
028 private final Route.HttpMethod method;
029 /**
030 * headers
031 */
032 private final Headers headers;
033 /**
034 * cookies
035 */
036 private final Cookies cookies;
037 /**
038 * creation time
039 */
040 private final long creationTime = System.currentTimeMillis();
041 /**
042 * servlet config
043 */
044 private final ServletConfig servletConfig;
045
046 /**
047 * ctor
048 */
049 public Request(HttpServletRequest httpServletRequest,
050 HttpServletResponse httpServletResponse, Route.HttpMethod method,
051 ServletConfig servletConfig) {
052 this.httpServletRequest = httpServletRequest;
053 this.servletConfig = servletConfig;
054 this.method = method;
055 headers = new Headers(httpServletRequest, httpServletResponse);
056 cookies = new Cookies(httpServletRequest, httpServletResponse);
057 }
058
059 public Cookies getCookies() {
060 return cookies;
061 }
062
063 public long getCreationTime() {
064 return creationTime;
065 }
066
067 public Headers getHeaders() {
068 return headers;
069 }
070
071 public HttpServletRequest getHttpServletRequest() {
072 return httpServletRequest;
073 }
074
075 public InputStream getInputStream() throws PragmatachException {
076 try {
077 return httpServletRequest.getInputStream();
078 } catch (final Exception e) {
079 throw new PragmatachException("Exception in getInputStream", e);
080 }
081 }
082
083 public Route.HttpMethod getMethod() {
084 return method;
085 }
086
087 /**
088 * parameters
089 */
090 public Map<String, String[]> getParameters() {
091 return httpServletRequest.getParameterMap();
092 }
093
094 /**
095 * get the HTTP POST body
096 */
097 public String getPostBody() throws PragmatachException {
098 try {
099 final ByteArrayOutputStream baos = new ByteArrayOutputStream();
100 IOUtils.copy(getInputStream(), baos);
101 return baos.toString("UTF-8");
102 } catch (final Exception e) {
103 throw new PragmatachException("Exception in getRequestBody", e);
104 }
105 }
106
107 /**
108 * get the resource path, taking off the servlet context path
109 */
110 public String getResourcePath() throws PragmatachException {
111 try {
112 final String uri = getURI();
113 String ret = uri.substring(getHttpServletRequest().getContextPath()
114 .length());
115 if (ret.endsWith("/")) {
116 ret = ret.substring(0, ret.length() - 1);
117 }
118 if ((null == ret) || (ret.length() == 0)) {
119 ret = "/";
120 }
121 return ret;
122 } catch (final Exception e) {
123 throw new PragmatachException("Exception in resourcePath", e);
124 }
125 }
126
127 public ServletConfig getServletConfig() {
128 return servletConfig;
129 }
130
131 /**
132 * servlet context
133 */
134 public ServletContext getServletContext() {
135 return httpServletRequest.getSession().getServletContext();
136 }
137
138 /**
139 * session
140 */
141 public HttpSession getSession() {
142 return httpServletRequest.getSession();
143 }
144
145 /**
146 * URI
147 */
148 public String getURI() {
149 return httpServletRequest.getRequestURI();
150 }
151 }