1 18 19 package org.apache.roller.ui.rendering.servlets; 20 21 import java.io.IOException ; 22 import java.util.HashMap ; 23 import java.util.Map ; 24 import javax.servlet.ServletConfig ; 25 import javax.servlet.ServletException ; 26 import javax.servlet.http.HttpServlet ; 27 import javax.servlet.http.HttpServletRequest ; 28 import javax.servlet.http.HttpServletResponse ; 29 import javax.servlet.jsp.JspFactory ; 30 import javax.servlet.jsp.PageContext ; 31 import org.apache.commons.logging.Log; 32 import org.apache.commons.logging.LogFactory; 33 import org.apache.roller.RollerException; 34 import org.apache.roller.config.RollerConfig; 35 import org.apache.roller.config.RollerRuntimeConfig; 36 import org.apache.roller.model.RollerFactory; 37 import org.apache.roller.model.UserManager; 38 import org.apache.roller.pojos.Template; 39 import org.apache.roller.pojos.WebsiteData; 40 import org.apache.roller.ui.rendering.Renderer; 41 import org.apache.roller.ui.rendering.RendererManager; 42 import org.apache.roller.ui.rendering.model.Model; 43 import org.apache.roller.ui.rendering.model.ModelLoader; 44 import org.apache.roller.ui.rendering.model.SearchResultsModel; 45 import org.apache.roller.ui.rendering.util.WeblogPageRequest; 46 import org.apache.roller.ui.rendering.util.WeblogSearchRequest; 47 import org.apache.roller.util.cache.CachedContent; 48 49 50 56 public class SearchServlet extends HttpServlet { 57 58 private static Log log = LogFactory.getLog(SearchServlet.class); 59 60 61 64 public void init(ServletConfig servletConfig) throws ServletException { 65 66 super.init(servletConfig); 67 68 log.info("Initializing SearchServlet"); 69 } 70 71 72 75 public void doGet(HttpServletRequest request, HttpServletResponse response) 76 throws ServletException , IOException { 77 78 log.debug("Entering"); 79 80 WebsiteData weblog = null; 81 WeblogSearchRequest searchRequest = null; 82 83 try { 85 searchRequest = new WeblogSearchRequest(request); 86 87 UserManager userMgr = RollerFactory.getRoller().getUserManager(); 89 weblog = userMgr.getWebsiteByHandle(searchRequest.getWeblogHandle(), Boolean.TRUE); 90 91 } catch(Exception e) { 92 log.debug("error creating weblog search request", e); 94 response.sendError(HttpServletResponse.SC_NOT_FOUND); 95 return; 96 } 97 98 Template page = null; 100 try { 101 page = weblog.getDefaultPage(); 102 if(page == null) { 103 throw new RollerException("Could not lookup default page "+ 104 "for weblog "+weblog.getHandle()); 105 } 106 } catch(Exception e) { 107 log.error("Error getting weblogs default page", e); 108 } 109 110 response.setContentType("text/html; charset=utf-8"); 112 113 Map model = new HashMap (); 115 try { 116 PageContext pageContext = JspFactory.getDefaultFactory().getPageContext( 117 this, request, response,"", true, 8192, true); 118 119 Map initData = new HashMap (); 121 initData.put("request", request); 122 initData.put("pageContext", pageContext); 123 124 WeblogPageRequest pageRequest = new WeblogPageRequest(); 130 pageRequest.setWeblogHandle(searchRequest.getWeblogHandle()); 131 pageRequest.setWeblogCategoryName(searchRequest.getWeblogCategoryName()); 132 initData.put("weblogRequest", pageRequest); 133 initData.put("searchRequest", searchRequest); 134 135 String searchModels = RollerConfig.getProperty("rendering.searchModels"); 137 ModelLoader.loadModels(searchModels, model, initData, true); 138 139 if(RollerRuntimeConfig.isSiteWideWeblog(weblog.getHandle())) { 141 String siteModels = RollerConfig.getProperty("rendering.siteModels"); 142 ModelLoader.loadModels(siteModels, model, initData, true); 143 } 144 145 ModelLoader.loadCustomModels(weblog, model, initData); 147 148 ModelLoader.loadOldModels(model, request, response, pageContext, pageRequest); 150 151 Model searchModel = new SearchResultsModel(); 153 searchModel.init(initData); 154 model.put("searchResults", searchModel); 155 156 } catch (RollerException ex) { 157 log.error("Error loading model objects for page", ex); 158 159 if(!response.isCommitted()) response.reset(); 160 response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 161 return; 162 } 163 164 165 Renderer renderer = null; 167 try { 168 log.debug("Looking up renderer"); 169 renderer = RendererManager.getRenderer(page); 170 } catch(Exception e) { 171 log.error("Couldn't find renderer for rsd template", e); 173 174 if(!response.isCommitted()) response.reset(); 175 response.sendError(HttpServletResponse.SC_NOT_FOUND); 176 return; 177 } 178 179 CachedContent rendererOutput = new CachedContent(4096); 181 try { 182 log.debug("Doing rendering"); 183 renderer.render(model, rendererOutput.getCachedWriter()); 184 185 rendererOutput.flush(); 187 rendererOutput.close(); 188 } catch(Exception e) { 189 log.error("Error during rendering for rsd template", e); 191 192 if(!response.isCommitted()) response.reset(); 193 response.sendError(HttpServletResponse.SC_NOT_FOUND); 194 return; 195 } 196 197 198 200 log.debug("Flushing response output"); 202 response.setContentLength(rendererOutput.getContent().length); 203 response.getOutputStream().write(rendererOutput.getContent()); 204 205 log.debug("Exiting"); 206 } 207 208 } 209 | Popular Tags |