001: package desktop;
002:
003: import java.net.URL;
004: import java.util.ArrayList;
005: import java.util.List;
006:
007: import javax.servlet.ServletContextEvent;
008:
009: import com.sun.syndication.feed.synd.SyndFeed;
010: import com.sun.syndication.feed.synd.SyndFeedImpl;
011: import com.sun.syndication.io.SyndFeedInput;
012: import com.sun.syndication.io.XmlReader;
013:
014: public class PollerTask extends java.util.TimerTask implements
015: javax.servlet.ServletContextListener {
016:
017: private String url = "";
018: private SyndFeed lastFeed = new SyndFeedImpl();
019: private List<FeedUpdatedListener> listeners = new ArrayList<FeedUpdatedListener>();
020: static List<PollerTask> tasks = new ArrayList<PollerTask>();
021:
022: public PollerTask() {
023: super ();
024: }
025:
026: public PollerTask(String url) {
027: super ();
028: this .url = url;
029: System.out.println("New Poller Task for feed: " + url);
030: tasks.add(this );
031:
032: }
033:
034: public String getUrl() {
035: return this .url;
036: }
037:
038: public void setUrl(String url) {
039: this .url = url;
040: }
041:
042: public List<FeedUpdatedListener> getListeners() {
043: return listeners;
044: }
045:
046: public void addListener(FeedUpdatedListener listener) {
047: if (!listeners.contains(listener))
048: listeners.add(listener);
049:
050: System.out.println(listeners.size() + " Listeners for task "
051: + this .url);
052: }
053:
054: public void removeListener(FeedUpdatedListener listener) {
055: if (listeners.contains(listener))
056: listeners.remove(listener);
057:
058: System.out.println(listeners.size() + " Listeners for task "
059: + this .url);
060: }
061:
062: public void contextDestroyed(ServletContextEvent arg0) {
063: System.out
064: .println("Context Shutdown detected; Stopping PollerTasks");
065:
066: for (PollerTask task : tasks) {
067: task.cancel();
068: }
069: }
070:
071: public void contextInitialized(ServletContextEvent arg0) {
072:
073: }
074:
075: public void run() {
076: System.out.println("Polling " + url);
077: try {
078: URL feedUrl = new URL(this .getUrl());
079: SyndFeedInput input = new SyndFeedInput();
080: SyndFeed feed = input.build(new XmlReader(feedUrl));
081:
082: if (feed != lastFeed) {
083: lastFeed = feed;
084:
085: for (FeedUpdatedListener listener : listeners) {
086: if (listener.getSession() != null
087: && listener.getSession().getDispatcher() != null)
088: listener.getSession().getDispatcher()
089: .invokeLater(
090: new FeedUpdatedEvent(feed,
091: listener));
092: }
093: }
094: System.out.println("Finished polling");
095: } catch (java.net.MalformedURLException e1) {
096: System.out.println("MalformedURLException");
097: e1.printStackTrace();
098: } catch (java.io.IOException e2) {
099: System.out.println("IOException");
100: e2.printStackTrace();
101: } catch (com.sun.syndication.io.FeedException e3) {
102: System.out.println("FeedException");
103: e3.printStackTrace();
104: }
105: }
106:
107: }
|