summaryrefslogtreecommitdiff
path: root/src/de/podfetcher/syndication/namespace
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/podfetcher/syndication/namespace')
-rw-r--r--src/de/podfetcher/syndication/namespace/Namespace.java13
-rw-r--r--src/de/podfetcher/syndication/namespace/SyndElement.java4
-rw-r--r--src/de/podfetcher/syndication/namespace/atom/NSAtom.java19
-rw-r--r--src/de/podfetcher/syndication/namespace/rss20/NSRSS20.java105
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);
+ }
+ }
+
+}