package nl.primatras.backoffice.web.view; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import nl.primatras.backoffice.domain.Order; import org.springframework.web.servlet.view.AbstractView; import com.sun.syndication.feed.synd.SyndContent; import com.sun.syndication.feed.synd.SyndContentImpl; import com.sun.syndication.feed.synd.SyndEntry; import com.sun.syndication.feed.synd.SyndEntryImpl; import com.sun.syndication.feed.synd.SyndFeed; import com.sun.syndication.feed.synd.SyndFeedImpl; import com.sun.syndication.io.SyndFeedOutput; /** * Class to create a Rss feed. The feed is created using the * Rome Library. * This class is largely based on the servlet example from their wiki site. * By default this class uses the atom_0.3 rss version, but if you specify * a parameter 'type' with another rss version that is supported by Rome, it * will create an rss feed based on that version. * * @author Jettro Coenradie */ public class RssOrderView extends AbstractView { private static final String DEFAULT_FEED_TYPE = "atom_0.3"; private static final String FEED_TYPE = "type"; private static final String ORDER_COLLECTION = "orders"; private String orderOverviewView; /** * Default constructor */ public RssOrderView() { setContentType("application/xml; charset=UTF-8"); setOrderOverviewView("showOrderOverview.html"); } @Override protected void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { List orders = (List)model.get(ORDER_COLLECTION); String baseUrl = "http://"+ request.getServerName() +":"+ request.getServerPort() + request.getContextPath() + "/"; SyndFeed feed = getFeed(orders,baseUrl); String feedType = request.getParameter(FEED_TYPE); feedType = (feedType!=null) ? feedType : DEFAULT_FEED_TYPE; feed.setFeedType(feedType); response.setContentType(getContentType()); SyndFeedOutput output = new SyndFeedOutput(); output.output(feed,response.getWriter()); } /** * Creates a list with entries from the provided list of orders * @param orders * @param contextPath * @return */ private SyndFeed getFeed(List orders,String contextPath) { SyndFeed feed = new SyndFeedImpl(); feed.setAuthor(getMessageSourceAccessor().getMessage("order.feed.author")); feed.setTitle(getMessageSourceAccessor().getMessage("order.feed.title")); feed.setDescription(getMessageSourceAccessor().getMessage("order.feed.description")); feed.setLink(contextPath); List entries = new ArrayList(); for (Order order : orders) { String entryTitle = order.getCustomer().getLastname(); String entryLink = contextPath + getOrderOverviewView() + "?id=" + order.getId(); String entryDescription = order.toString(); entries.add(createEntry(entryTitle,entryLink,entryDescription,order.getCreatedate())); } feed.setEntries(entries); return feed; } /** * Creates an entry from the provided data * @param title * @param link * @param description * @param createDate * @return the new create entry */ private SyndEntry createEntry (String title, String link, String description, Date createDate) { SyndEntry entry = new SyndEntryImpl(); entry.setTitle(title); entry.setLink(link); entry.setPublishedDate(createDate); SyndContent entryDescription = new SyndContentImpl(); entryDescription.setType("text/plain"); entryDescription.setValue(description); entry.setDescription(entryDescription); return entry; } public String getOrderOverviewView() { return orderOverviewView; } public void setOrderOverviewView(String orderOverviewView) { this.orderOverviewView = orderOverviewView; } }