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/12/20 21:10:41 UTC

svn commit: r358087 - in /incubator/roller/trunk: src/org/roller/presentation/velocity/RSDServlet.java web/WEB-INF/classes/flavors/rsd.vm

Author: agilliland
Date: Tue Dec 20 12:10:37 2005
New Revision: 358087

URL: http://svn.apache.org/viewcvs?rev=358087&view=rev
Log:
new rsd servlet.


Added:
    incubator/roller/trunk/src/org/roller/presentation/velocity/RSDServlet.java
    incubator/roller/trunk/web/WEB-INF/classes/flavors/rsd.vm

Added: incubator/roller/trunk/src/org/roller/presentation/velocity/RSDServlet.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/velocity/RSDServlet.java?rev=358087&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/velocity/RSDServlet.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/velocity/RSDServlet.java Tue Dec 20 12:10:37 2005
@@ -0,0 +1,115 @@
+/*
+ * RSDServlet.java
+ *
+ * Created on December 14, 2005, 6:08 PM
+ */
+
+package org.roller.presentation.velocity;
+
+import java.io.IOException;
+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.exception.ResourceNotFoundException;
+import org.apache.velocity.servlet.VelocityServlet;
+import org.roller.RollerException;
+import org.roller.model.RollerFactory;
+import org.roller.model.UserManager;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.InvalidRequestException;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.WeblogRequest;
+
+
+/**
+ * Generates simple rsd feeds for a given weblog.
+ *
+ *
+ * @web.servlet name="RSDServlet" load-on-startup="0"
+ *
+ * @web.servlet-init-param name="org.apache.velocity.properties" 
+ * 		                  value="/WEB-INF/velocity.properties"
+ *  
+ * @web.servlet-mapping url-pattern="/rsd/*"
+ *
+ * @author Allen Gilliland
+ */
+public class RSDServlet extends VelocityServlet {
+    
+    private static Log mLogger = LogFactory.getLog(RSDServlet.class);
+    
+    
+    /**
+     * Process a request for a Weblog page.
+     */
+    public Template handleRequest(HttpServletRequest request,
+                                HttpServletResponse response, 
+                                Context ctx) 
+            throws IOException {
+        
+        Template template = null;
+        WeblogRequest weblogRequest = null;
+        WebsiteData weblog = null;
+        
+        // first off lets parse the incoming request and validate it
+        try {
+            weblogRequest = new WeblogRequest(request);
+            
+            // now make sure the specified weblog really exists
+            UserManager userMgr = RollerFactory.getRoller().getUserManager();
+            weblog = userMgr.getWebsiteByHandle(weblogRequest.getWeblogHandle(), Boolean.TRUE);
+            
+        } catch(InvalidRequestException ire) {
+            // An error initializing the request is considered to be a 404
+            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+            request.setAttribute("DisplayException", ire);
+            mLogger.error("Bad Request: "+ire.getMessage());
+            
+            return null;
+            
+        } catch(RollerException re) {
+            // error looking up the weblog, we assume it doesn't exist
+            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+            request.setAttribute("DisplayException", re);
+            mLogger.warn("Unable to lookup weblog ["+
+                    weblogRequest.getWeblogHandle()+"] "+re.getMessage());
+            
+            return null;
+        }
+        
+        
+        // request appears to be valid, lets render
+        try {
+            
+            // setup context
+            ctx.put("website", weblog);
+            
+            RollerContext rollerContext = new RollerContext();
+            ctx.put("absBaseURL", rollerContext.getAbsoluteContextUrl(request));
+            
+            // lookup our rsd template
+            template = getTemplate("/flavors/rsd.vm");
+            
+            // make sure response content type is properly set
+            response.setContentType("application/rsd+xml");
+            
+        } catch(ResourceNotFoundException rnfe ) {
+            
+            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+            request.setAttribute("DisplayException", rnfe);
+            mLogger.warn("ResourceNotFound: "+ request.getRequestURL());
+            mLogger.debug(rnfe);
+        } catch(Exception e) {
+            
+            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+            request.setAttribute("DisplayException", e);
+            mLogger.error("Unexpected exception", e);
+        }
+        
+        return template;
+    }
+    
+}

Added: incubator/roller/trunk/web/WEB-INF/classes/flavors/rsd.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/flavors/rsd.vm?rev=358087&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/flavors/rsd.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/flavors/rsd.vm Tue Dec 20 12:10:37 2005
@@ -0,0 +1,15 @@
+<rsd version="1.0">
+  <service>
+    <engineName>Roller Weblogger</engineName>
+    <engineLink>http://www.rollerweblogger.org/</engineLink>
+    <homePageLink>${absBaseURL}/page/${website.handle}/</homePageLink>
+    <apis>
+      <api name="blogger" preferred="false"
+         apiLink="${absBaseURL}/xmlrpc"
+         blogID="${website.handle}"/> 
+      <api name="metaWeblog" preferred="true"
+         apiLink="${absBaseURL}/xmlrpc"
+         blogID="${website.handle}"/>
+    </apis>
+  </service>
+</rsd>
\ No newline at end of file