You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ag...@apache.org on 2005/07/06 01:52:26 UTC
svn commit: r209354 - in /incubator/roller/trunk/src/org/roller: pojos/
presentation/ presentation/velocity/ presentation/weblog/tags/
Author: agilliland
Date: Tue Jul 5 16:52:24 2005
New Revision: 209354
URL: http://svn.apache.org/viewcvs?rev=209354&view=rev
Log:
Added a set of new WebsiteData.getPageByXXX() methods for returning
Template objects which are sensitive to the state of a Website object.
Many classes were modified to make use of the new website
centric getPage...() methods in support of the new theme management code.
Modified:
incubator/roller/trunk/src/org/roller/pojos/WebsiteData.java
incubator/roller/trunk/src/org/roller/presentation/RollerRequest.java
incubator/roller/trunk/src/org/roller/presentation/velocity/BasePageServlet.java
incubator/roller/trunk/src/org/roller/presentation/velocity/CommentServlet.java
incubator/roller/trunk/src/org/roller/presentation/velocity/ContextLoader.java
incubator/roller/trunk/src/org/roller/presentation/velocity/Macros.java
incubator/roller/trunk/src/org/roller/presentation/velocity/PageModel.java
incubator/roller/trunk/src/org/roller/presentation/weblog/tags/ViewWeblogEntriesTag.java
Modified: incubator/roller/trunk/src/org/roller/pojos/WebsiteData.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/pojos/WebsiteData.java?rev=209354&r1=209353&r2=209354&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/pojos/WebsiteData.java (original)
+++ incubator/roller/trunk/src/org/roller/pojos/WebsiteData.java Tue Jul 5 16:52:24 2005
@@ -1,13 +1,25 @@
package org.roller.pojos;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.roller.RollerException;
import org.roller.model.Roller;
import org.roller.model.RollerFactory;
import org.roller.util.PojoUtil;
-
import java.util.Locale;
+import java.util.Map;
import java.util.TimeZone;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.roller.ThemeNotFoundException;
+import org.roller.model.Template;
+import org.roller.model.ThemeManager;
+import org.roller.model.UserManager;
+
+
/**
* A user's website is a weweblog, newsfeed channels and bookmarks.
* @author David M Johnson
@@ -21,6 +33,10 @@
implements java.io.Serializable
{
static final long serialVersionUID = 206437645033737127L;
+
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(WebsiteData.class);
+
protected java.lang.String id;
protected java.lang.String name;
protected java.lang.String description;
@@ -84,6 +100,216 @@
this.setData(otherData);
}
+
+ /**
+ * Lookup the default page for this website.
+ */
+ public Template getDefaultPage() throws RollerException {
+
+ Template template = null;
+
+ // first check if this user has selected a theme
+ // if so then return the themes Weblog template
+ if(this.editorTheme != null && !this.editorTheme.equals(Theme.CUSTOM)) {
+ try {
+ ThemeManager themeMgr = RollerFactory.getRoller().getThemeManager();
+ Theme usersTheme = themeMgr.getTheme(this.editorTheme);
+
+ // this is a bit iffy :/
+ // we assume that all theme use "Weblog" for a default template
+ template = usersTheme.getTemplate("Weblog");
+
+ } catch(ThemeNotFoundException tnfe) {
+ // i sure hope not!
+ mLogger.error(tnfe);
+ }
+ }
+
+ // if we didn't get the Template from a theme then look in the db
+ if(template == null) {
+ UserManager userMgr = RollerFactory.getRoller().getUserManager();
+ template = userMgr.retrievePage(this.defaultPageId);
+ }
+
+ if(template != null)
+ mLogger.debug("returning default template id ["+template.getId()+"]");
+
+ return template;
+ }
+
+
+ /**
+ * Lookup a Template for this website by id.
+ */
+ public Template getPageById(String id) throws RollerException {
+
+ if(id == null)
+ return null;
+
+ Template template = null;
+
+ // first check if this user has selected a theme
+ // if so then return the proper theme template
+ if(this.editorTheme != null && !this.editorTheme.equals(Theme.CUSTOM)) {
+
+ // we don't actually expect to get lookups for theme pages by id
+ // but we have to be thorough and check anyways
+ String[] split = id.split(":", 2);
+
+ // only continue if this looks like a theme id
+ // and the theme name matches this users current theme
+ if(split.length == 2 && split[0].equals(this.editorTheme)) {
+ try {
+ ThemeManager themeMgr = RollerFactory.getRoller().getThemeManager();
+ Theme usersTheme = themeMgr.getTheme(this.editorTheme);
+ template = usersTheme.getTemplate(split[1]);
+
+ } catch(ThemeNotFoundException tnfe) {
+ // i sure hope not!
+ mLogger.error(tnfe);
+ }
+ }
+
+ }
+
+ // if we didn't get the Template from a theme then look in the db
+ if(template == null) {
+ UserManager userMgr = RollerFactory.getRoller().getUserManager();
+ template = userMgr.getPageByName(this, name);
+ }
+
+ return template;
+ }
+
+
+ /**
+ * Lookup a Template for this website by name.
+ */
+ public Template getPageByName(String name) throws RollerException {
+
+ if(name == null)
+ return null;
+
+ mLogger.debug("looking up template ["+name+"]");
+
+ Template template = null;
+
+ // first check if this user has selected a theme
+ // if so then return the proper theme template
+ if(this.editorTheme != null && !this.editorTheme.equals(Theme.CUSTOM)) {
+
+ try {
+ ThemeManager themeMgr = RollerFactory.getRoller().getThemeManager();
+ Theme usersTheme = themeMgr.getTheme(this.editorTheme);
+ template = usersTheme.getTemplate(name);
+
+ } catch(ThemeNotFoundException tnfe) {
+ // i sure hope not!
+ mLogger.error(tnfe);
+ }
+
+ }
+
+ // if we didn't get the Template from a theme then look in the db
+ if(template == null) {
+ UserManager userMgr = RollerFactory.getRoller().getUserManager();
+ template = userMgr.getPageByName(this, name);
+ }
+
+ if(template != null)
+ mLogger.debug("returning template ["+template.getId()+"]");
+
+ return template;
+ }
+
+
+ /**
+ * Lookup a template for this website by link.
+ */
+ public Template getPageByLink(String link) throws RollerException {
+
+ if(link == null)
+ return null;
+
+ mLogger.debug("looking up template ["+link+"]");
+
+ Template template = null;
+
+ // first check if this user has selected a theme
+ // if so then return the proper theme template
+ if(this.editorTheme != null && !this.editorTheme.equals(Theme.CUSTOM)) {
+
+ try {
+ ThemeManager themeMgr = RollerFactory.getRoller().getThemeManager();
+ Theme usersTheme = themeMgr.getTheme(this.editorTheme);
+ template = usersTheme.getTemplateByLink(link);
+
+ } catch(ThemeNotFoundException tnfe) {
+ // i sure hope not!
+ mLogger.error(tnfe);
+ }
+
+ }
+
+ // if we didn't get the Template from a theme then look in the db
+ if(template == null) {
+ UserManager userMgr = RollerFactory.getRoller().getUserManager();
+ template = userMgr.getPageByLink(this, link);
+ }
+
+ if(template != null)
+ mLogger.debug("returning template ["+template.getId()+"]");
+
+ return template;
+ }
+
+
+ /**
+ * Get a list of all pages that are part of this website.
+ */
+ public List getPages() {
+
+ Map pages = new HashMap();
+
+ // first get the pages from the db
+ try {
+ Template template = null;
+ UserManager userMgr = RollerFactory.getRoller().getUserManager();
+ Iterator dbPages = userMgr.getPages(this).iterator();
+ while(dbPages.hasNext()) {
+ template = (Template) dbPages.next();
+ pages.put(template.getName(), template);
+ }
+ } catch(Exception e) {
+ // db error
+ mLogger.error(e);
+ }
+
+
+ // now get theme pages if needed and put them in place of db pages
+ if(this.editorTheme != null && !this.editorTheme.equals(Theme.CUSTOM)) {
+ try {
+ Template template = null;
+ ThemeManager themeMgr = RollerFactory.getRoller().getThemeManager();
+ Theme usersTheme = themeMgr.getTheme(this.editorTheme);
+ Iterator themePages = usersTheme.getTemplates().iterator();
+ while(themePages.hasNext()) {
+ template = (Template) themePages.next();
+
+ // note that this will put theme pages over custom
+ // pages in the pages list, which is what we want
+ pages.put(template.getName(), template);
+ }
+ } catch(Exception e) {
+ // how??
+ mLogger.error(e);
+ }
+ }
+
+ return new ArrayList(pages.values());
+ }
+
+
/**
* Id of the Website.
* @ejb:persistent-field
Modified: incubator/roller/trunk/src/org/roller/presentation/RollerRequest.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/RollerRequest.java?rev=209354&r1=209353&r2=209354&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/RollerRequest.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/RollerRequest.java Tue Jul 5 16:52:24 2005
@@ -18,16 +18,16 @@
import org.roller.config.RollerRuntimeConfig;
import org.roller.model.ParsedRequest;
import org.roller.model.Roller;
+import org.roller.model.RollerFactory;
+import org.roller.model.Template;
import org.roller.model.UserManager;
import org.roller.model.WeblogManager;
import org.roller.pojos.BookmarkData;
import org.roller.pojos.FolderData;
-import org.roller.pojos.WeblogTemplate;
import org.roller.pojos.UserData;
import org.roller.pojos.WeblogCategoryData;
import org.roller.pojos.WeblogEntryData;
import org.roller.pojos.WebsiteData;
-import org.roller.pojos.PingTargetData;
import org.roller.util.DateUtil;
import org.roller.util.Utilities;
@@ -65,13 +65,14 @@
private String mDateString = null;
private String mPathInfo = null;
private String mPageLink = null;
- private WeblogTemplate mPage;
+ private Template mPage;
private PageContext mPageContext = null;
private HttpServletRequest mRequest = null;
private WebsiteData mWebsite;
private WeblogEntryData mWeblogEntry;
private WeblogCategoryData mWeblogCategory;
private boolean mIsDateSpecified = false;
+ private boolean mIsPreview = false;
private static ThreadLocal mRollerRequestTLS = new ThreadLocal();
@@ -153,6 +154,11 @@
getRoller().setUser(currentUser);
}
+ // check servlet path to see if this is a preview request
+ mLogger.debug("servlet path = "+mRequest.getServletPath());
+ if(mRequest.getServletPath().indexOf("preview") != -1)
+ this.mIsPreview = true;
+
// path info may be null, (e.g. on JSP error page)
mPathInfo = mRequest.getPathInfo();
mPathInfo = (mPathInfo!=null) ? mPathInfo : "";
@@ -204,7 +210,7 @@
// we have the /username form of URL
mDate = getDate(true);
mDateString = DateUtil.format8chars(mDate);
- mPage = userMgr.retrievePage(mWebsite.getDefaultPageId());
+ mPage = mWebsite.getDefaultPage();
}
else if ( pathInfo.length == 2 )
{
@@ -215,20 +221,20 @@
mDate = getDate(true);
mDateString = DateUtil.format8chars(mDate);
mPageLink = pathInfo[1];
- mPage = userMgr.getPageByLink(mWebsite, pathInfo[1]);
+ mPage = mWebsite.getPageByLink(pathInfo[1]);
}
else
{
// we have the /username/datestring form of URL
mDateString = pathInfo[1];
- mPage = userMgr.retrievePage(mWebsite.getDefaultPageId());
+ mPage = mWebsite.getDefaultPage();
mIsDateSpecified = true;
}
}
else if ( pathInfo.length == 3 )
{
mPageLink = pathInfo[1];
- mPage = userMgr.getPageByLink(mWebsite, pathInfo[1]);
+ mPage = mWebsite.getPageByLink(pathInfo[1]);
mDate = parseDate(pathInfo[2]);
if ( mDate == null ) // pre-jdk1.4 --> || mDate.getYear() <= 70 )
@@ -259,7 +265,7 @@
{
// we have the /username/pagelink/datestring/anchor form of URL
mPageLink = pathInfo[1];
- mPage = userMgr.getPageByLink(mWebsite, pathInfo[1]);
+ mPage = mWebsite.getPageByLink(pathInfo[1]);
mDate = parseDate(pathInfo[2]);
mDateString = pathInfo[2];
@@ -312,16 +318,17 @@
if ( pageId != null )
{
mPage = userMgr.retrievePage(pageId);
-
+ /*
// We can use page to find the user, if we don't have one yet
if ( mWebsite == null )
{
mWebsite = mPage.getWebsite();
- }
+ }
+ */
}
else if (mWebsite != null)
{
- mPage = userMgr.retrievePage( mWebsite.getDefaultPageId() );
+ mPage = mWebsite.getDefaultPage();
}
// Look for day in request params
@@ -446,13 +453,13 @@
return mContext;
}
- //------------------------------------------------------------------------
- /** Get Roller instance from */
+
public Roller getRoller()
{
- return RollerContext.getRoller( mRequest );
+ return RollerFactory.getRoller();
}
+
//------------------------------------------------------------------------
/** Is mRequest's user the admin user? */
public boolean isAdminUser() throws RollerException
@@ -740,7 +747,7 @@
* Gets the WeblogTemplate specified by the request, or null.
* @return WeblogTemplate
*/
- public WeblogTemplate getPage()
+ public Template getPage()
{
if (mPage == null)
{
@@ -763,7 +770,7 @@
/**
* Allow comment servlet to inject page that it has chosen.
*/
- public void setPage(WeblogTemplate page)
+ public void setPage(org.roller.model.Template page)
{
mPage = page;
}
Modified: incubator/roller/trunk/src/org/roller/presentation/velocity/BasePageServlet.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/velocity/BasePageServlet.java?rev=209354&r1=209353&r2=209354&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/velocity/BasePageServlet.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/velocity/BasePageServlet.java Tue Jul 5 16:52:24 2005
@@ -1 +1 @@
-package org.roller.presentation.velocity;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Map;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
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.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.context.Context;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.servlet.VelocityServlet;
import org.roller.RollerException;
import org.roller.model.UserManager;
import org.roller.pojos.WeblogTemplate;
import org.roller.pojos.UserData;
import org.roller.pojos.WebsiteData;
import org.roller.presentation.RollerRequest;
/**
* Base Servlet for Servlets that render user page templates. Loads the
* Velocity context using the ContextLoader and runs the page template
* selected by the request.
*
* @author llavandowska
* @author David M Johnson
*/
public abstract class BasePageServlet extends VelocityServlet
{
private static Log mLogger =
LogFactory.getFactory().getInstance(BasePageServlet.class);
/**
* <p>Sets servletContext for WebappResourceLoader.</p>
*
* @param config servlet configuation
*/
public void init( ServletConfig config )
throws ServletException
{
super.init( config );
WebappResourceLoader.setServletContext( getServletContext() );
}
public Template handleRequest( HttpServletRequest request,
HttpServletResponse response,
Context ctx ) throws Exception
{
String pid = null;
Template outty = null;
Exception pageException = null;
try
{
PageContext pageContext =
JspFactory.getDefaultFactory().getPageContext(
this, request, response,"", true, 8192, true);
// Needed to init request attributes, etc.
RollerRequest rreq = RollerRequest.getRollerRequest(pageContext);
UserManager userMgr = rreq.getRoller().getUserManager();
WebsiteData wd = null;
if (request.getAttribute(RollerRequest.OWNING_USER) != null) {
UserData user = (UserData)
request.getAttribute(RollerRequest.OWNING_USER);
wd = userMgr.getWebsite(user.getUserName());
}
else
{
wd = rreq.getWebsite();
}
// If request specified the page, then go with that
WeblogTemplate pd = null;
if (rreq.getPage() != null // RollerRequest does too much guess work
&& request.getAttribute(RollerRequest.OWNING_USER) == null)
{
pd = rreq.getPage();
pid = pd.getId();
}
// If page not available from request, then use website's default
else if (wd != null)
{
pd = userMgr.retrievePage(wd.getDefaultPageId());
pid = pd.getId();
rreq.setPage(pd);
}
// Still no page ID, then we have a problem
if ( pid == null )
{
throw new ResourceNotFoundException("Page not found");
}
outty = prepareForPageExecution(ctx, rreq, response, pd);
}
catch( Exception e )
{
pageException = e;
response.setStatus( HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
if (pageException != null)
{
mLogger.error("EXCEPTION: in RollerServlet", pageException);
request.setAttribute("DisplayException", pageException);
}
return outty;
}
//------------------------------------------------------------------------
/**
* Try to load user-specified Decorator (if specified). Failing that
* see if user has a _decorator Page, if not check for a _decorator
* in the Preview resource loader. Finally, if none of those can
* be found fall back to the no-op decorator.
* @param object
* @return
*/
private Template findDecorator(String decoratorName, UserManager userMgr, WebsiteData wd)
throws ResourceNotFoundException, ParseErrorException, RollerException, Exception
{
Template decorator = null;
WeblogTemplate decoratorPage = null;
String decoratorId = null;
// check for user-specified decorator
if (decoratorName != null)
{
decoratorPage = userMgr.getPageByName(wd, decoratorName);
if (decoratorPage != null)
{
decoratorId = decoratorPage.getId();
}
}
// if no user-specified decorator try default page-name
if (decoratorPage == null)
{
decoratorPage = userMgr.getPageByName(wd, "_decorator");
if (decoratorPage != null)
{
decoratorId = decoratorPage.getId();
}
else
{
// could be in PreviewResourceLoader
decoratorId = "_decorator";
}
}
// try loading Template
if (decoratorId != null)
{
try
{
decorator = getTemplate(decoratorId, "UTF-8");
}
catch (Exception e)
{
// it may not exist, so this is okay
}
}
// couldn't find Template, load default "no-op" decorator
if (decorator == null)
{
decorator = getTemplate("/themes/noop_decorator.vm", "UTF-8");
}
return decorator;
}
/**
* Prepare for page execution be setting content type, populating context,
* and processing the page decorator if needed.
*/
protected Template prepareForPageExecution(Context ctx, RollerRequest rreq,
HttpServletResponse response, WeblogTemplate pd) throws Exception
{
Template outty = null;
UserManager userMgr = rreq.getRoller().getUserManager();
WebsiteData wd = pd.getWebsite();
// if page has an extension - use that to set the contentType
String pageLink = pd.getLink();
String mimeType = getServletConfig().getServletContext().getMimeType(pageLink);
if(mimeType != null) {
// we found a match ... set the content type
response.setContentType(mimeType);
}
/* old way ... not as flexible -- Allen G
int period = pd.getLink().indexOf('.');
if (period > -1)
{
String extension = pd.getLink().substring(period+1);
if ("js".equals(extension))
{
extension = "javascript";
}
response.setContentType("text/" + extension);
}
*/
// Made it this far, populate the Context
ContextLoader.setupContext( ctx, rreq, response );
// Get the page
outty = getTemplate( pd.getId(), "UTF-8" );
/**
* User can define a Decorator Template.
*/
if (wd != null)
{
// parse/merge Page template
StringWriter sw = new StringWriter();
outty.merge(ctx, sw);
ctx.put("decorator_body", sw.toString());
// replace outty with decorator Template
outty = findDecorator((String)ctx.get("decorator"), userMgr, wd);
}
return outty;
}
//------------------------------------------------------------------------
/**
* Handle error in Velocity processing.
*/
protected void error( HttpServletRequest req, HttpServletResponse res,
Exception e) throws ServletException, IOException
{
mLogger.warn("ERROR in VelocityServlet",e);
}
/**
* Override to prevent Velocity from putting "req" and "res" into the context.
* Allowing users access to the underlying Servlet objects is a security risk.
* If need access to request parameters, use $requestParameters.
*/
protected Context createContext(
HttpServletRequest req,
HttpServletResponse res) {
VelocityContext context = new VelocityContext();
context.put(REQUEST, new RequestWrapper(req.getParameterMap()));
return context;
}
/** Provide access to request params only, not actual request */
public static class RequestWrapper
{
Map params = null;
public RequestWrapper(Map params)
{
this.params = params;
}
public String getParameter(String key)
{
String ret = null;
String[] array = (String[])params.get(key);
if (array != null && array.length > 0)
{
ret = array[0];
}
return ret;
}
}
}
\ No newline at end of file
+package org.roller.presentation.velocity;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Map;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
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.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.context.Context;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.servlet.VelocityServlet;
import org.roller.model.RollerFactory;
import org.roller.model.UserManager;
import org.roller.pojos.UserData;
import org.roller.pojos.WebsiteData;
import org.roller.presentation.RollerRequest;
/**
* Base Servlet for Servlets that render user page templates. Loads the
* Velocity context using the ContextLoader and runs the page template
* selected by the request.
*
* @author llavandowska
* @author David M Johnson
* @author Allen Gilliland
*/
public abstract class BasePageServlet extends VelocityServlet {
private static Log mLogger =
LogFactory.getFactory().getInstance(BasePageServlet.class);
/**
* Sets servletContext for WebappResourceLoader.
*/
public void init( ServletConfig config )
throws ServletException {
super.init( config );
WebappResourceLoader.setServletContext( getServletContext() );
}
public Template handleRequest( HttpServletRequest request,
HttpServletResponse response,
Context ctx ) throws Exception {
Template outty = null;
Exception pageException = null;
try {
PageContext pageContext =
JspFactory.getDefaultFactory().getPageContext(
this, request, response,"", true, 8192, true);
// Needed to init request attributes, etc.
RollerRequest rreq = RollerRequest.getRollerRequest(pageContext);
UserManager userMgr = RollerFactory.getRoller().getUserManager();
WebsiteData website = null;
if (request.getAttribute(RollerRequest.OWNING_USER) != null) {
UserData user = (UserData)
request.getAttribute(RollerRequest.OWNING_USER);
website = userMgr.getWebsite(user.getUserName());
} else {
website = rreq.getWebsite();
}
org.roller.model.Template page = null;
// If request specified the page, then go with that
if (rreq.getPage() != null &&
rreq.getRequest().getAttribute(RollerRequest.OWNING_USER) == null) {
page = rreq.getPage();
// If page not available from request, then use website's default
} else if (website != null) {
page = website.getDefaultPage();
rreq.setPage(page);
}
// Still no page ID, then we have a problem
if ( page == null ) {
throw new ResourceNotFoundException("Page not found");
}
// this sets up the page we want to render
outty = prepareForPageExecution(ctx, rreq, response, page);
// if there is a decorator template then apply it
if (website != null) {
// parse/merge Page template
StringWriter sw = new StringWriter();
outty.merge(ctx, sw);
ctx.put("decorator_body", sw.toString());
// replace outty with decorator Template
outty = findDecorator(website, (String) ctx.get("decorator"));
}
} catch( Exception e ) {
pageException = e;
response.setStatus( HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
if (pageException != null) {
mLogger.error("EXCEPTION: in RollerServlet", pageException);
request.setAttribute("DisplayException", pageException);
}
return outty;
}
/**
* Prepare the requested page for execution by setting content type
* and populating velocity context.
*/
protected Template prepareForPageExecution(Context ctx,
RollerRequest rreq,
HttpServletResponse response,
org.roller.model.Template page) throws Exception {
Template outty = null;
// if page has an extension - use that to set the contentType
String pageLink = page.getLink();
String mimeType = getServletConfig().getServletContext().getMimeType(pageLink);
if(mimeType != null) {
// we found a match ... set the content type
response.setContentType(mimeType);
}
// Made it this far, populate the Context
ContextLoader.setupContext( ctx, rreq, response );
return getTemplate( page.getId(), "UTF-8" );
}
/**
* Load the decorator template and apply it. If there is no user specified
* decorator then the default decorator is applied.
*/
protected Template findDecorator(WebsiteData website, String decorator_name)
throws Exception {
Template decorator = null;
org.roller.model.Template decorator_template = null;
// check for user-specified decorator
if (decorator_name != null) {
decorator_template = website.getPageByName(decorator_name);
}
// if no user-specified decorator try default page-name
if (decorator_template == null) {
decorator_template = website.getPageByName("_decorator");
}
// try loading Template
if (decorator_template != null) {
try {
decorator = getTemplate(decorator_template.getId(), "UTF-8");
} catch (Exception e) {
// it may not exist, so this is okay
}
}
// couldn't find Template, load default "no-op" decorator
if (decorator == null) {
decorator = getTemplate("/themes/noop_decorator.vm", "UTF-8");
}
return decorator;
}
/**
* Handle error in Velocity processing.
*/
protected void error( HttpServletRequest req, HttpServletResponse res,
Exception e) throws ServletException, IOException {
mLogger.warn("ERROR in VelocityServlet",e);
}
/**
* Override to prevent Velocity from putting "req" and "res" into the context.
* Allowing users access to the underlying Servlet objects is a security risk.
* If need access to request parameters, use $requestParameters.
*/
protected Context createContext(
HttpServletRequest req,
HttpServletResponse res) {
VelocityContext context = new VelocityContext();
context.put(REQUEST, new RequestWrapper(req.getParameterMap()));
return context;
}
/** Provide access to request params only, not actual request */
public static class RequestWrapper {
Map params = null;
public RequestWrapper(Map params) {
this.params = params;
}
public String getParameter(String key) {
String ret = null;
String[] array = (String[])params.get(key);
if (array != null && array.length > 0) {
ret = array[0];
}
return ret;
}
}
}
\ No newline at end of file
Modified: incubator/roller/trunk/src/org/roller/presentation/velocity/CommentServlet.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/velocity/CommentServlet.java?rev=209354&r1=209353&r2=209354&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/velocity/CommentServlet.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/velocity/CommentServlet.java Tue Jul 5 16:52:24 2005
@@ -110,12 +110,12 @@
WebsiteData website = rreq.getWebsite();
// Request specifies popup
- WeblogTemplate page = null;
+ org.roller.model.Template page = null;
Exception pageException = null;
try
{
// Does user have a popupcomments page?
- page = userMgr.getPageByName(website, "_popupcomments");
+ page = website.getPageByName("_popupcomments");
}
catch(Exception e )
{
@@ -444,7 +444,7 @@
commentURL.append("/comments/");
commentURL.append(rreq.getUser().getUserName());
- WeblogTemplate page = rreq.getPage();
+ org.roller.model.Template page = rreq.getPage();
if (page == null)
{
commentURL.append("?entry=");
Modified: incubator/roller/trunk/src/org/roller/presentation/velocity/ContextLoader.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/velocity/ContextLoader.java?rev=209354&r1=209353&r2=209354&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/velocity/ContextLoader.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/velocity/ContextLoader.java Tue Jul 5 16:52:24 2005
@@ -27,8 +27,8 @@
import org.roller.config.RollerRuntimeConfig;
import org.roller.model.Roller;
import org.roller.model.RollerFactory;
+import org.roller.model.Template;
import org.roller.pojos.CommentData;
-import org.roller.pojos.WeblogTemplate;
import org.roller.pojos.RollerPropertyData;
import org.roller.pojos.UserData;
import org.roller.pojos.WeblogEntryData;
@@ -38,6 +38,7 @@
import org.roller.presentation.RollerRequest;
import org.roller.presentation.RollerSession;
import org.roller.presentation.newsfeeds.NewsfeedCache;
+import org.roller.presentation.velocity.wrappers.TemplateWrapper;
import org.roller.presentation.weblog.formbeans.CommentFormEx;
import org.roller.util.RegexUtil;
import org.roller.util.StringUtils;
@@ -161,44 +162,25 @@
{
// if there is an "_entry" page, only load it once
WebsiteData website = rreq.getRoller().getUserManager().getWebsite(userName);
- PageModel pageModel = (PageModel)ctx.get("pageModel");
- if (website != null && pageModel != null)
+ //PageModel pageModel = (PageModel)ctx.get("pageModel");
+ if (website != null)
{
/* alternative display pages - customization */
- WeblogTemplate entryPage = pageModel.getUsersPageByName(website, "_entry");
+ Template entryPage = website.getPageByName("_entry");
if (entryPage != null)
{
- ctx.put("entryPage", entryPage);
+ ctx.put("entryPage", new TemplateWrapper(entryPage));
}
- WeblogTemplate descPage = pageModel.getUsersPageByName(website, "_desc");
+ Template descPage = website.getPageByName("_desc");
if (descPage != null)
{
- ctx.put("descPage", descPage);
+ ctx.put("descPage", new TemplateWrapper(descPage));
}
}
}
private static String figureResourcePath( RollerRequest rreq )
- {
- /* old way -- Allen G
- HttpServletRequest request = rreq.getRequest();
- RollerContext rCtx = RollerContext.getRollerContext( request );
- RollerConfigData rollerConfig = rCtx.getRollerConfig();
-
- StringBuffer sb = new StringBuffer();
- String uploadPath = rollerConfig.getUploadPath();
- if ( uploadPath != null && uploadPath.trim().length() > 0 )
- {
- sb.append( uploadPath );
- }
- else
- {
- sb.append( request.getContextPath() );
- sb.append( RollerContext.USER_RESOURCES );
- }
- return sb.toString();
- */
-
+ {
String uploadurl = null;
try {
uploadurl = RollerFactory.getRoller().getFileManager().getUploadUrl();
@@ -240,7 +222,7 @@
// Make sure comment form object is available in context
CommentFormEx commentForm =
- (CommentFormEx)request.getAttribute("commentForm");
+ (CommentFormEx) request.getAttribute("commentForm");
if ( commentForm == null )
{
commentForm = new CommentFormEx();
@@ -394,7 +376,7 @@
// the Entry Day link.
ctx.put("plainFormat", "yyyyMMdd");
- ctx.put("page", rreq.getPage() );
+ ctx.put("page", new TemplateWrapper(rreq.getPage()));
ctx.put("utilities", new Utilities() );
ctx.put("stringUtils", new StringUtils() );
ctx.put("rollerVersion", rollerCtx.getRollerVersion() );
Modified: incubator/roller/trunk/src/org/roller/presentation/velocity/Macros.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/velocity/Macros.java?rev=209354&r1=209353&r2=209354&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/velocity/Macros.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/velocity/Macros.java Tue Jul 5 16:52:24 2005
@@ -601,11 +601,12 @@
// Get included page template
RollerRequest rreq = RollerRequest.getRollerRequest(
- (HttpServletRequest)mPageContext.getRequest());
- UserManager userMgr = rreq.getRoller().getUserManager();
+ (HttpServletRequest)mPageContext.getRequest());
+ WebsiteData website = rreq.getWebsite();
+ //UserManager userMgr = rreq.getRoller().getUserManager();
+
+ org.roller.model.Template pd = website.getPageByName(pageName);
- WeblogTemplate pd = userMgr.getPageByName(
- rreq.getWebsite(), pageName );
Template vtemplate = null;
if (pd != null)
{
@@ -932,7 +933,7 @@
*/
public String showPageName()
{
- WeblogTemplate pd = null;
+ org.roller.model.Template pd = null;
RollerRequest rreq = getRollerRequest();
try
{
@@ -951,7 +952,7 @@
*/
public String showPageDescription()
{
- WeblogTemplate pd = null;
+ org.roller.model.Template pd = null;
RollerRequest rreq = getRollerRequest();
try
{
@@ -971,7 +972,7 @@
*/
public String showPageUpdateTime()
{
- WeblogTemplate pd = null;
+ org.roller.model.Template pd = null;
RollerRequest rreq = getRollerRequest();
try
{
@@ -981,8 +982,8 @@
{
return "ERROR finding page in request: " + e.toString();
}
- if (pd.getUpdateTime() == null) return "";
- return pd.getUpdateTime().toString();
+ if (pd.getLastModified() == null) return "";
+ return pd.getLastModified().toString();
}
//------------------------------------------------------------------------
Modified: incubator/roller/trunk/src/org/roller/presentation/velocity/PageModel.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/velocity/PageModel.java?rev=209354&r1=209353&r2=209354&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/velocity/PageModel.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/velocity/PageModel.java Tue Jul 5 16:52:24 2005
@@ -15,6 +15,7 @@
import org.roller.config.RollerRuntimeConfig;
import org.roller.model.BookmarkManager;
import org.roller.model.RefererManager;
+import org.roller.model.Template;
import org.roller.model.UserManager;
import org.roller.model.WeblogManager;
import org.roller.pojos.BookmarkComparator;
@@ -26,6 +27,7 @@
import org.roller.pojos.WeblogEntryData;
import org.roller.pojos.WebsiteData;
import org.roller.presentation.RollerRequest;
+import org.roller.presentation.velocity.wrappers.TemplateWrapper;
import org.roller.util.StringUtils;
/**
@@ -46,10 +48,11 @@
private UserManager mUserMgr = null;
private RefererManager mRefererMgr = null;
- private Map mCategories = new HashMap();
+ private Map mCategories = new HashMap();
private HashMap mPageMap = new HashMap();
private RollerRequest mRollerReq = null;
private String mUsername = null;
+ private WebsiteData mWebsite = null;
private WeblogEntryData mNextEntry = null;
private WeblogEntryData mPreviousEntry = null;
@@ -99,14 +102,18 @@
*/
if ( mUsername != null )
{
+ // if we have website from RollerRequest, use it
+ mWebsite = rreq.getWebsite();
+ if(mWebsite == null)
+ mWebsite = mUserMgr.getWebsite(user.getUserName());
+
// Get the pages, put into context & load map
- WebsiteData website = mUserMgr.getWebsite(user.getUserName());
- List pages = mUserMgr.getPages(website);
+ List pages = mWebsite.getPages();
Iterator pageIter = pages.iterator();
while (pageIter.hasNext())
{
- WeblogTemplate page = (WeblogTemplate) pageIter.next();
- mPageMap.put(page.getName(), page);
+ Template page = (Template) pageIter.next();
+ mPageMap.put(page.getName(), new TemplateWrapper(page));
}
}
@@ -136,8 +143,7 @@
Collection tops = null;
try
{
- tops= mBookmarkMgr.getRootFolder(
- mUserMgr.getWebsite(mUsername)).getFolders();
+ tops= mBookmarkMgr.getRootFolder(mWebsite).getFolders();
}
catch (RollerException e)
{
@@ -202,7 +208,7 @@
try
{
return mBookmarkMgr.getFolder(
- mUserMgr.getWebsite(mUsername), folderPath);
+ mWebsite, folderPath);
}
catch (RollerException e)
{
@@ -214,9 +220,9 @@
//------------------------------------------------------------------------
/** Encapsulates UserManager.getPageByName() */
- public WeblogTemplate getUsersPageByName(WebsiteData website, String pageName)
+ public Template getUsersPageByName(WebsiteData website, String pageName)
{
- WeblogTemplate page = null;
+ Template page = null;
try
{
if (website == null)
@@ -225,7 +231,7 @@
if (pageName == null)
throw new NullPointerException("pageName is null");
- page = mUserMgr.getPageByName(website, pageName);
+ page = website.getPageByName(pageName);
}
catch (NullPointerException npe)
{
@@ -251,15 +257,20 @@
/** Encapsulates UserManager.getPageByName() */
public String getPageIdByName(String pageName)
{
- WeblogTemplate pd = (WeblogTemplate)mPageMap.get(pageName);
- if ( pd != null )
- {
- return pd.getId();
- }
- else
- {
- return null;
+ mLogger.debug("looking up page ["+pageName+"]");
+
+ String template_id = null;
+
+ try {
+ Template pd = mWebsite.getPageByName(pageName);
+ template_id = pd.getId();
+ } catch(Exception e) {
+ mLogger.error(e);
}
+
+ mLogger.debug("returning template id ["+template_id+"]");
+
+ return template_id;
}
//------------------------------------------------------------------------
Modified: incubator/roller/trunk/src/org/roller/presentation/weblog/tags/ViewWeblogEntriesTag.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/tags/ViewWeblogEntriesTag.java?rev=209354&r1=209353&r2=209354&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/tags/ViewWeblogEntriesTag.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/tags/ViewWeblogEntriesTag.java Tue Jul 5 16:52:24 2005
@@ -111,9 +111,7 @@
String pid = null;
if ( mDayTemplate != null )
{
- WeblogTemplate page =
- rreq.getRoller().getUserManager().getPageByLink(
- website, mDayTemplate );
+ org.roller.model.Template page = website.getPageByLink(mDayTemplate);
if (page != null)
{
pid = page.getId();