package com.idega.content.bean; import java.io.Serializable; import java.rmi.RemoteException; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import org.jdom.Document; import com.idega.block.rss.business.EntryData; import com.idega.block.rss.business.RSSBusiness; import com.idega.business.IBOLookup; import com.idega.business.IBOLookupException; import com.idega.presentation.IWContext; import com.idega.util.CoreUtil; import com.sun.syndication.feed.synd.SyndEntry; import com.sun.syndication.feed.synd.SyndFeed; public class ContentItemFeedBean implements Serializable { private static final long serialVersionUID = 5244185733994532891L; public static final String FEED_TYPE_ATOM_1 = "atom_1.0"; public static final String FEED_TYPE_RSS_2 = "rss_2.0"; private static final String FEED_ENTRY_DESCRIPTION_TYPE = "html"; private static final String FEED_ENTRY_BODY_TYPE = "html"; private volatile RSSBusiness rss = null; private String feedType = null; public ContentItemFeedBean(IWContext iwc, String feedType) { this.feedType = feedType; init(iwc); } public ContentItemFeedBean(RSSBusiness rss, String feedType) { this.feedType = feedType; this.rss=rss; } private void init(IWContext iwc) { if (rss == null) { if (iwc == null) { iwc = CoreUtil.getIWContext(); } try { rss = IBOLookup.getServiceInstance(iwc, RSSBusiness.class); } catch (IBOLookupException e) { e.printStackTrace(); } } } /** * * @param title * @param uri * @param description * @return */ private SyndFeed createFeed(String title, String uri, String description, String language, Timestamp date) { if (rss == null) { return null; } return rss.createNewFeed(title, uri, description, getFeedType(), language, date); } private SyndFeed createFeedWithEntry(String feedTitle, String serverName, String feedDescription, EntryData entryData) { if (rss == null) { return null; } SyndFeed feed = createFeed(feedTitle, serverName, feedDescription, entryData.getLanguage(), entryData.getUpdated()); if (feed == null) { return null; } List<SyndEntry> entries = new ArrayList<SyndEntry>(); entryData.setDescriptionType(FEED_ENTRY_DESCRIPTION_TYPE); entryData.setBodyType(FEED_ENTRY_BODY_TYPE); entries.add(rss.createNewEntry(entryData)); feed.setEntries(entries); return feed; } public String getFeedEntryAsXML(String feedTitle, String serverName, String feedDescription, EntryData entryData) { if (rss == null) { return null; } if (entryData.getUpdated() == null) { entryData.setUpdated(new Timestamp(System.currentTimeMillis())); } SyndFeed feed = createFeedWithEntry(feedTitle, serverName, feedDescription, entryData); if (feed == null) { return null; } if (FEED_TYPE_ATOM_1.equals(feed.getFeedType())) { try { return rss.convertFeedToAtomXMLString(feed); } catch (RemoteException e) { e.printStackTrace(); return null; } } if (FEED_TYPE_RSS_2.equals(feed.getFeedType())) { try { return rss.convertFeedToRSS2XMLString(feed); } catch (RemoteException e) { e.printStackTrace(); return null; } } return null; } protected Document getFeedAsJDomDocument(SyndFeed feed) { if (rss == null) { return null; } return rss.convertFeedToJDomDocument(feed); } protected String getFeedType() { return feedType; } protected void setFeedType(String feedType) { this.feedType = feedType; } }