James Moger
2011-10-23 fe326255202dcfac8b0991ca9d28e3cf4bcc4fe6
src/com/gitblit/SyndicationServlet.java
@@ -26,17 +26,37 @@
import org.slf4j.LoggerFactory;
import com.gitblit.models.RepositoryModel;
import com.gitblit.utils.HttpUtils;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.StringUtils;
import com.gitblit.utils.SyndicationUtils;
import com.gitblit.wicket.WicketUtils;
/**
 * SyndicationServlet generates RSS 2.0 feeds and feed links.
 *
 * Access to this servlet is protected by the SyndicationFilter.
 *
 * @author James Moger
 *
 */
public class SyndicationServlet extends HttpServlet {
   private static final long serialVersionUID = 1L;
   private transient Logger logger = LoggerFactory.getLogger(SyndicationServlet.class);
   /**
    * Create a feed link for the specified repository and branch/tag/commit id.
    *
    * @param baseURL
    * @param repository
    *            the repository name
    * @param objectId
    *            the branch, tag, or first commit for the feed
    * @param length
    *            the number of commits to include in the feed
    * @return an RSS feed url
    */
   public static String asLink(String baseURL, String repository, String objectId, int length) {
      if (baseURL.length() > 0 && baseURL.charAt(baseURL.length() - 1) == '/') {
         baseURL = baseURL.substring(0, baseURL.length() - 1);
@@ -62,7 +82,14 @@
      }
      return url.toString();
   }
   /**
    * Determines the appropriate title for a feed.
    *
    * @param repository
    * @param objectId
    * @return title of the feed
    */
   public static String getTitle(String repository, String objectId) {
      String id = objectId;
      if (!StringUtils.isEmpty(id)) {
@@ -77,12 +104,20 @@
      return MessageFormat.format("{0} ({1})", repository, id);
   }
   /**
    * Generates the feed content.
    *
    * @param request
    * @param response
    * @throws javax.servlet.ServletException
    * @throws java.io.IOException
    */
   private void processRequest(javax.servlet.http.HttpServletRequest request,
         javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException,
         java.io.IOException {
      String hostURL = WicketUtils.getHostURL(request);
      String url = request.getRequestURI().substring(request.getServletPath().length());
      String servletUrl = request.getContextPath() + request.getServletPath();
      String url = request.getRequestURI().substring(servletUrl.length());
      if (url.charAt(0) == '/' && url.length() > 1) {
         url = url.substring(1);
      }
@@ -100,11 +135,12 @@
         }
      }
      response.setContentType("application/rss+xml; charset=UTF-8");
      Repository repository = GitBlit.self().getRepository(repositoryName);
      RepositoryModel model = GitBlit.self().getRepositoryModel(repositoryName);
      List<RevCommit> commits = JGitUtils.getRevLog(repository, objectId, 0, length);
      try {
         SyndicationUtils.toRSS(hostURL, getTitle(model.name, objectId), model.description,
         SyndicationUtils.toRSS(HttpUtils.getGitblitURL(request), getTitle(model.name, objectId), model.description,
               model.name, commits, response.getOutputStream());
      } catch (Exception e) {
         logger.error("An error occurred during feed generation", e);