roller-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ghu...@apache.org
Subject svn commit: r1236743 - in /roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets: PageServlet.java SearchServlet.java
Date Fri, 27 Jan 2012 16:38:03 GMT
Author: ghuber
Date: Fri Jan 27 16:38:03 2012
New Revision: 1236743

URL: http://svn.apache.org/viewvc?rev=1236743&view=rev
Log:
Theme reloading fixes for custom themes

Modified:
    roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PageServlet.java
    roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java

Modified: roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PageServlet.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PageServlet.java?rev=1236743&r1=1236742&r2=1236743&view=diff
==============================================================================
--- roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PageServlet.java
(original)
+++ roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PageServlet.java
Fri Jan 27 16:38:03 2012
@@ -34,6 +34,7 @@ import org.apache.roller.weblogger.pojos
 import org.apache.roller.weblogger.pojos.ThemeTemplate;
 import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.pojos.WeblogEntry;
+import org.apache.roller.weblogger.pojos.WeblogTemplate;
 import org.apache.roller.weblogger.ui.core.RollerContext;
 import org.apache.roller.weblogger.ui.rendering.Renderer;
 import org.apache.roller.weblogger.ui.rendering.RendererManager;
@@ -66,143 +67,157 @@ import java.util.regex.Pattern;
  */
 public class PageServlet extends HttpServlet {
 
-    private static Log log = LogFactory.getLog(PageServlet.class);
-    // for referrer processing
-    private boolean processReferrers = true;
-    private static Pattern robotPattern = null;
-    // for caching
-    private boolean excludeOwnerPages = false;
-    private WeblogPageCache weblogPageCache = null;
-    private SiteWideCache siteWideCache = null;
-    
-    // Development theme reloading
+	private static Log log = LogFactory.getLog(PageServlet.class);
+	// for referrer processing
+	private boolean processReferrers = true;
+	private static Pattern robotPattern = null;
+	// for caching
+	private boolean excludeOwnerPages = false;
+	private WeblogPageCache weblogPageCache = null;
+	private SiteWideCache siteWideCache = null;
+
+	// Development theme reloading
 	Boolean themeReload = false;
 
-    /**
-     * Init method for this servlet
-     */
-    public void init(ServletConfig servletConfig) throws ServletException {
-
-        super.init(servletConfig);
-
-        log.info("Initializing PageServlet");
-
-        this.excludeOwnerPages = WebloggerConfig.getBooleanProperty("cache.excludeOwnerEditPages");
-
-        // get a reference to the weblog page cache
-        this.weblogPageCache = WeblogPageCache.getInstance();
-
-        // get a reference to the site wide cache
-        this.siteWideCache = SiteWideCache.getInstance();
-
-        // see if built-in referrer processing is enabled
-        this.processReferrers = WebloggerConfig.getBooleanProperty("referrers.processing.enabled");
-
-        log.info("Referrer processing enabled = " + this.processReferrers);
-
-        // check for possible robot pattern
-        String robotPatternStr = WebloggerConfig.getProperty("referrer.robotCheck.userAgentPattern");
-        if (robotPatternStr != null && robotPatternStr.length() > 0) {
-            // Parse the pattern, and store the compiled form.
-            try {
-                robotPattern = Pattern.compile(robotPatternStr);
-            } catch (Exception e) {
-                // Most likely a PatternSyntaxException; log and continue as if it is not
set.
-                log.error("Error parsing referrer.robotCheck.userAgentPattern value '" +
robotPatternStr + "'.  Robots will not be filtered. ", e);
-            }
-        }
-        
-        // Development theme reloading
+	/**
+	 * Init method for this servlet
+	 */
+	public void init(ServletConfig servletConfig) throws ServletException {
+
+		super.init(servletConfig);
+
+		log.info("Initializing PageServlet");
+
+		this.excludeOwnerPages = WebloggerConfig
+				.getBooleanProperty("cache.excludeOwnerEditPages");
+
+		// get a reference to the weblog page cache
+		this.weblogPageCache = WeblogPageCache.getInstance();
+
+		// get a reference to the site wide cache
+		this.siteWideCache = SiteWideCache.getInstance();
+
+		// see if built-in referrer processing is enabled
+		this.processReferrers = WebloggerConfig
+				.getBooleanProperty("referrers.processing.enabled");
+
+		log.info("Referrer processing enabled = " + this.processReferrers);
+
+		// check for possible robot pattern
+		String robotPatternStr = WebloggerConfig
+				.getProperty("referrer.robotCheck.userAgentPattern");
+		if (robotPatternStr != null && robotPatternStr.length() > 0) {
+			// Parse the pattern, and store the compiled form.
+			try {
+				robotPattern = Pattern.compile(robotPatternStr);
+			} catch (Exception e) {
+				// Most likely a PatternSyntaxException; log and continue as if
+				// it is not set.
+				log.error(
+						"Error parsing referrer.robotCheck.userAgentPattern value '"
+								+ robotPatternStr
+								+ "'.  Robots will not be filtered. ", e);
+			}
+		}
+
+		// Development theme reloading
 		themeReload = WebloggerConfig.getBooleanProperty("themes.reload.mode");
-    }
+	}
+
+	/**
+	 * Handle GET requests for weblog pages.
+	 */
+	public void doGet(HttpServletRequest request, HttpServletResponse response)
+			throws ServletException, IOException {
+
+		log.debug("Entering");
+
+		// do referrer processing, if it's enabled
+		// NOTE: this *must* be done first because it triggers a hibernate flush
+		// which will close the active session and cause lazy init exceptions
+		// otherwise
+		if (this.processReferrers) {
+			boolean spam = this.processReferrer(request);
+			if (spam) {
+				log.debug("spammer, giving 'em a 403");
+				if (!response.isCommitted()) {
+					response.reset();
+				}
+				response.sendError(HttpServletResponse.SC_FORBIDDEN);
+				return;
+			}
+		}
 
-    /**
-     * Handle GET requests for weblog pages.
-     */
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
-
-        log.debug("Entering");
-
-
-
-        // do referrer processing, if it's enabled
-        // NOTE: this *must* be done first because it triggers a hibernate flush
-        // which will close the active session and cause lazy init exceptions otherwise
-        if (this.processReferrers) {
-            boolean spam = this.processReferrer(request);
-            if (spam) {
-                log.debug("spammer, giving 'em a 403");
-                if (!response.isCommitted()) {
-                    response.reset();
-                }
-                response.sendError(HttpServletResponse.SC_FORBIDDEN);
-                return;
-            }
-        }
-
-        Weblog weblog = null;
-        boolean isSiteWide = false;
-
-        WeblogPageRequest pageRequest = null;
-        try {
-            pageRequest = new WeblogPageRequest(request);
-
-            weblog = pageRequest.getWeblog();
-            if (weblog == null) {
-                throw new WebloggerException("unable to lookup weblog: " + pageRequest.getWeblogHandle());
-            }
-
-            // is this the site-wide weblog?
-            isSiteWide = WebloggerRuntimeConfig.isSiteWideWeblog(pageRequest.getWeblogHandle());
-        } catch (Exception e) {
-            // some kind of error parsing the request or looking up weblog
-            log.debug("error creating page request", e);
-            response.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return;
-        }
-
-
-        // determine the lastModified date for this content
-        long lastModified = System.currentTimeMillis();
-        if (isSiteWide) {
-            lastModified = siteWideCache.getLastModified().getTime();
-        } else if (weblog.getLastModified() != null) {
-            lastModified = weblog.getLastModified().getTime();
-        }
-
-        // 304 Not Modified handling.
-        // We skip this for logged in users to avoid the scenerio where a user
-        // views their weblog, logs in, then gets a 304 without the 'edit' links
-        if (!pageRequest.isLoggedIn()) {
-            if (ModDateHeaderUtil.respondIfNotModified(request, response, lastModified))
{
-                return;
-            } else {
-                // set last-modified date
-                ModDateHeaderUtil.setLastModifiedHeader(response, lastModified);
-            }
-        }
-
-
-        // generate cache key
-        String cacheKey = null;
-        if (isSiteWide) {
-            cacheKey = siteWideCache.generateKey(pageRequest);
-        } else {
-            cacheKey = weblogPageCache.generateKey(pageRequest);
-        }
-        
-        // Development only. Reload if theme has been modified
-		if (themeReload) {
+		Weblog weblog = null;
+		boolean isSiteWide = false;
+
+		WeblogPageRequest pageRequest = null;
+		try {
+			pageRequest = new WeblogPageRequest(request);
+
+			weblog = pageRequest.getWeblog();
+			if (weblog == null) {
+				throw new WebloggerException("unable to lookup weblog: "
+						+ pageRequest.getWeblogHandle());
+			}
+
+			// is this the site-wide weblog?
+			isSiteWide = WebloggerRuntimeConfig.isSiteWideWeblog(pageRequest
+					.getWeblogHandle());
+		} catch (Exception e) {
+			// some kind of error parsing the request or looking up weblog
+			log.debug("error creating page request", e);
+			response.sendError(HttpServletResponse.SC_NOT_FOUND);
+			return;
+		}
+
+		// determine the lastModified date for this content
+		long lastModified = System.currentTimeMillis();
+		if (isSiteWide) {
+			lastModified = siteWideCache.getLastModified().getTime();
+		} else if (weblog.getLastModified() != null) {
+			lastModified = weblog.getLastModified().getTime();
+		}
+
+		// 304 Not Modified handling.
+		// We skip this for logged in users to avoid the scenerio where a user
+		// views their weblog, logs in, then gets a 304 without the 'edit' links
+		if (!pageRequest.isLoggedIn()) {
+			if (ModDateHeaderUtil.respondIfNotModified(request, response,
+					lastModified)) {
+				return;
+			} else {
+				// set last-modified date
+				ModDateHeaderUtil.setLastModifiedHeader(response, lastModified);
+			}
+		}
+
+		// generate cache key
+		String cacheKey = null;
+		if (isSiteWide) {
+			cacheKey = siteWideCache.generateKey(pageRequest);
+		} else {
+			cacheKey = weblogPageCache.generateKey(pageRequest);
+		}
+
+		// Development only. Reload if theme has been modified
+		if (themeReload
+				&& !weblog.getEditorTheme()
+						.equals(WeblogTemplate.ACTION_CUSTOM)
+				&& (pageRequest.getPathInfo() == null || pageRequest
+						.getPathInfo() != null)) {
 			try {
-				ThemeManager manager = WebloggerFactory.getWeblogger().getThemeManager();
-				boolean reloaded = manager.reLoadThemeFromDisk(weblog.getEditorTheme());
+				ThemeManager manager = WebloggerFactory.getWeblogger()
+						.getThemeManager();
+				boolean reloaded = manager.reLoadThemeFromDisk(weblog
+						.getEditorTheme());
 				if (reloaded) {
 					if (isSiteWide) {
 						siteWideCache.clear();
 					} else {
 						weblogPageCache.clear();
 					}
-					I18nMessages.reloadBundle(weblog.getLocaleInstance()); 
+					I18nMessages.reloadBundle(weblog.getLocaleInstance());
 				}
 
 			} catch (Exception ex) {
@@ -210,431 +225,462 @@ public class PageServlet extends HttpSer
 			}
 		}
 
-        // cached content checking
-        if ((!this.excludeOwnerPages || !pageRequest.isLoggedIn()) && request.getAttribute("skipCache")
== null) {
+		// cached content checking
+		if ((!this.excludeOwnerPages || !pageRequest.isLoggedIn())
+				&& request.getAttribute("skipCache") == null) {
+
+			CachedContent cachedContent = null;
+			if (isSiteWide) {
+				cachedContent = (CachedContent) siteWideCache.get(cacheKey);
+			} else {
+				cachedContent = (CachedContent) weblogPageCache.get(cacheKey,
+						lastModified);
+			}
+
+			if (cachedContent != null) {
+				log.debug("HIT " + cacheKey);
+
+				// allow for hit counting
+				if (!isSiteWide) {
+					this.processHit(weblog, request.getRequestURL().toString(),
+							request.getHeader("referer"));
+				}
+
+				response.setContentLength(cachedContent.getContent().length);
+				response.setContentType(cachedContent.getContentType());
+				response.getOutputStream().write(cachedContent.getContent());
+				return;
+			} else {
+				log.debug("MISS " + cacheKey);
+			}
+		}
+
+		log.debug("Looking for template to use for rendering");
+
+		// figure out what template to use
+		ThemeTemplate page = null;
+
+		// If this is a popup request, then deal with it specially
+		// TODO: do we really need to keep supporting this?
+		if (request.getParameter("popup") != null) {
+			try {
+				// Does user have a popupcomments page?
+				page = weblog.getTheme().getTemplateByName("_popupcomments");
+			} catch (Exception e) {
+				// ignored ... considered page not found
+			}
+
+			// User doesn't have one so return the default
+			if (page == null) {
+				page = new StaticThemeTemplate(
+						"templates/weblog/popupcomments.vm", "velocity");
+			}
+
+			// If request specified the page, then go with that
+		} else if ("page".equals(pageRequest.getContext())) {
+			page = pageRequest.getWeblogPage();
+
+			// if we don't have this page then 404, we don't let
+			// this one fall through to the default template
+			if (page == null) {
+				if (!response.isCommitted()) {
+					response.reset();
+				}
+				response.sendError(HttpServletResponse.SC_NOT_FOUND);
+				return;
+			}
+
+			// If request specified tags section index, then look for custom
+			// template
+		} else if ("tags".equals(pageRequest.getContext())
+				&& pageRequest.getTags() != null) {
+			try {
+				page = weblog.getTheme().getTemplateByAction(
+						ThemeTemplate.ACTION_TAGSINDEX);
+			} catch (Exception e) {
+				log.error("Error getting weblog page for action 'tagsIndex'", e);
+			}
+
+			// if we don't have a custom tags page then 404, we don't let
+			// this one fall through to the default template
+			if (page == null) {
+				if (!response.isCommitted()) {
+					response.reset();
+				}
+				response.sendError(HttpServletResponse.SC_NOT_FOUND);
+				return;
+			}
+
+			// If this is a permalink then look for a permalink template
+		} else if (pageRequest.getWeblogAnchor() != null) {
+			try {
+				page = weblog.getTheme().getTemplateByAction(
+						ThemeTemplate.ACTION_PERMALINK);
+			} catch (Exception e) {
+				log.error("Error getting weblog page for action 'permalink'", e);
+			}
+		}
+
+		// if we haven't found a page yet then try our default page
+		if (page == null) {
+			try {
+				page = weblog.getTheme().getDefaultTemplate();
+			} catch (Exception e) {
+				log.error(
+						"Error getting default page for weblog = "
+								+ weblog.getHandle(), e);
+			}
+		}
+
+		// Still no page? Then that is a 404
+		if (page == null) {
+			if (!response.isCommitted()) {
+				response.reset();
+			}
+			response.sendError(HttpServletResponse.SC_NOT_FOUND);
+			return;
+		}
+
+		log.debug("page found, dealing with it");
+
+		// validation. make sure that request input makes sense.
+		boolean invalid = false;
+		if (pageRequest.getWeblogPageName() != null && page.isHidden()) {
+			invalid = true;
+		}
+		if (pageRequest.getLocale() != null) {
 
-            CachedContent cachedContent = null;
-            if (isSiteWide) {
-                cachedContent = (CachedContent) siteWideCache.get(cacheKey);
-            } else {
-                cachedContent = (CachedContent) weblogPageCache.get(cacheKey, lastModified);
-            }
-
-            if (cachedContent != null) {
-                log.debug("HIT " + cacheKey);
-
-                // allow for hit counting
-                if (!isSiteWide) {
-                    this.processHit(weblog, request.getRequestURL().toString(), request.getHeader("referer"));
-                }
-
-                response.setContentLength(cachedContent.getContent().length);
-                response.setContentType(cachedContent.getContentType());
-                response.getOutputStream().write(cachedContent.getContent());
-                return;
-            } else {
-                log.debug("MISS " + cacheKey);
-            }
-        }
-
-        log.debug("Looking for template to use for rendering");
-
-        // figure out what template to use
-        ThemeTemplate page = null;
-
-        // If this is a popup request, then deal with it specially
-        // TODO: do we really need to keep supporting this?
-        if (request.getParameter("popup") != null) {
-            try {
-                // Does user have a popupcomments page?
-                page = weblog.getTheme().getTemplateByName("_popupcomments");
-            } catch (Exception e) {
-                // ignored ... considered page not found
-            }
-
-            // User doesn't have one so return the default
-            if (page == null) {
-                page = new StaticThemeTemplate("templates/weblog/popupcomments.vm", "velocity");
-            }
-
-            // If request specified the page, then go with that
-        } else if ("page".equals(pageRequest.getContext())) {
-            page = pageRequest.getWeblogPage();
-
-            // if we don't have this page then 404, we don't let
-            // this one fall through to the default template
-            if (page == null) {
-                if (!response.isCommitted()) {
-                    response.reset();
-                }
-                response.sendError(HttpServletResponse.SC_NOT_FOUND);
-                return;
-            }
-
-            // If request specified tags section index, then look for custom template
-        } else if ("tags".equals(pageRequest.getContext()) && pageRequest.getTags()
!= null) {
-            try {
-                page = weblog.getTheme().getTemplateByAction(ThemeTemplate.ACTION_TAGSINDEX);
-            } catch (Exception e) {
-                log.error("Error getting weblog page for action 'tagsIndex'", e);
-            }
-
-            // if we don't have a custom tags page then 404, we don't let
-            // this one fall through to the default template
-            if (page == null) {
-                if (!response.isCommitted()) {
-                    response.reset();
-                }
-                response.sendError(HttpServletResponse.SC_NOT_FOUND);
-                return;
-            }
-
-            // If this is a permalink then look for a permalink template
-        } else if (pageRequest.getWeblogAnchor() != null) {
-            try {
-                page = weblog.getTheme().getTemplateByAction(ThemeTemplate.ACTION_PERMALINK);
-            } catch (Exception e) {
-                log.error("Error getting weblog page for action 'permalink'", e);
-            }
-        }
-
-        // if we haven't found a page yet then try our default page
-        if (page == null) {
-            try {
-                page = weblog.getTheme().getDefaultTemplate();
-            } catch (Exception e) {
-                log.error("Error getting default page for weblog = " + weblog.getHandle(),
e);
-            }
-        }
-
-        // Still no page?  Then that is a 404
-        if (page == null) {
-            if (!response.isCommitted()) {
-                response.reset();
-            }
-            response.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return;
-        }
-
-        log.debug("page found, dealing with it");
-
-        // validation.  make sure that request input makes sense.
-        boolean invalid = false;
-        if (pageRequest.getWeblogPageName() != null && page.isHidden()) {
-            invalid = true;
-        }
-        if (pageRequest.getLocale() != null) {
-
-            // locale view only allowed if weblog has enabled it
-            if (!pageRequest.getWeblog().isEnableMultiLang()) {
-                invalid = true;
-            }
-        }
-        if (pageRequest.getWeblogAnchor() != null) {
-
-            // permalink specified.
-            // entry must exist, be published before current time, and locale must match
-            WeblogEntry entry = pageRequest.getWeblogEntry();
-            if (entry == null) {
-                invalid = true;
-            } else if (pageRequest.getLocale() != null && !entry.getLocale().startsWith(pageRequest.getLocale()))
{
-                invalid = true;
-            } else if (!entry.isPublished()) {
-                invalid = true;
-            } else if (new Date().before(entry.getPubTime())) {
-                invalid = true;
-            }
-        } else if (pageRequest.getWeblogCategoryName() != null) {
-
-            // category specified.  category must exist.
-            if (pageRequest.getWeblogCategory() == null) {
-                invalid = true;
-            }
-        } else if (pageRequest.getTags() != null && pageRequest.getTags().size()
> 0) {
-
-            try {
-                // tags specified.  make sure they exist.
-                WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
-                invalid = !wmgr.getTagComboExists(pageRequest.getTags(), (isSiteWide) ? null
: weblog);
-            } catch (WebloggerException ex) {
-                invalid = true;
-            }
-        }
-
-
-        if (invalid) {
-            log.debug("page failed validation, bailing out");
-            if (!response.isCommitted()) {
-                response.reset();
-            }
-            response.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return;
-        }
-
-
-        // do we need to force a specific locale for the request?
-        if (pageRequest.getLocale() == null && !weblog.isShowAllLangs()) {
-            pageRequest.setLocale(weblog.getLocale());
-        }
-
-
-        // allow for hit counting
-        if (!isSiteWide) {
-            this.processHit(weblog, request.getRequestURL().toString(), request.getHeader("referer"));
-        }
-
-
-        // looks like we need to render content
-        // set the content deviceType
-        String contentType = "text/html; charset=utf-8";
-        if (StringUtils.isNotEmpty(page.getOutputContentType())) {
-            contentType = page.getOutputContentType() + "; charset=utf-8";
-        } else {
-            String mimeType = RollerContext.getServletContext().getMimeType(page.getLink());
-            if (mimeType != null) {
-                // we found a match ... set the content deviceType
-                contentType = mimeType + "; charset=utf-8";
-            } else {
-                contentType = "text/html; charset=utf-8";
-            }
-        }
-
-        HashMap model = new HashMap();
-        try {
-            PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this,
request, response, "", false, 8192, true);
-
-            // special hack for menu tag
-            request.setAttribute("pageRequest", pageRequest);
-
-            // populate the rendering model
-            Map initData = new HashMap();
-            initData.put("requestParameters", request.getParameterMap());
-            initData.put("parsedRequest", pageRequest);
-            initData.put("pageContext", pageContext);
-
-            // define url strategy
-            initData.put("urlStrategy", WebloggerFactory.getWeblogger().getUrlStrategy());
-
-            // if this was a comment posting, check for comment form
-            WeblogEntryCommentForm commentForm = (WeblogEntryCommentForm) request.getAttribute("commentForm");
-            if (commentForm != null) {
-                initData.put("commentForm", commentForm);
-            }
-
-            // Load models for pages
-            String pageModels = WebloggerConfig.getProperty("rendering.pageModels");
-            ModelLoader.loadModels(pageModels, model, initData, true);
-            // Load special models for site-wide blog
-            if (WebloggerRuntimeConfig.isSiteWideWeblog(weblog.getHandle())) {
-                String siteModels = WebloggerConfig.getProperty("rendering.siteModels");
-                ModelLoader.loadModels(siteModels, model, initData, true);
-            }
-
-            // Load weblog custom models
-            ModelLoader.loadCustomModels(weblog, model, initData);
-
-            // ick, gotta load pre-3.0 model stuff as well :(
-            ModelLoader.loadOldModels(model, request, response, pageContext, pageRequest,
WebloggerFactory.getWeblogger().getUrlStrategy());
-        } catch (WebloggerException ex) {
-            log.error("Error loading model objects for page", ex);
-
-            if (!response.isCommitted()) {
-                response.reset();
-            }
-            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
-            return;
-        }
-
-
-        // lookup Renderer we are going to use
-        Renderer renderer = null;
-        try {
-            log.debug("Looking up renderer");
-            renderer = RendererManager.getRenderer(page, pageRequest.getDeviceType());
-        } catch (Exception e) {
-            // nobody wants to render my content :(
-            log.error("Couldn't find renderer for page " + page.getId(), e);
-
-            if (!response.isCommitted()) {
-                response.reset();
-            }
-            response.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return;
-        }
-
-        // render content.  use size of about 24K for a standard page
-        CachedContent rendererOutput = new CachedContent(24567, contentType);
-        try {
-            log.debug("Doing rendering");
-            renderer.render(model, rendererOutput.getCachedWriter());
-
-            // flush rendered output and close
-            rendererOutput.flush();
-            rendererOutput.close();
-        } catch (Exception e) {
-            // bummer, error during rendering
-            log.error("Error during rendering for page " + page.getId(), e);
-
-            if (!response.isCommitted()) {
-                response.reset();
-            }
-            response.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return;
-        }
-
-
-        // post rendering process
-        // flush rendered content to response
-        log.debug("Flushing response output");
-        response.setContentType(contentType);
-        response.setContentLength(rendererOutput.getContent().length);
-        response.getOutputStream().write(rendererOutput.getContent());
-
-        // cache rendered content.  only cache if user is not logged in?
-        if ((!this.excludeOwnerPages || !pageRequest.isLoggedIn()) && request.getAttribute("skipCache")
== null) {
-            log.debug("PUT " + cacheKey);
-
-            // put it in the right cache
-            if (isSiteWide) {
-                siteWideCache.put(cacheKey, rendererOutput);
-            } else {
-                weblogPageCache.put(cacheKey, rendererOutput);
-            }
-        } else {
-            log.debug("SKIPPED " + cacheKey);
-        }
-
-        log.debug("Exiting");
-    }
-
-    /**
-     * Handle POST requests.
-     *
-     * We have this here because the comment servlet actually forwards some of
-     * its requests on to us to render some pages with cusom messaging.  We
-     * may want to revisit this approach in the future and see if we can do
-     * this in a different way, but for now this is the easy way.
-     */
-    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
-
-        // make sure caching is disabled
-        request.setAttribute("skipCache", "true");
-
-        // handle just like a GET request
-        this.doGet(request, response);
-    }
-
-    /**
-     * Notify the hit tracker that it has an incoming page hit.
-     */
-    private void processHit(Weblog weblog, String url, String referrer) {
-
-        HitCountQueue counter = HitCountQueue.getInstance();
-        counter.processHit(weblog, url, referrer);
-    }
-
-    /**
-     * Process the incoming request to extract referrer info and pass it on
-     * to the referrer processing queue for tracking.
-     *
-     * @return true if referrer was spam, false otherwise
-     */
-    private boolean processReferrer(HttpServletRequest request) {
-
-        log.debug("processing referrer for " + request.getRequestURI());
-
-        // bleh!  because ref processing does a flush it will close
-        // our hibernate session and cause lazy init exceptions on
-        // objects we have fetched, so we need to use a separate
-        // page request object for this
-        WeblogPageRequest pageRequest;
-        try {
-            pageRequest = new WeblogPageRequest(request);
-        } catch (InvalidRequestException ex) {
-            return false;
-        }
-
-        // if this came from site-wide frontpage then skip it
-        if (WebloggerRuntimeConfig.isSiteWideWeblog(pageRequest.getWeblogHandle())) {
-            return false;
-        }
-
-        // if this came from a robot then don't process it
-        if (robotPattern != null) {
-            String userAgent = request.getHeader("User-Agent");
-            if (userAgent != null && userAgent.length() > 0 && robotPattern.matcher(userAgent).matches())
{
-                log.debug("skipping referrer from robot");
-                return false;
-            }
-        }
-
-        String referrerUrl = request.getHeader("Referer");
-        StringBuffer reqsb = request.getRequestURL();
-        if (request.getQueryString() != null) {
-            reqsb.append("?");
-            reqsb.append(request.getQueryString());
-        }
-        String requestUrl = reqsb.toString();
-
-        log.debug("referrer = " + referrerUrl);
-
-        // if this came from persons own blog then don't process it
-        String selfSiteFragment = "/" + pageRequest.getWeblogHandle();
-        if (referrerUrl != null && referrerUrl.indexOf(selfSiteFragment) != -1) {
-            log.debug("skipping referrer from own blog");
-            return false;
-        }
-
-        // validate the referrer
-        if (pageRequest != null && pageRequest.getWeblogHandle() != null) {
-
-            // Base page URLs, with and without www.
-            String basePageUrlWWW = WebloggerRuntimeConfig.getAbsoluteContextURL() + "/"
+ pageRequest.getWeblogHandle();
-            String basePageUrl = basePageUrlWWW;
-            if (basePageUrlWWW.startsWith("http://www.")) {
-                // chop off the http://www.
-                basePageUrl = "http://" + basePageUrlWWW.substring(11);
-            }
-
-            // ignore referrers coming from users own blog
-            if (referrerUrl == null || (!referrerUrl.startsWith(basePageUrl) && !referrerUrl.startsWith(basePageUrlWWW)))
{
-
-                // validate the referrer
-                if (referrerUrl != null) {
-                    // treat editor referral as direct
-                    int lastSlash = requestUrl.indexOf("/", 8);
-                    if (lastSlash == -1) {
-                        lastSlash = requestUrl.length();
-                    }
-                    String requestSite = requestUrl.substring(0, lastSlash);
-
-                    if (referrerUrl.matches(requestSite + ".*\\.rol.*")) {
-                        referrerUrl = null;
-                    } else if (BlacklistChecker.checkReferrer(pageRequest.getWeblog(), referrerUrl))
{
-                        return true;
-                    }
-                }
-            } else {
-                log.debug("Ignoring referer = " + referrerUrl);
-                return false;
-            }
-        }
-
-        // referrer is valid, lets record it
-        try {
-            IncomingReferrer referrer = new IncomingReferrer();
-            referrer.setReferrerUrl(referrerUrl);
-            referrer.setRequestUrl(requestUrl);
-            referrer.setWeblogHandle(pageRequest.getWeblogHandle());
-            referrer.setWeblogAnchor(pageRequest.getWeblogAnchor());
-            referrer.setWeblogDateString(pageRequest.getWeblogDate());
-
-            ReferrerQueueManager refQueue = WebloggerFactory.getWeblogger().getReferrerQueueManager();
-            refQueue.processReferrer(referrer);
-        } catch (Exception e) {
-            log.error("Error processing referrer", e);
-        }
+			// locale view only allowed if weblog has enabled it
+			if (!pageRequest.getWeblog().isEnableMultiLang()) {
+				invalid = true;
+			}
+		}
+		if (pageRequest.getWeblogAnchor() != null) {
+
+			// permalink specified.
+			// entry must exist, be published before current time, and locale
+			// must match
+			WeblogEntry entry = pageRequest.getWeblogEntry();
+			if (entry == null) {
+				invalid = true;
+			} else if (pageRequest.getLocale() != null
+					&& !entry.getLocale().startsWith(pageRequest.getLocale())) {
+				invalid = true;
+			} else if (!entry.isPublished()) {
+				invalid = true;
+			} else if (new Date().before(entry.getPubTime())) {
+				invalid = true;
+			}
+		} else if (pageRequest.getWeblogCategoryName() != null) {
+
+			// category specified. category must exist.
+			if (pageRequest.getWeblogCategory() == null) {
+				invalid = true;
+			}
+		} else if (pageRequest.getTags() != null
+				&& pageRequest.getTags().size() > 0) {
+
+			try {
+				// tags specified. make sure they exist.
+				WeblogEntryManager wmgr = WebloggerFactory.getWeblogger()
+						.getWeblogEntryManager();
+				invalid = !wmgr.getTagComboExists(pageRequest.getTags(),
+						(isSiteWide) ? null : weblog);
+			} catch (WebloggerException ex) {
+				invalid = true;
+			}
+		}
+
+		if (invalid) {
+			log.debug("page failed validation, bailing out");
+			if (!response.isCommitted()) {
+				response.reset();
+			}
+			response.sendError(HttpServletResponse.SC_NOT_FOUND);
+			return;
+		}
+
+		// do we need to force a specific locale for the request?
+		if (pageRequest.getLocale() == null && !weblog.isShowAllLangs()) {
+			pageRequest.setLocale(weblog.getLocale());
+		}
+
+		// allow for hit counting
+		if (!isSiteWide) {
+			this.processHit(weblog, request.getRequestURL().toString(),
+					request.getHeader("referer"));
+		}
+
+		// looks like we need to render content
+		// set the content deviceType
+		String contentType = "text/html; charset=utf-8";
+		if (StringUtils.isNotEmpty(page.getOutputContentType())) {
+			contentType = page.getOutputContentType() + "; charset=utf-8";
+		} else {
+			String mimeType = RollerContext.getServletContext().getMimeType(
+					page.getLink());
+			if (mimeType != null) {
+				// we found a match ... set the content deviceType
+				contentType = mimeType + "; charset=utf-8";
+			} else {
+				contentType = "text/html; charset=utf-8";
+			}
+		}
+
+		HashMap model = new HashMap();
+		try {
+			PageContext pageContext = JspFactory.getDefaultFactory()
+					.getPageContext(this, request, response, "", false, 8192,
+							true);
+
+			// special hack for menu tag
+			request.setAttribute("pageRequest", pageRequest);
+
+			// populate the rendering model
+			Map initData = new HashMap();
+			initData.put("requestParameters", request.getParameterMap());
+			initData.put("parsedRequest", pageRequest);
+			initData.put("pageContext", pageContext);
+
+			// define url strategy
+			initData.put("urlStrategy", WebloggerFactory.getWeblogger()
+					.getUrlStrategy());
+
+			// if this was a comment posting, check for comment form
+			WeblogEntryCommentForm commentForm = (WeblogEntryCommentForm) request
+					.getAttribute("commentForm");
+			if (commentForm != null) {
+				initData.put("commentForm", commentForm);
+			}
+
+			// Load models for pages
+			String pageModels = WebloggerConfig
+					.getProperty("rendering.pageModels");
+			ModelLoader.loadModels(pageModels, model, initData, true);
+			// Load special models for site-wide blog
+			if (WebloggerRuntimeConfig.isSiteWideWeblog(weblog.getHandle())) {
+				String siteModels = WebloggerConfig
+						.getProperty("rendering.siteModels");
+				ModelLoader.loadModels(siteModels, model, initData, true);
+			}
+
+			// Load weblog custom models
+			ModelLoader.loadCustomModels(weblog, model, initData);
+
+			// ick, gotta load pre-3.0 model stuff as well :(
+			ModelLoader.loadOldModels(model, request, response, pageContext,
+					pageRequest, WebloggerFactory.getWeblogger()
+							.getUrlStrategy());
+		} catch (WebloggerException ex) {
+			log.error("Error loading model objects for page", ex);
+
+			if (!response.isCommitted()) {
+				response.reset();
+			}
+			response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+			return;
+		}
+
+		// lookup Renderer we are going to use
+		Renderer renderer = null;
+		try {
+			log.debug("Looking up renderer");
+			renderer = RendererManager.getRenderer(page,
+					pageRequest.getDeviceType());
+		} catch (Exception e) {
+			// nobody wants to render my content :(
+			log.error("Couldn't find renderer for page " + page.getId(), e);
+
+			if (!response.isCommitted()) {
+				response.reset();
+			}
+			response.sendError(HttpServletResponse.SC_NOT_FOUND);
+			return;
+		}
+
+		// render content. use size of about 24K for a standard page
+		CachedContent rendererOutput = new CachedContent(24567, contentType);
+		try {
+			log.debug("Doing rendering");
+			renderer.render(model, rendererOutput.getCachedWriter());
+
+			// flush rendered output and close
+			rendererOutput.flush();
+			rendererOutput.close();
+		} catch (Exception e) {
+			// bummer, error during rendering
+			log.error("Error during rendering for page " + page.getId(), e);
+
+			if (!response.isCommitted()) {
+				response.reset();
+			}
+			response.sendError(HttpServletResponse.SC_NOT_FOUND);
+			return;
+		}
+
+		// post rendering process
+		// flush rendered content to response
+		log.debug("Flushing response output");
+		response.setContentType(contentType);
+		response.setContentLength(rendererOutput.getContent().length);
+		response.getOutputStream().write(rendererOutput.getContent());
+
+		// cache rendered content. only cache if user is not logged in?
+		if ((!this.excludeOwnerPages || !pageRequest.isLoggedIn())
+				&& request.getAttribute("skipCache") == null) {
+			log.debug("PUT " + cacheKey);
+
+			// put it in the right cache
+			if (isSiteWide) {
+				siteWideCache.put(cacheKey, rendererOutput);
+			} else {
+				weblogPageCache.put(cacheKey, rendererOutput);
+			}
+		} else {
+			log.debug("SKIPPED " + cacheKey);
+		}
+
+		log.debug("Exiting");
+	}
+
+	/**
+	 * Handle POST requests.
+	 * 
+	 * We have this here because the comment servlet actually forwards some of
+	 * its requests on to us to render some pages with cusom messaging. We may
+	 * want to revisit this approach in the future and see if we can do this in
+	 * a different way, but for now this is the easy way.
+	 */
+	public void doPost(HttpServletRequest request, HttpServletResponse response)
+			throws ServletException, IOException {
+
+		// make sure caching is disabled
+		request.setAttribute("skipCache", "true");
+
+		// handle just like a GET request
+		this.doGet(request, response);
+	}
+
+	/**
+	 * Notify the hit tracker that it has an incoming page hit.
+	 */
+	private void processHit(Weblog weblog, String url, String referrer) {
+
+		HitCountQueue counter = HitCountQueue.getInstance();
+		counter.processHit(weblog, url, referrer);
+	}
+
+	/**
+	 * Process the incoming request to extract referrer info and pass it on to
+	 * the referrer processing queue for tracking.
+	 * 
+	 * @return true if referrer was spam, false otherwise
+	 */
+	private boolean processReferrer(HttpServletRequest request) {
+
+		log.debug("processing referrer for " + request.getRequestURI());
+
+		// bleh! because ref processing does a flush it will close
+		// our hibernate session and cause lazy init exceptions on
+		// objects we have fetched, so we need to use a separate
+		// page request object for this
+		WeblogPageRequest pageRequest;
+		try {
+			pageRequest = new WeblogPageRequest(request);
+		} catch (InvalidRequestException ex) {
+			return false;
+		}
+
+		// if this came from site-wide frontpage then skip it
+		if (WebloggerRuntimeConfig.isSiteWideWeblog(pageRequest
+				.getWeblogHandle())) {
+			return false;
+		}
+
+		// if this came from a robot then don't process it
+		if (robotPattern != null) {
+			String userAgent = request.getHeader("User-Agent");
+			if (userAgent != null && userAgent.length() > 0
+					&& robotPattern.matcher(userAgent).matches()) {
+				log.debug("skipping referrer from robot");
+				return false;
+			}
+		}
+
+		String referrerUrl = request.getHeader("Referer");
+		StringBuffer reqsb = request.getRequestURL();
+		if (request.getQueryString() != null) {
+			reqsb.append("?");
+			reqsb.append(request.getQueryString());
+		}
+		String requestUrl = reqsb.toString();
+
+		log.debug("referrer = " + referrerUrl);
+
+		// if this came from persons own blog then don't process it
+		String selfSiteFragment = "/" + pageRequest.getWeblogHandle();
+		if (referrerUrl != null && referrerUrl.indexOf(selfSiteFragment) != -1) {
+			log.debug("skipping referrer from own blog");
+			return false;
+		}
+
+		// validate the referrer
+		if (pageRequest != null && pageRequest.getWeblogHandle() != null) {
+
+			// Base page URLs, with and without www.
+			String basePageUrlWWW = WebloggerRuntimeConfig
+					.getAbsoluteContextURL()
+					+ "/"
+					+ pageRequest.getWeblogHandle();
+			String basePageUrl = basePageUrlWWW;
+			if (basePageUrlWWW.startsWith("http://www.")) {
+				// chop off the http://www.
+				basePageUrl = "http://" + basePageUrlWWW.substring(11);
+			}
+
+			// ignore referrers coming from users own blog
+			if (referrerUrl == null
+					|| (!referrerUrl.startsWith(basePageUrl) && !referrerUrl
+							.startsWith(basePageUrlWWW))) {
+
+				// validate the referrer
+				if (referrerUrl != null) {
+					// treat editor referral as direct
+					int lastSlash = requestUrl.indexOf("/", 8);
+					if (lastSlash == -1) {
+						lastSlash = requestUrl.length();
+					}
+					String requestSite = requestUrl.substring(0, lastSlash);
+
+					if (referrerUrl.matches(requestSite + ".*\\.rol.*")) {
+						referrerUrl = null;
+					} else if (BlacklistChecker.checkReferrer(
+							pageRequest.getWeblog(), referrerUrl)) {
+						return true;
+					}
+				}
+			} else {
+				log.debug("Ignoring referer = " + referrerUrl);
+				return false;
+			}
+		}
+
+		// referrer is valid, lets record it
+		try {
+			IncomingReferrer referrer = new IncomingReferrer();
+			referrer.setReferrerUrl(referrerUrl);
+			referrer.setRequestUrl(requestUrl);
+			referrer.setWeblogHandle(pageRequest.getWeblogHandle());
+			referrer.setWeblogAnchor(pageRequest.getWeblogAnchor());
+			referrer.setWeblogDateString(pageRequest.getWeblogDate());
+
+			ReferrerQueueManager refQueue = WebloggerFactory.getWeblogger()
+					.getReferrerQueueManager();
+			refQueue.processReferrer(referrer);
+		} catch (Exception e) {
+			log.error("Error processing referrer", e);
+		}
 
-        return false;
-    }
+		return false;
+	}
 }

