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 02:41:33 UTC
svn commit: r209366 - in
/incubator/roller/trunk/src/org/roller/presentation/velocity:
BasePageServlet.java ExportRss.java FlavorServlet.java FoafServlet.java
PlanetFeedServlet.java
Author: agilliland
Date: Tue Jul 5 17:41:31 2005
New Revision: 209366
URL: http://svn.apache.org/viewcvs?rev=209366&view=rev
Log:
Fixing the endline problem with these files. changed from macOS (\r) endlines to windows style (\n\r) ... hopefully this works for everyone.
Modified:
incubator/roller/trunk/src/org/roller/presentation/velocity/BasePageServlet.java
incubator/roller/trunk/src/org/roller/presentation/velocity/ExportRss.java
incubator/roller/trunk/src/org/roller/presentation/velocity/FlavorServlet.java
incubator/roller/trunk/src/org/roller/presentation/velocity/FoafServlet.java
incubator/roller/trunk/src/org/roller/presentation/velocity/PlanetFeedServlet.java
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=209366&r1=209365&r2=209366&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 17:41:31 2005
@@ -1 +1,225 @@
-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
+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;
+ }
+ }
+}
Modified: incubator/roller/trunk/src/org/roller/presentation/velocity/ExportRss.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/velocity/ExportRss.java?rev=209366&r1=209365&r2=209366&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/velocity/ExportRss.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/velocity/ExportRss.java Tue Jul 5 17:41:31 2005
@@ -1 +1,231 @@
-package org.roller.presentation.velocity;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.roller.RollerException;
import org.roller.model.RollerFactory;
import org.roller.pojos.UserData;
import org.roller.pojos.WebsiteData;
import org.roller.presentation.RollerContext;
import org.roller.util.RegexUtil;
import org.roller.util.StringUtils;
import org.roller.util.Utilities;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Locale;
import java.util.Properties;
import java.util.TimeZone;
/**
* Does a lot of the same work as ContextLoader in preparing
* a VelocityContext for parsing. However, it is ignorant of
* any HttpServletRequest related features, and so has
* considerably trimmed down information.
*
* Created on Mar 25, 2004
* @author lance.lavandowska
*/
public class ExportRss
{
private VelocityEngine ve = null;
private VelocityContext ctx = null;
private UserData user = null;
private boolean exportAtom;
private static final String RSS_TEMPLATE = "org/roller/presentation/velocity/export_rss.vm";
private static final String ATOM_TEMPLATE = "org/roller/presentation/velocity/export_atom.vm";
public ExportRss(WebsiteData website) throws Exception
{
Properties props = new Properties();
props.load(RollerContext.getServletContext().
getResourceAsStream("/WEB-INF/velocity.properties"));
ve = new VelocityEngine();
ve.info("*******************************************");
ve.info("Initializing VelocityEngine for ExportRss");
ve.init( props );
ve.info("Done initializing VelocityEngine for ExportRss");
ve.info("************************************************");
ctx = new VelocityContext();
user = website.getUser();
RollerContext rollerCtx = RollerContext.getRollerContext(
RollerContext.getServletContext());
loadPageHelper();
loadDates(website);
loadWebsiteInfo(rollerCtx, website);
loadTheRest(rollerCtx);
}
public void setExportAtom(boolean atom)
{
exportAtom = atom;
}
/**
* Export the given entries using export_rss.vm.
*
* @param entries
* @throws ResourceNotFoundException
* @throws ParseErrorException
* @throws Exception
*/
public void exportEntries(Collection entries, String fileName) throws ResourceNotFoundException, ParseErrorException, Exception
{
ctx.put("entries", entries);
String templateFile = RSS_TEMPLATE;
if (exportAtom) templateFile = ATOM_TEMPLATE;
Template template = ve.getTemplate( templateFile, "utf-8" );
StringWriter sw = new StringWriter();
template.merge(ctx, sw);
writeResultsToFile((String)ctx.get("uploadPath"), sw, fileName);
}
/**
* @param sw
*/
private void writeResultsToFile(String filePath, StringWriter sw, String fileName)
throws RollerException, IOException
{
filePath += "/" + user.getUserName();
new java.io.File( filePath ).mkdirs(); // create dir path on drive
filePath += "/" + fileName;
File outputFile = new java.io.File( filePath );
FileOutputStream out = null;
try
{
//outputFile.createNewFile();
out = new FileOutputStream( outputFile );
out.write( sw.toString().getBytes() );
out.flush();
}
catch ( FileNotFoundException e )
{
throw new RollerException( "Unable to write to: " + outputFile.getAbsolutePath(), e );
}
finally
{
try
{
if ( out != null )
{
out.close();
}
}
catch ( java.io.IOException ioe )
{
System.err.println( "ExportRss unable to close OutputStream" );
}
}
}
/**
* Load miscellaneous values into the Context.
* @param rollerCtx
*/
private void loadTheRest(RollerContext rollerCtx)
{
ctx.put("utilities", new Utilities() );
ctx.put("stringUtils", new StringUtils() );
ctx.put("entryLength", new Integer(-1));
}
/**
* Load information pertaining to the Website and
* its associated User.
* @param rollerCtx
*/
private void loadWebsiteInfo(RollerContext rollerCtx, WebsiteData website)
{
ctx.put("website", website);
ctx.put("userName", user.getUserName() );
ctx.put("fullName", user.getFullName() );
ctx.put("emailAddress", user.getEmailAddress() );
ctx.put("encodedEmail", RegexUtil.encode(user.getEmailAddress()));
ctx.put("obfuscatedEmail", RegexUtil.obfuscateEmail(user.getEmailAddress()));
// custom figureResourcePath() due to no "request" object
StringBuffer sb = new StringBuffer();
String uploadDir = null;
try {
uploadDir = RollerFactory.getRoller().getFileManager().getUploadDir();
} catch(Exception e) {}
ctx.put("uploadPath", uploadDir);
}
/**
* Load time-related information.
* @param website
*/
private void loadDates(WebsiteData website)
{
try
{
// Add current time and last updated times to context
Date updateTime = RollerFactory.getRoller().getWeblogManager()
.getWeblogLastPublishTime( user.getUserName(), null );
ctx.put("updateTime", updateTime);
}
catch (RollerException e)
{
ctx.put("updateTime", new Date());
}
ctx.put("now", new Date());
// setup Locale for future rendering
Locale locale = website.getLocaleInstance();
ctx.put("locale", locale);
// setup Timezone for future rendering
ctx.put("timezone", website.getTimeZoneInstance());
// date formats need to be run through the Localized
// SimpleDateFormat and pulled back out as localized patterns.
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", locale);
sdf.setTimeZone( (TimeZone)ctx.get("timezone") );
ctx.put("plainFormat", sdf.toLocalizedPattern());
sdf.applyPattern("EEEE MMMM dd, yyyy");
ctx.put("toStringFormat", sdf.toLocalizedPattern());
sdf.applyPattern("MMM dd yyyy, hh:mm:ss a z");
ctx.put("timestampFormat", sdf.toLocalizedPattern());
ctx.put("dateFormatter", sdf );
}
/**
* Create a PageHelper. Note that will have no values
* necessary in parsing a Web request (such as /page) -
* it is only useful for the restricted export_rss.vm
* and has no PagePlugins either. We want the exported
* Entry.text to be the raw values.
*/
private void loadPageHelper()
{
// Add Velocity page helper to context
PageHelper pageHelper = new PageHelper(null, null, ctx);
// set no PagePlugins - we *do not* want to render them.
ctx.put("pageHelper", pageHelper );
}
}
\ No newline at end of file
+package org.roller.presentation.velocity;
+
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.exception.ParseErrorException;
+import org.apache.velocity.exception.ResourceNotFoundException;
+import org.roller.RollerException;
+import org.roller.model.RollerFactory;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerContext;
+import org.roller.util.RegexUtil;
+import org.roller.util.StringUtils;
+import org.roller.util.Utilities;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.text.SimpleDateFormat;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Locale;
+import java.util.Properties;
+import java.util.TimeZone;
+
+/**
+ * Does a lot of the same work as ContextLoader in preparing
+ * a VelocityContext for parsing. However, it is ignorant of
+ * any HttpServletRequest related features, and so has
+ * considerably trimmed down information.
+ *
+ * Created on Mar 25, 2004
+ * @author lance.lavandowska
+ */
+public class ExportRss
+{
+ private VelocityEngine ve = null;
+ private VelocityContext ctx = null;
+ private UserData user = null;
+ private boolean exportAtom;
+
+ private static final String RSS_TEMPLATE = "org/roller/presentation/velocity/export_rss.vm";
+ private static final String ATOM_TEMPLATE = "org/roller/presentation/velocity/export_atom.vm";
+
+ public ExportRss(WebsiteData website) throws Exception
+ {
+ Properties props = new Properties();
+ props.load(RollerContext.getServletContext().
+ getResourceAsStream("/WEB-INF/velocity.properties"));
+ ve = new VelocityEngine();
+ ve.info("*******************************************");
+ ve.info("Initializing VelocityEngine for ExportRss");
+ ve.init( props );
+ ve.info("Done initializing VelocityEngine for ExportRss");
+ ve.info("************************************************");
+
+ ctx = new VelocityContext();
+
+ user = website.getUser();
+ RollerContext rollerCtx = RollerContext.getRollerContext(
+ RollerContext.getServletContext());
+ loadPageHelper();
+
+ loadDates(website);
+
+ loadWebsiteInfo(rollerCtx, website);
+
+ loadTheRest(rollerCtx);
+ }
+
+ public void setExportAtom(boolean atom)
+ {
+ exportAtom = atom;
+ }
+
+ /**
+ * Export the given entries using export_rss.vm.
+ *
+ * @param entries
+ * @throws ResourceNotFoundException
+ * @throws ParseErrorException
+ * @throws Exception
+ */
+ public void exportEntries(Collection entries, String fileName) throws ResourceNotFoundException, ParseErrorException, Exception
+ {
+ ctx.put("entries", entries);
+
+ String templateFile = RSS_TEMPLATE;
+ if (exportAtom) templateFile = ATOM_TEMPLATE;
+ Template template = ve.getTemplate( templateFile, "utf-8" );
+ StringWriter sw = new StringWriter();
+ template.merge(ctx, sw);
+
+ writeResultsToFile((String)ctx.get("uploadPath"), sw, fileName);
+ }
+
+ /**
+ * @param sw
+ */
+ private void writeResultsToFile(String filePath, StringWriter sw, String fileName)
+ throws RollerException, IOException
+ {
+ filePath += "/" + user.getUserName();
+ new java.io.File( filePath ).mkdirs(); // create dir path on drive
+
+ filePath += "/" + fileName;
+
+ File outputFile = new java.io.File( filePath );
+ FileOutputStream out = null;
+ try
+ {
+ //outputFile.createNewFile();
+ out = new FileOutputStream( outputFile );
+ out.write( sw.toString().getBytes() );
+ out.flush();
+ }
+ catch ( FileNotFoundException e )
+ {
+ throw new RollerException( "Unable to write to: " + outputFile.getAbsolutePath(), e );
+ }
+ finally
+ {
+ try
+ {
+ if ( out != null )
+ {
+ out.close();
+ }
+ }
+ catch ( java.io.IOException ioe )
+ {
+ System.err.println( "ExportRss unable to close OutputStream" );
+ }
+ }
+ }
+
+ /**
+ * Load miscellaneous values into the Context.
+ * @param rollerCtx
+ */
+ private void loadTheRest(RollerContext rollerCtx)
+ {
+ ctx.put("utilities", new Utilities() );
+ ctx.put("stringUtils", new StringUtils() );
+ ctx.put("entryLength", new Integer(-1));
+ }
+
+ /**
+ * Load information pertaining to the Website and
+ * its associated User.
+ * @param rollerCtx
+ */
+ private void loadWebsiteInfo(RollerContext rollerCtx, WebsiteData website)
+ {
+ ctx.put("website", website);
+ ctx.put("userName", user.getUserName() );
+ ctx.put("fullName", user.getFullName() );
+ ctx.put("emailAddress", user.getEmailAddress() );
+
+ ctx.put("encodedEmail", RegexUtil.encode(user.getEmailAddress()));
+ ctx.put("obfuscatedEmail", RegexUtil.obfuscateEmail(user.getEmailAddress()));
+
+
+ // custom figureResourcePath() due to no "request" object
+ StringBuffer sb = new StringBuffer();
+ String uploadDir = null;
+ try {
+ uploadDir = RollerFactory.getRoller().getFileManager().getUploadDir();
+ } catch(Exception e) {}
+
+ ctx.put("uploadPath", uploadDir);
+ }
+
+ /**
+ * Load time-related information.
+ * @param website
+ */
+ private void loadDates(WebsiteData website)
+ {
+ try
+ {
+ // Add current time and last updated times to context
+ Date updateTime = RollerFactory.getRoller().getWeblogManager()
+ .getWeblogLastPublishTime( user.getUserName(), null );
+ ctx.put("updateTime", updateTime);
+ }
+ catch (RollerException e)
+ {
+ ctx.put("updateTime", new Date());
+ }
+ ctx.put("now", new Date());
+
+ // setup Locale for future rendering
+ Locale locale = website.getLocaleInstance();
+ ctx.put("locale", locale);
+
+ // setup Timezone for future rendering
+ ctx.put("timezone", website.getTimeZoneInstance());
+
+ // date formats need to be run through the Localized
+ // SimpleDateFormat and pulled back out as localized patterns.
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", locale);
+ sdf.setTimeZone( (TimeZone)ctx.get("timezone") );
+ ctx.put("plainFormat", sdf.toLocalizedPattern());
+
+ sdf.applyPattern("EEEE MMMM dd, yyyy");
+ ctx.put("toStringFormat", sdf.toLocalizedPattern());
+
+ sdf.applyPattern("MMM dd yyyy, hh:mm:ss a z");
+ ctx.put("timestampFormat", sdf.toLocalizedPattern());
+
+ ctx.put("dateFormatter", sdf );
+ }
+ /**
+ * Create a PageHelper. Note that will have no values
+ * necessary in parsing a Web request (such as /page) -
+ * it is only useful for the restricted export_rss.vm
+ * and has no PagePlugins either. We want the exported
+ * Entry.text to be the raw values.
+ */
+ private void loadPageHelper()
+ {
+ // Add Velocity page helper to context
+ PageHelper pageHelper = new PageHelper(null, null, ctx);
+ // set no PagePlugins - we *do not* want to render them.
+ ctx.put("pageHelper", pageHelper );
+ }
+}
Modified: incubator/roller/trunk/src/org/roller/presentation/velocity/FlavorServlet.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/velocity/FlavorServlet.java?rev=209366&r1=209365&r2=209366&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/velocity/FlavorServlet.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/velocity/FlavorServlet.java Tue Jul 5 17:41:31 2005
@@ -1 +1,133 @@
-package org.roller.presentation.velocity;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.servlet.VelocityServlet;
import org.roller.RollerException;
import org.roller.presentation.RollerRequest;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.PageContext;
/////////////////////////////////////////////////////////////////////////////
/**
* <p>Responsible for rendering RSS feeds and other "flavors" of output for a
* weblog.</p>
*
* <p>If Servlet is mapped to <code>/rss</code> and user has defined
* an RSS override page (i.e. a page named "_rss"), then that Velocity
* template will be used for rendering.</p>
*
* <p>If there is a request parameter named "flavor", then the Velocity
* template specified by that parameter will be used for rendering. For
* example if the flavor is "rss092" then the template at classpath
* "/flavors/rss092.vm" will be used for rendering.</p>
*
* <p>Otherwise, the template /flavors/rss.vm" will be used for rendering.</p>
*
* <p>Assumes that If-Modified-Since has already been handled.</p>
*
* @author David M Johnson
*
* @web.servlet name="RssServlet"
* @web.servlet-mapping url-pattern="/rss/*"
* @web.servlet-mapping url-pattern="/flavor/*"
*/
public class FlavorServlet extends VelocityServlet
{
static final long serialVersionUID = -2720532269434186051L;
private static Log mLogger = LogFactory.getFactory()
.getInstance(RollerRequest.class);
public Template handleRequest(HttpServletRequest request,
HttpServletResponse response, Context ctx)
{
RollerRequest rreq = null;
try
{
rreq = RollerRequest.getRollerRequest(request,getServletContext());
// This is an ugly hack to fix the following bug:
// ROL-547: "Site wide RSS feed is your own if you are logged in"
String[] pathInfo = StringUtils.split(rreq.getPathInfo(),"/");
if (pathInfo.length < 1)
{
// If website not specified in URL, set it to null
rreq.setWebsite(null);
}
}
catch (RollerException e)
{
// An error initializing the request is considered to be a 404
if (mLogger.isDebugEnabled())
{
mLogger.debug("RollerRequest threw Exception", e);
}
try
{
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
catch (IOException e1)
{
if (mLogger.isDebugEnabled())
{
mLogger.debug("IOException sending error", e);
}
}
return null;
}
try
{
// Needed to init request attributes, etc.
PageContext pageContext =
JspFactory.getDefaultFactory().getPageContext(
this, request, response, "", true, 8192, true);
rreq.setPageContext(pageContext);
ContextLoader.setupContext(ctx, rreq, response);
final String useTemplate;
PageModel pageModel = (PageModel)ctx.get("pageModel");
if ( request.getServletPath().endsWith("rss")
&& pageModel.getPageByName("_rss") != null )
{
// If the request specified the "/rss" mapping and the
// user has defined an RSS override page, we will use that.
useTemplate = pageModel.getPageByName("_rss").getId();
}
else if (request.getParameter("flavor") != null)
{
// If request specifies a "flavor" then use that.
String flavor = request.getParameter("flavor");
useTemplate = "/flavors/" + flavor + ".vm";
}
else
{
// Fall through to default RSS page template.
useTemplate = "/flavors/rss.vm";
}
return getTemplate(useTemplate);
}
catch (Exception e)
{
mLogger.error("ERROR in RssServlet", e);
}
return null;
}
//------------------------------------------------------------------------
/**
* Handle error in Velocity processing.
*/
protected void error( HttpServletRequest req, HttpServletResponse res,
Exception e) throws ServletException, IOException
{
mLogger.warn("ERROR in FlavorServlet",e);
}
}
\ No newline at end of file
+package org.roller.presentation.velocity;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.velocity.Template;
+import org.apache.velocity.context.Context;
+import org.apache.velocity.servlet.VelocityServlet;
+import org.roller.RollerException;
+import org.roller.presentation.RollerRequest;
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspFactory;
+import javax.servlet.jsp.PageContext;
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * <p>Responsible for rendering RSS feeds and other "flavors" of output for a
+ * weblog.</p>
+ *
+ * <p>If Servlet is mapped to <code>/rss</code> and user has defined
+ * an RSS override page (i.e. a page named "_rss"), then that Velocity
+ * template will be used for rendering.</p>
+ *
+ * <p>If there is a request parameter named "flavor", then the Velocity
+ * template specified by that parameter will be used for rendering. For
+ * example if the flavor is "rss092" then the template at classpath
+ * "/flavors/rss092.vm" will be used for rendering.</p>
+ *
+ * <p>Otherwise, the template /flavors/rss.vm" will be used for rendering.</p>
+ *
+ * <p>Assumes that If-Modified-Since has already been handled.</p>
+ *
+ * @author David M Johnson
+ *
+ * @web.servlet name="RssServlet"
+ * @web.servlet-mapping url-pattern="/rss/*"
+ * @web.servlet-mapping url-pattern="/flavor/*"
+ */
+public class FlavorServlet extends VelocityServlet
+{
+ static final long serialVersionUID = -2720532269434186051L;
+
+ private static Log mLogger = LogFactory.getFactory()
+ .getInstance(RollerRequest.class);
+ public Template handleRequest(HttpServletRequest request,
+ HttpServletResponse response, Context ctx)
+ {
+ RollerRequest rreq = null;
+ try
+ {
+ rreq = RollerRequest.getRollerRequest(request,getServletContext());
+
+ // This is an ugly hack to fix the following bug:
+ // ROL-547: "Site wide RSS feed is your own if you are logged in"
+ String[] pathInfo = StringUtils.split(rreq.getPathInfo(),"/");
+ if (pathInfo.length < 1)
+ {
+ // If website not specified in URL, set it to null
+ rreq.setWebsite(null);
+ }
+ }
+ catch (RollerException e)
+ {
+ // An error initializing the request is considered to be a 404
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("RollerRequest threw Exception", e);
+ }
+ try
+ {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND);
+ }
+ catch (IOException e1)
+ {
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("IOException sending error", e);
+ }
+ }
+ return null;
+ }
+ try
+ {
+ // Needed to init request attributes, etc.
+ PageContext pageContext =
+ JspFactory.getDefaultFactory().getPageContext(
+ this, request, response, "", true, 8192, true);
+ rreq.setPageContext(pageContext);
+ ContextLoader.setupContext(ctx, rreq, response);
+
+ final String useTemplate;
+ PageModel pageModel = (PageModel)ctx.get("pageModel");
+ if ( request.getServletPath().endsWith("rss")
+ && pageModel.getPageByName("_rss") != null )
+ {
+ // If the request specified the "/rss" mapping and the
+ // user has defined an RSS override page, we will use that.
+ useTemplate = pageModel.getPageByName("_rss").getId();
+ }
+ else if (request.getParameter("flavor") != null)
+ {
+ // If request specifies a "flavor" then use that.
+ String flavor = request.getParameter("flavor");
+ useTemplate = "/flavors/" + flavor + ".vm";
+ }
+ else
+ {
+ // Fall through to default RSS page template.
+ useTemplate = "/flavors/rss.vm";
+ }
+ return getTemplate(useTemplate);
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in RssServlet", e);
+ }
+ return null;
+ }
+
+ //------------------------------------------------------------------------
+ /**
+ * Handle error in Velocity processing.
+ */
+ protected void error( HttpServletRequest req, HttpServletResponse res,
+ Exception e) throws ServletException, IOException
+ {
+ mLogger.warn("ERROR in FlavorServlet",e);
+ }
+}
+
Modified: incubator/roller/trunk/src/org/roller/presentation/velocity/FoafServlet.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/velocity/FoafServlet.java?rev=209366&r1=209365&r2=209366&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/velocity/FoafServlet.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/velocity/FoafServlet.java Tue Jul 5 17:41:31 2005
@@ -1 +1,154 @@
-package org.roller.presentation.velocity;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
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.RollerContext;
import org.roller.presentation.RollerRequest;
import org.roller.util.Utilities;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//////////////////////////////////////////////////////////////////////////////
/**
* <p>Responsible for rendering FOAF feed. This servlet requires
* that the RequestFilter is in place for it, and should also
* have the IfModifiedFilter configured.</p>
*
* <p>Resources:<br />
* <a href="http://xmlns.com/foaf/0.1/"
* >FOAF Vocabulary Specification</a><br />
* <a href="http://www.xml.com/lpt/a/2004/02/04/foaf.html"
* >An Introduction to FOAF</a></p>
*
* <p>FOAF Autodiscovery: <br />
* <link rel="meta" type="application/rdf+xml" title="FOAF"
* href="$absBaseURL/foaf/$userName" /> </p>
*
* @author Lance Lavandowska
*
* @web.servlet name="FoafServlet"
* @web.servlet-mapping url-pattern="/foaf/*"
*/
public class FoafServlet extends VelocityServlet
{
static final long serialVersionUID = -1893244416537298619L;
private static Log mLogger = LogFactory.getFactory()
.getInstance(RollerRequest.class);
/**
* This Velocity servlet does not make use of ContextLoader and associated
* classes (as do FlavorServlet and PageServlet) because that is more
* work than is really necessary. It implements its own setupContext()
* to load necessary values into the Velocity Context.
*
* @param ctx
* @param rreq
* @throws RollerException
*/
public Template handleRequest(HttpServletRequest request,
HttpServletResponse response, Context ctx)
{
RollerRequest rreq = null;
try
{
rreq = RollerRequest.getRollerRequest(request, getServletContext());
}
catch (RollerException e)
{
// An error initializing the request is considered to be a 404
if (mLogger.isDebugEnabled())
{
mLogger.debug("RollerRequest threw Exception", e);
}
try
{
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
catch (IOException e1)
{
if (mLogger.isDebugEnabled())
{
mLogger.debug("IOException sending error", e);
}
}
return null;
}
try
{
setupContext(ctx, rreq);
response.setContentType("application/rdf+xml");
return getTemplate("/flavors/foaf.vm");
}
catch (Exception e)
{
mLogger.error("ERROR in FoafServlet", e);
}
return null;
}
/**
* @param ctx
*/
private void setupContext(Context ctx, RollerRequest rreq) throws RollerException
{
HttpServletRequest request = rreq.getRequest();
RollerContext rollerCtx = RollerContext.getRollerContext( request );
UserData user = rreq.getUser();
ctx.put("fullName", user.getFullName()); // name for FlavorServlet compatibility
// foaf:homepage to equal base URL for user
String homepage = Utilities.escapeHTML(
rollerCtx.getAbsoluteContextUrl(request) +
"/page/" + rreq.getUser().getUserName() );
ctx.put("websiteURL", homepage); // name for FlavorServlet compatibility
// see if foaf:weblog is different Page
WebsiteData website = rreq.getWebsite();
UserManager usrMgr = RollerContext.getRoller(request).getUserManager();
org.roller.model.Template weblog = website.getPageByName("Weblog");
// if weblog != homepage, add to context
if (weblog != null && !website.getDefaultPageId().equals(weblog.getId()))
{
String weblogUrl = Utilities.escapeHTML(
rollerCtx.getAbsoluteContextUrl(request) +
"/page/" + rreq.getUser().getUserName() +
"/" + weblog.getLink() );
ctx.put("weblog", weblogUrl);
}
// use SHA1 encrypted email address, including mailto: prefix
String shaEmail = Utilities.encodePassword(
"mailto:" + user.getEmailAddress(), "SHA");
ctx.put("shaEmail", shaEmail);
}
//------------------------------------------------------------------------
/**
* Handle error in Velocity processing.
*/
protected void error( HttpServletRequest req, HttpServletResponse res,
Exception e) throws ServletException, IOException
{
mLogger.warn("ERROR in FoafServlet",e);
}
}
\ No newline at end of file
+package org.roller.presentation.velocity;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.velocity.Template;
+import org.apache.velocity.context.Context;
+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.RollerContext;
+import org.roller.presentation.RollerRequest;
+import org.roller.util.Utilities;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+//////////////////////////////////////////////////////////////////////////////
+
+/**
+ * <p>Responsible for rendering FOAF feed. This servlet requires
+ * that the RequestFilter is in place for it, and should also
+ * have the IfModifiedFilter configured.</p>
+ *
+ * <p>Resources:<br />
+ * <a href="http://xmlns.com/foaf/0.1/"
+ * >FOAF Vocabulary Specification</a><br />
+ * <a href="http://www.xml.com/lpt/a/2004/02/04/foaf.html"
+ * >An Introduction to FOAF</a></p>
+ *
+ * <p>FOAF Autodiscovery: <br />
+ * <link rel="meta" type="application/rdf+xml" title="FOAF"
+ * href="$absBaseURL/foaf/$userName" /> </p>
+ *
+ * @author Lance Lavandowska
+ *
+ * @web.servlet name="FoafServlet"
+ * @web.servlet-mapping url-pattern="/foaf/*"
+ */
+public class FoafServlet extends VelocityServlet
+{
+ static final long serialVersionUID = -1893244416537298619L;
+
+ private static Log mLogger = LogFactory.getFactory()
+ .getInstance(RollerRequest.class);
+
+ /**
+ * This Velocity servlet does not make use of ContextLoader and associated
+ * classes (as do FlavorServlet and PageServlet) because that is more
+ * work than is really necessary. It implements its own setupContext()
+ * to load necessary values into the Velocity Context.
+ *
+ * @param ctx
+ * @param rreq
+ * @throws RollerException
+ */
+ public Template handleRequest(HttpServletRequest request,
+ HttpServletResponse response, Context ctx)
+ {
+ RollerRequest rreq = null;
+ try
+ {
+ rreq = RollerRequest.getRollerRequest(request, getServletContext());
+ }
+ catch (RollerException e)
+ {
+ // An error initializing the request is considered to be a 404
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("RollerRequest threw Exception", e);
+ }
+
+ try
+ {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND);
+ }
+ catch (IOException e1)
+ {
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("IOException sending error", e);
+ }
+ }
+ return null;
+ }
+
+ try
+ {
+ setupContext(ctx, rreq);
+
+ response.setContentType("application/rdf+xml");
+ return getTemplate("/flavors/foaf.vm");
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in FoafServlet", e);
+ }
+ return null;
+ }
+
+ /**
+ * @param ctx
+ */
+ private void setupContext(Context ctx, RollerRequest rreq) throws RollerException
+ {
+ HttpServletRequest request = rreq.getRequest();
+ RollerContext rollerCtx = RollerContext.getRollerContext( request );
+
+ UserData user = rreq.getUser();
+ ctx.put("fullName", user.getFullName()); // name for FlavorServlet compatibility
+
+ // foaf:homepage to equal base URL for user
+ String homepage = Utilities.escapeHTML(
+ rollerCtx.getAbsoluteContextUrl(request) +
+ "/page/" + rreq.getUser().getUserName() );
+ ctx.put("websiteURL", homepage); // name for FlavorServlet compatibility
+
+ // see if foaf:weblog is different Page
+ WebsiteData website = rreq.getWebsite();
+ UserManager usrMgr = RollerContext.getRoller(request).getUserManager();
+ org.roller.model.Template weblog = website.getPageByName("Weblog");
+
+ // if weblog != homepage, add to context
+ if (weblog != null && !website.getDefaultPageId().equals(weblog.getId()))
+ {
+ String weblogUrl = Utilities.escapeHTML(
+ rollerCtx.getAbsoluteContextUrl(request) +
+ "/page/" + rreq.getUser().getUserName() +
+ "/" + weblog.getLink() );
+ ctx.put("weblog", weblogUrl);
+ }
+
+ // use SHA1 encrypted email address, including mailto: prefix
+ String shaEmail = Utilities.encodePassword(
+ "mailto:" + user.getEmailAddress(), "SHA");
+ ctx.put("shaEmail", shaEmail);
+ }
+
+ //------------------------------------------------------------------------
+ /**
+ * Handle error in Velocity processing.
+ */
+ protected void error( HttpServletRequest req, HttpServletResponse res,
+ Exception e) throws ServletException, IOException
+ {
+ mLogger.warn("ERROR in FoafServlet",e);
+ }
+}
Modified: incubator/roller/trunk/src/org/roller/presentation/velocity/PlanetFeedServlet.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/velocity/PlanetFeedServlet.java?rev=209366&r1=209365&r2=209366&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/velocity/PlanetFeedServlet.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/velocity/PlanetFeedServlet.java Tue Jul 5 17:41:31 2005
@@ -1 +1,91 @@
-package org.roller.presentation.velocity;
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.servlet.VelocityServlet;
import org.roller.RollerException;
import org.roller.model.PlanetManager;
import org.roller.presentation.RollerRequest;
import org.roller.util.Utilities;
/////////////////////////////////////////////////////////////////////////////
/**
* Planet Roller (i.e. NOT for Planet Tool) RSS feed.
* @author David M Johnson
* @web.servlet name="PlanetFeedServlet"
* @web.servlet-mapping url-pattern="/planetrss/*"
*/
public class PlanetFeedServlet extends VelocityServlet
{
private static Log mLogger =
LogFactory.getFactory().getInstance(RollerRequest.class);
public Template handleRequest(HttpServletRequest request,
HttpServletResponse response, Context context)
{
RollerRequest rreq = null;
try
{
rreq = RollerRequest.getRollerRequest(request, getServletContext());
}
catch (RollerException e)
{
// An error initializing the request is considered to be a 404
if (mLogger.isDebugEnabled())
{
mLogger.debug("RollerRequest threw Exception", e);
}
try
{
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
catch (IOException e1)
{
if (mLogger.isDebugEnabled())
{
mLogger.debug("IOException sending error", e);
}
}
return null;
}
try
{
response.setContentType("application/rss+xml;charset=utf-8");
PlanetManager planet =
rreq.getRoller().getPlanetManager();
if (request.getParameter("group") != null)
{
context.put("group",
planet.getGroup(request.getParameter("group")));
}
context.put("planet", planet);
context.put("date", new Date());
context.put("utilities", new Utilities());
return getTemplate("planetrss.vm");
}
catch (Exception e)
{
mLogger.error("ERROR in PlanetFeedServlet", e);
}
return null;
}
//------------------------------------------------------------------------
/**
* Handle error in Velocity processing.
*/
protected void error( HttpServletRequest req, HttpServletResponse res,
Exception e) throws ServletException, IOException
{
mLogger.warn("ERROR in PlanetFeedServlet",e);
}
}
\ No newline at end of file
+package org.roller.presentation.velocity;
+import java.io.IOException;
+import java.util.Date;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.velocity.Template;
+import org.apache.velocity.context.Context;
+import org.apache.velocity.servlet.VelocityServlet;
+import org.roller.RollerException;
+import org.roller.model.PlanetManager;
+import org.roller.presentation.RollerRequest;
+import org.roller.util.Utilities;
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * Planet Roller (i.e. NOT for Planet Tool) RSS feed.
+ * @author David M Johnson
+ * @web.servlet name="PlanetFeedServlet"
+ * @web.servlet-mapping url-pattern="/planetrss/*"
+ */
+public class PlanetFeedServlet extends VelocityServlet
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(RollerRequest.class);
+
+ public Template handleRequest(HttpServletRequest request,
+ HttpServletResponse response, Context context)
+ {
+ RollerRequest rreq = null;
+ try
+ {
+ rreq = RollerRequest.getRollerRequest(request, getServletContext());
+ }
+ catch (RollerException e)
+ {
+ // An error initializing the request is considered to be a 404
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("RollerRequest threw Exception", e);
+ }
+ try
+ {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND);
+ }
+ catch (IOException e1)
+ {
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("IOException sending error", e);
+ }
+ }
+ return null;
+ }
+ try
+ {
+ response.setContentType("application/rss+xml;charset=utf-8");
+ PlanetManager planet =
+ rreq.getRoller().getPlanetManager();
+ if (request.getParameter("group") != null)
+ {
+ context.put("group",
+ planet.getGroup(request.getParameter("group")));
+ }
+ context.put("planet", planet);
+ context.put("date", new Date());
+ context.put("utilities", new Utilities());
+ return getTemplate("planetrss.vm");
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in PlanetFeedServlet", e);
+ }
+ return null;
+ }
+
+ //------------------------------------------------------------------------
+ /**
+ * Handle error in Velocity processing.
+ */
+ protected void error( HttpServletRequest req, HttpServletResponse res,
+ Exception e) throws ServletException, IOException
+ {
+ mLogger.warn("ERROR in PlanetFeedServlet",e);
+ }
+}
+