From fa5e6f97aab0faca8e11ab8a264b0190c145b07f Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Fri, 04 Nov 2011 17:25:00 -0400 Subject: [PATCH] Documentation. --- src/com/gitblit/utils/SyndicationUtils.java | 91 ++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 84 insertions(+), 7 deletions(-) diff --git a/src/com/gitblit/utils/SyndicationUtils.java b/src/com/gitblit/utils/SyndicationUtils.java index 9aedeb4..4ba5622 100644 --- a/src/com/gitblit/utils/SyndicationUtils.java +++ b/src/com/gitblit/utils/SyndicationUtils.java @@ -27,6 +27,8 @@ import com.gitblit.Constants; import com.gitblit.GitBlitException; import com.gitblit.models.SyndicatedEntryModel; +import com.sun.syndication.feed.synd.SyndCategory; +import com.sun.syndication.feed.synd.SyndCategoryImpl; import com.sun.syndication.feed.synd.SyndContent; import com.sun.syndication.feed.synd.SyndContentImpl; import com.sun.syndication.feed.synd.SyndEntry; @@ -51,6 +53,7 @@ * Outputs an RSS feed of the list of entries to the outputstream. * * @param hostUrl + * @param feedLink * @param title * @param description * @param repository @@ -59,16 +62,15 @@ * @throws IOException * @throws FeedException */ - public static void toRSS(String hostUrl, String title, String description, String repository, - List<SyndicatedEntryModel> entryModels, OutputStream os) throws IOException, - FeedException { + public static void toRSS(String hostUrl, String feedLink, String title, String description, + String repository, List<SyndicatedEntryModel> entryModels, OutputStream os) + throws IOException, FeedException { SyndFeed feed = new SyndFeedImpl(); feed.setFeedType("rss_2.0"); feed.setEncoding("UTF-8"); feed.setTitle(title); - feed.setLink(MessageFormat.format("{0}/summary/{1}", hostUrl, - StringUtils.encodeURL(repository))); + feed.setLink(feedLink); feed.setDescription(description); SyndImageImpl image = new SyndImageImpl(); image.setTitle(Constants.NAME); @@ -84,10 +86,21 @@ entry.setLink(entryModel.link); entry.setPublishedDate(entryModel.published); + if (entryModel.tags != null && entryModel.tags.size() > 0) { + List<SyndCategory> tags = new ArrayList<SyndCategory>(); + for (String tag : entryModel.tags) { + SyndCategoryImpl cat = new SyndCategoryImpl(); + cat.setName(tag); + tags.add(cat); + } + entry.setCategories(tags); + } + SyndContent content = new SyndContentImpl(); content.setType(entryModel.contentType); content.setValue(entryModel.content); entry.setDescription(content); + entries.add(entry); } feed.setEntries(entries); @@ -125,8 +138,65 @@ if (!StringUtils.isEmpty(branch)) { parameters.add("h=" + branch); } + return readFeed(url, parameters, repository, branch, username, password); + } + + /** + * Reads a Gitblit RSS search feed. + * + * @param url + * the url of the Gitblit server + * @param repository + * the repository name + * @param fragment + * the search fragment + * @param searchType + * the search type (optional, defaults to COMMIT) + * @param numberOfEntries + * the number of entries to retrieve. if <= 0 the server default + * is used. + * @param username + * @param password + * @return a list of SyndicationModel entries + * @throws {@link IOException} + */ + public static List<SyndicatedEntryModel> readSearchFeed(String url, String repository, + String branch, String fragment, Constants.SearchType searchType, int numberOfEntries, + String username, char[] password) throws IOException { + // determine parameters + List<String> parameters = new ArrayList<String>(); + parameters.add("s=" + StringUtils.encodeURL(fragment)); + if (numberOfEntries > 0) { + parameters.add("l=" + numberOfEntries); + } + if (!StringUtils.isEmpty(branch)) { + parameters.add("h=" + branch); + } + if (searchType != null) { + parameters.add("st=" + searchType.name()); + } + return readFeed(url, parameters, repository, branch, username, password); + } + + /** + * Reads a Gitblit RSS feed. + * + * @param url + * the url of the Gitblit server + * @param parameters + * the list of RSS parameters + * @param repository + * the repository name + * @param username + * @param password + * @return a list of SyndicationModel entries + * @throws {@link IOException} + */ + private static List<SyndicatedEntryModel> readFeed(String url, List<String> parameters, + String repository, String branch, String username, char[] password) throws IOException { + // build url StringBuilder sb = new StringBuilder(); - sb.append(MessageFormat.format("{0}/feed/{1}", url, repository)); + sb.append(MessageFormat.format("{0}" + Constants.SYNDICATION_PATH + "{1}", url, repository)); if (parameters.size() > 0) { boolean first = true; for (String parameter : parameters) { @@ -140,7 +210,6 @@ } } String feedUrl = sb.toString(); - URLConnection conn = ConnectionUtils.openReadConnection(feedUrl, username, password); InputStream is = conn.getInputStream(); SyndFeedInput input = new SyndFeedInput(); @@ -163,6 +232,14 @@ model.link = entry.getLink(); model.content = entry.getDescription().getValue(); model.contentType = entry.getDescription().getType(); + if (entry.getCategories() != null && entry.getCategories().size() > 0) { + List<String> tags = new ArrayList<String>(); + for (Object p : entry.getCategories()) { + SyndCategory cat = (SyndCategory) p; + tags.add(cat.getName()); + } + model.tags = tags; + } entries.add(model); } return entries; -- Gitblit v1.9.1