Modified: roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java?rev=1236743&r1=1236742&r2=1236743&view=diff
==============================================================================
--- roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java
(original)
+++ roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java
Fri Jan 27 16:38:03 2012
@@ -18,6 +18,18 @@
 
 package org.apache.roller.weblogger.ui.rendering.servlets;
 
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspFactory;
+import javax.servlet.jsp.PageContext;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.WebloggerException;
@@ -27,9 +39,9 @@ import org.apache.roller.weblogger.confi
 import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
 import org.apache.roller.weblogger.pojos.ThemeTemplate;
 import org.apache.roller.weblogger.pojos.Weblog;
+import org.apache.roller.weblogger.pojos.WeblogTemplate;
 import org.apache.roller.weblogger.ui.rendering.Renderer;
 import org.apache.roller.weblogger.ui.rendering.RendererManager;
-import org.apache.roller.weblogger.ui.rendering.RenderingException;
 import org.apache.roller.weblogger.ui.rendering.mobile.MobileDeviceRepository;
 import org.apache.roller.weblogger.ui.rendering.model.Model;
 import org.apache.roller.weblogger.ui.rendering.model.ModelLoader;
@@ -41,17 +53,6 @@ import org.apache.roller.weblogger.ui.re
 import org.apache.roller.weblogger.util.I18nMessages;
 import org.apache.roller.weblogger.util.cache.CachedContent;
 
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.JspFactory;
-import javax.servlet.jsp.PageContext;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
 
 /**
  * Handles search queries for weblogs.
@@ -194,7 +195,13 @@ public class SearchServlet extends HttpS
         }
 
         // Development only. Reload if theme has been modified
-		if (themeReload) {
+        if (themeReload
+        		&& !weblog.getEditorTheme().equals(
+        				WeblogTemplate.ACTION_CUSTOM)
+        				&& (searchRequest.getPathInfo() == null || searchRequest
+        				.getPathInfo() != null
+        				&& !searchRequest.getPathInfo().endsWith(".css"))) {
+			
 			try {
 				ThemeManager manager = WebloggerFactory.getWeblogger().getThemeManager();
 				boolean reloaded = manager.reLoadThemeFromDisk(weblog.getEditorTheme());



Mime
View raw message