1 12 13 package com.openedit.generators; 14 15 import java.io.IOException ; 16 import java.io.PrintWriter ; 17 18 import javax.servlet.FilterChain ; 19 import javax.servlet.RequestDispatcher ; 20 import javax.servlet.ServletException ; 21 import javax.servlet.ServletOutputStream ; 22 import javax.servlet.http.HttpServletRequest ; 23 import javax.servlet.http.HttpServletRequestWrapper ; 24 import javax.servlet.http.HttpServletResponse ; 25 import javax.servlet.http.HttpServletResponseWrapper ; 26 27 import org.apache.commons.logging.Log; 28 import org.apache.commons.logging.LogFactory; 29 30 import com.openedit.OpenEditException; 31 import com.openedit.WebPageRequest; 32 import com.openedit.page.Page; 33 34 38 public class FilterGenerator extends BaseGenerator 39 { 40 protected static final Log log = LogFactory.getLog(FilterGenerator.class); 41 42 public void generate(WebPageRequest inContext, Page inPage, Output inOut) 43 throws OpenEditException 44 { 45 HttpServletRequest httpRequest = inContext.getRequest(); 46 HttpServletResponse httpResponse = inContext.getResponse(); 47 Page page = (Page) inContext.getPageValue("page"); 48 49 httpRequest.setAttribute("context", inContext); 51 httpRequest.setAttribute("pages", inContext.getPageStreamer()); 52 httpRequest.setAttribute("content", inContext.getContentPage()); 53 54 62 63 DecoratedServletResponse response = new DecoratedServletResponse(httpResponse, 64 new DecoratedServletOutputStream(inOut)); 65 66 DecoratedServletRequest newrequest = new DecoratedServletRequest(httpRequest); 67 68 String requestPath = page.getContentItem().getActualPath(); 69 newrequest.setrequestURI(requestPath); 70 71 try 72 { 73 if( requestPath.endsWith(".jsp") ) 75 { 76 RequestDispatcher jspDispatcher = httpRequest.getRequestDispatcher( requestPath ); 78 jspDispatcher.include(newrequest, response); } 80 else 81 { 82 FilterChain chain = (FilterChain ) httpRequest.getAttribute("servletchain"); 83 chain.doFilter(newrequest, response); } 85 } 86 catch (ServletException ex) 87 { 88 throw new OpenEditException(ex); 89 } 90 catch (IOException ex) 91 { 92 throw new OpenEditException(ex); 93 } 94 } 95 96 99 class DecoratedServletResponse extends HttpServletResponseWrapper 100 { 101 DecoratedServletOutputStream output; 102 103 public DecoratedServletResponse(HttpServletResponse response, 104 DecoratedServletOutputStream inOut) 105 { 106 super(response); 107 this.output = inOut; 108 } 109 110 public boolean isCommitted() 112 { 113 return false; 114 } 115 116 public void setContentLength(int len) 117 { 118 } 119 120 public void setContentType(java.lang.String type) 121 { 122 } 123 124 public PrintWriter getWriter() 126 { 127 PrintWriter out = new PrintWriter (output.getOutput().getWriter()) 128 { 129 public void close() 130 { 131 } 133 }; 134 return out; 135 } 136 137 public ServletOutputStream getOutputStream() throws IOException 139 { 140 return output; 141 } 142 143 public void reset() 144 { 145 } 146 147 public void resetBuffer() 148 { 149 } 150 151 } 152 153 class DecoratedServletRequest extends HttpServletRequestWrapper 154 { 155 protected String fieldRequestURI; 156 157 public DecoratedServletRequest(HttpServletRequest inRequest) 158 { 159 super(inRequest); 160 } 161 162 public void setrequestURI(String inUri) 163 { 164 fieldRequestURI = inUri; 165 } 166 167 public String getRequestURI() 168 { 169 if (fieldRequestURI != null) 170 { 171 return fieldRequestURI; 172 } 173 return super.getRequestURI(); 174 } 175 176 } 177 178 class DecoratedServletOutputStream extends ServletOutputStream 179 { 180 Output output; 181 182 public DecoratedServletOutputStream(Output inOut) 183 { 184 this.output = inOut; 185 } 186 187 public void write(int b) throws java.io.IOException 188 { 189 output.getStream().write(b); 192 } 193 194 public void write(byte b[]) throws IOException 195 { 196 write(b, 0, b.length); 197 } 198 199 public void write(byte b[], int off, int len) throws IOException 200 { 201 output.getStream().write(b, off, len); 203 } 204 205 public void close() throws IOException 206 { 207 } 209 210 public void flush() throws IOException 211 { 212 output.getStream().flush(); 213 } 214 215 public Output getOutput() 216 { 217 return output; 218 } 219 } 220 221 } 222 | Popular Tags |