[jboss-cvs] jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/ui ...
Christian Bauer
christian at hibernate.org
Sun Apr 8 11:10:35 EDT 2007
User: cbauer
Date: 07/04/08 11:10:35
Modified: examples/wiki/src/main/org/jboss/seam/wiki/core/ui
FileServlet.java
Added: examples/wiki/src/main/org/jboss/seam/wiki/core/ui
FeedServlet.java
Log:
Implemented Atom feeds for site and directories
Revision Changes Path
1.6 +0 -0 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/FileServlet.java
(In the diff below, changes in quantity of whitespace are not shown.)
1.1 date: 2007/04/08 15:10:35; author: cbauer; state: Exp;jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/ui/FeedServlet.java
Index: FeedServlet.java
===================================================================
package org.jboss.seam.wiki.core.ui;
import com.sun.syndication.feed.synd.*;
import com.sun.syndication.io.SyndFeedOutput;
import org.jboss.seam.Component;
import org.jboss.seam.util.Transactions;
import org.jboss.seam.wiki.core.dao.FeedDAO;
import org.jboss.seam.wiki.core.model.Feed;
import org.jboss.seam.wiki.core.model.FeedEntry;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.transaction.UserTransaction;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class FeedServlet extends HttpServlet {
private Map<String,String> feedTypes = new HashMap<String,String>() {{
put("/atom.seam", "atom_1.0");
// TODO: Support more of these... also need to consider setContentType() ... put("/rss.seam", "rss_2.0");
}};
public FeedServlet() {}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String pathInfo = request.getPathInfo();
String feedId = request.getParameter("feedId");
if (!feedTypes.containsKey(pathInfo)) return;
String feedType = feedTypes.get(pathInfo);
if (feedId == null) return;
// TODO: Seam should use its transaction interceptor for java beans: http://jira.jboss.com/jira/browse/JBSEAM-957
UserTransaction userTx = null;
boolean startedTx = false;
try {
userTx = Transactions.getUserTransaction();
if (userTx.getStatus() != javax.transaction.Status.STATUS_ACTIVE) {
startedTx = true;
userTx.begin();
}
FeedDAO feedDAO = (FeedDAO)Component.getInstance("feedDAO");
Feed feed = feedDAO.findFeed(Long.valueOf(feedId));
if (feed == null) return;
// Create feed
SyndFeed syndFeed = new SyndFeedImpl();
syndFeed.setFeedType(feedType);
syndFeed.setTitle(feed.getTitle());
syndFeed.setLink(request.getRequestURL().toString());
syndFeed.setDescription(feed.getDescription());
// Create feed entries
List<SyndEntry> syndEntries = new ArrayList<SyndEntry>();
List<FeedEntry> entries = feedDAO.findFeedEntries(feed);
for (FeedEntry entry : entries) {
SyndEntry syndEntry;
SyndContent description;
syndEntry = new SyndEntryImpl();
syndEntry.setTitle(entry.getTitle());
syndEntry.setLink(entry.getLink());
syndEntry.setAuthor(entry.getAuthor());
syndEntry.setPublishedDate(entry.getPublishedDate());
syndEntry.setUpdatedDate(entry.getUpdatedDate());
description = new SyndContentImpl();
description.setType(entry.getDescriptionType());
description.setValue(entry.getDescriptionValue());
syndEntry.setDescription(description);
syndEntries.add(syndEntry);
}
syndFeed.setEntries(syndEntries);
// Write feed to output
response.setContentType("application/atom+xml"); // TODO: Make this more flexible
SyndFeedOutput output = new SyndFeedOutput();
output.output(syndFeed, response.getWriter());
response.getWriter().flush();
if (startedTx) userTx.commit();
} catch (Exception ex) {
try {
if (startedTx) userTx.rollback();
} catch (Exception rbEx) {
rbEx.printStackTrace();
}
throw new RuntimeException(ex);
}
}
}
More information about the jboss-cvs-commits
mailing list