diff options
Diffstat (limited to 'src/de/podfetcher/syndication/namespace')
4 files changed, 129 insertions, 12 deletions
diff --git a/src/de/podfetcher/syndication/namespace/Namespace.java b/src/de/podfetcher/syndication/namespace/Namespace.java index 3709a35c5..4101b0118 100644 --- a/src/de/podfetcher/syndication/namespace/Namespace.java +++ b/src/de/podfetcher/syndication/namespace/Namespace.java @@ -10,10 +10,17 @@ public abstract class Namespace { public static final String NSTAG = null; public static final String NSURI = null; - /** Called by a Feedhandler when in startElement and it detects a namespace element */ - public abstract void handleElement(String localName, HandlerState state, Attributes attributes); + /** Called by a Feedhandler when in startElement and it detects a namespace element + * @return true if namespace handled the element, false if it ignored it + * */ + public abstract void handleElementStart(String localName, HandlerState state, Attributes attributes); /** Called by a Feedhandler when in characters and it detects a namespace element */ - public abstract void handleCharacters(String localName, Feed feed, char ch[], int start, int length); + public abstract void handleCharacters(HandlerState state, char ch[], int start, int length); + + /** Called by a Feedhandler when in endElement and it detects a namespace element + * @return true if namespace handled the element, false if it ignored it + * */ + public abstract void handleElementEnd(String localName, HandlerState state); } diff --git a/src/de/podfetcher/syndication/namespace/SyndElement.java b/src/de/podfetcher/syndication/namespace/SyndElement.java index 627ac7b6d..2dd4e7062 100644 --- a/src/de/podfetcher/syndication/namespace/SyndElement.java +++ b/src/de/podfetcher/syndication/namespace/SyndElement.java @@ -6,12 +6,12 @@ public class SyndElement { protected Namespace namespace; public SyndElement(String name, Namespace namespace) { - super(); this.name = name; + this.namespace = namespace; } public Namespace getNamespace() { - return null; + return namespace; } public String getName() { diff --git a/src/de/podfetcher/syndication/namespace/atom/NSAtom.java b/src/de/podfetcher/syndication/namespace/atom/NSAtom.java index 803228cc5..7ca23572e 100644 --- a/src/de/podfetcher/syndication/namespace/atom/NSAtom.java +++ b/src/de/podfetcher/syndication/namespace/atom/NSAtom.java @@ -9,24 +9,29 @@ import de.podfetcher.syndication.namespace.Namespace; public class NSAtom extends Namespace { public static final String NSTAG = "atom"; public static final String NSURI = "http://www.w3.org/2005/Atom"; - + private static final String TITLE = "title"; private static final String LINK = "link"; private static final String UPDATED = "updated"; private static final String AUTHOR = "author"; - + @Override - public void handleElement(String localName, HandlerState state, Attributes attributes) { + public void handleElementStart(String localName, HandlerState state, + Attributes attributes) { if (localName.equals(TITLE)) { - + } + } + + @Override + public void handleCharacters(HandlerState state, char[] ch, int start, + int length) { } @Override - public void handleCharacters(String localName, Feed feed, char[] ch, - int start, int length) { - + public void handleElementEnd(String localName, HandlerState state) { + // TODO Auto-generated method stub } } diff --git a/src/de/podfetcher/syndication/namespace/rss20/NSRSS20.java b/src/de/podfetcher/syndication/namespace/rss20/NSRSS20.java new file mode 100644 index 000000000..c536d216c --- /dev/null +++ b/src/de/podfetcher/syndication/namespace/rss20/NSRSS20.java @@ -0,0 +1,105 @@ +package de.podfetcher.syndication.namespace.rss20; + +import java.util.ArrayList; + +import de.podfetcher.feed.Feed; +import de.podfetcher.feed.FeedImage; +import de.podfetcher.feed.FeedItem; +import de.podfetcher.feed.FeedMedia; +import de.podfetcher.syndication.handler.HandlerState; +import de.podfetcher.syndication.handler.SyndHandler; +import de.podfetcher.syndication.namespace.Namespace; +import de.podfetcher.syndication.namespace.SyndElement; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +/** + * SAX-Parser for reading RSS-Feeds + * + * @author daniel + * + */ +public class NSRSS20 extends Namespace { + public static final String NSTAG = "rss"; + public static final String NSURI = ""; + + public final static String CHANNEL = "channel"; + public final static String ITEM = "item"; + public final static String TITLE = "title"; + public final static String LINK = "link"; + public final static String DESCR = "description"; + public final static String PUBDATE = "pubDate"; + public final static String ENCLOSURE = "enclosure"; + public final static String IMAGE = "image"; + public final static String URL = "url"; + + public final static String ENC_URL = "url"; + public final static String ENC_LEN = "length"; + public final static String ENC_TYPE = "type"; + + @Override + public void handleElementStart(String localName, HandlerState state, + Attributes attributes) { + if (localName.equals(ITEM)) { + state.setCurrentItem(new FeedItem()); + state.getFeed().getItems().add(state.getCurrentItem()); + state.getCurrentItem().setFeed(state.getFeed()); + + } else if (localName.equals(ENCLOSURE)) { + state.getCurrentItem() + .setMedia(new FeedMedia(state.getCurrentItem(), attributes + .getValue(ENC_URL), Long.parseLong(attributes + .getValue(ENC_LEN)), attributes.getValue(ENC_TYPE))); + } else if (localName.equals(IMAGE)) { + state.getFeed().setImage(new FeedImage()); + } + } + + @Override + public void handleCharacters(HandlerState state, char[] ch, int start, + int length) { + if (state.getTagstack().size() >= 2) { + String content = new String(ch, start, length); + SyndElement topElement = state.getTagstack().pop(); + String top = topElement.getName(); + String second = state.getTagstack().peek().getName(); + state.getTagstack().push(topElement); + if (top.equals(TITLE)) { + if (second.equals(ITEM)) { + state.getCurrentItem().setTitle(content); + } else if (second.equals(CHANNEL)) { + state.getFeed().setTitle(content); + } else if (second.equals(IMAGE)) { + state.getFeed().getImage().setTitle(IMAGE); + } + } else if (top.equals(DESCR)) { + if (second.equals(CHANNEL)) { + state.getFeed().setDescription(content); + } else if (second.equals(ITEM)) { + state.getFeed().setDescription(content); + } + } else if (top.equals(LINK)) { + if (second.equals(CHANNEL)) { + state.getFeed().setLink(content); + } else if (second.equals(ITEM)) { + state.getCurrentItem().setLink(content); + } + } else if (top.equals(PUBDATE) && second.equals(ITEM)) { + state.getCurrentItem().setPubDate(content); + } else if (top.equals(URL) && second.equals(IMAGE)) { + state.getFeed().getImage().setDownload_url(content); + } + } + + } + + @Override + public void handleElementEnd(String localName, HandlerState state) { + if (localName.equals(ITEM)) { + state.setCurrentItem(null); + } + } + +} |