diff --git a/src/com/studentersamfundet/app/DataHandler.java b/src/com/studentersamfundet/app/DataHandler.java index b80e80d..76d2a40 100644 --- a/src/com/studentersamfundet/app/DataHandler.java +++ b/src/com/studentersamfundet/app/DataHandler.java @@ -7,7 +7,8 @@ import java.util.TreeSet; public class DataHandler { private List events = new LinkedList(); - private Set categories = new TreeSet(); + private List news = new LinkedList(); + private Set eventCategories = new TreeSet(); public void insertEvent(String id, String title, String description, String date, String location, String text, String category) { int intId = Integer.parseInt(id); @@ -16,7 +17,12 @@ public class DataHandler { Event e = new Event(intId, title, description, date, location, text, category); events.add(e); - categories.add(category); + eventCategories.add(category); + } + + public void insertNews(String title, String description, String content, String link, String pubDate) { + News n = new News(title, description, content, link, pubDate); + this.news.add(n); } public Event getEvent(int id) { @@ -41,12 +47,16 @@ public class DataHandler { return sorted.toArray(new Event[sorted.size()]); } + public News[] populateNewsList() { + return this.news.toArray(new News[this.news.size()]); + } + public String[] getEventCategories() { - String[] result = new String[categories.size() + 1]; + String[] result = new String[eventCategories.size() + 1]; result[0] = Event.ALL; int counter = 1; - for (String c : categories) { + for (String c : eventCategories) { result[counter++] = c; } diff --git a/src/com/studentersamfundet/app/News.java b/src/com/studentersamfundet/app/News.java new file mode 100644 index 0000000..68f16b6 --- /dev/null +++ b/src/com/studentersamfundet/app/News.java @@ -0,0 +1,30 @@ +package com.studentersamfundet.app; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import android.net.Uri; + +public class News { + public String title; + public String description; + public String content; + public Uri link; + public Date pubDate; + + private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public News(String title, String description, String content, String link, String pubDate) { + this.title = title.trim(); + this.description = description.trim(); + this.content = content.trim(); + this.link = Uri.parse(link.trim()); + + try { + this.pubDate = sdf.parse(pubDate.trim()); + } catch (ParseException e) { + this.pubDate = null; + } + } +} diff --git a/src/com/studentersamfundet/app/RSSParserNews.java b/src/com/studentersamfundet/app/RSSParserNews.java index d6b479a..6bbdc2c 100644 --- a/src/com/studentersamfundet/app/RSSParserNews.java +++ b/src/com/studentersamfundet/app/RSSParserNews.java @@ -1,5 +1,70 @@ package com.studentersamfundet.app; -public class RSSParserNews { +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +public class RSSParserNews { + private final DataHandler dh; + + public RSSParserNews() { + this(null); + } + + public RSSParserNews(DataHandler dh) { + if (dh == null) { + this.dh = new DataHandler(); + } else { + this.dh = dh; + } + } + + public DataHandler parse(NodeList itemNodes) { + String title = ""; + String description = ""; + String link = ""; + String content = ""; + String pubDate = ""; + // String pictureUrl = ""; Necessary? + + for (int i = 0; i < itemNodes.getLength(); i++) { + Node itemNode = itemNodes.item(i); + + if (itemNode.getNodeType() == Node.ELEMENT_NODE) { + // Convert the Node into an Element. + Element itemElement = (Element) itemNode; + + // Get all elements under the element. + NodeList titleNodes = (itemElement).getElementsByTagName("title"); + NodeList descriptionNodes = (itemElement).getElementsByTagName("description"); + NodeList linkNodes = (itemElement).getElementsByTagName("link"); + NodeList textNodes = (itemElement).getElementsByTagName("content"); + NodeList dateNodes = (itemElement).getElementsByTagName("pubDate"); + + // Convert a Node into an Element. + Node titleElement = titleNodes.item(0); + Node descriptionElement = descriptionNodes.item(0); + Node linkElement = linkNodes.item(0); + Node textElement = textNodes.item(0); + Node dateElement = dateNodes.item(0); + + // Get all the child nodes. + NodeList titleTextNodes = titleElement.getChildNodes(); + NodeList descriptionTextNodes = descriptionElement.getChildNodes(); + NodeList linkTextNodes = linkElement.getChildNodes(); + NodeList textTextNodes = textElement.getChildNodes(); + NodeList dateTextNodes = dateElement.getChildNodes(); + + // Retrieve the text. + title = titleTextNodes.item(0).getNodeValue(); // mandatory + if (descriptionTextNodes.getLength() > 0) description = descriptionTextNodes.item(0).getNodeValue(); + if (linkTextNodes.getLength() > 0) link = linkTextNodes.item(0).getNodeValue(); + if (textTextNodes.getLength() > 0) content = textTextNodes.item(0).getNodeValue(); + if (dateTextNodes.getLength() > 0) pubDate = dateTextNodes.item(0).getNodeValue(); + + dh.insertNews(title, description, content, link, pubDate); + } + } + return dh; + } } diff --git a/src/com/studentersamfundet/app/RSSParserProgram.java b/src/com/studentersamfundet/app/RSSParserProgram.java index 34b5a80..ed07c83 100644 --- a/src/com/studentersamfundet/app/RSSParserProgram.java +++ b/src/com/studentersamfundet/app/RSSParserProgram.java @@ -5,68 +5,76 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class RSSParserProgram { - private static DataHandler dh; - - public RSSParserProgram() { - dh = new DataHandler(); - } + private final DataHandler dh; - public DataHandler parse(NodeList itemNodes) { - String id = ""; - String title = ""; - String description = ""; - String date = ""; - String location = ""; - String text = ""; - String category = ""; - // String pictureUrl = ""; Necessary? - - for (int i = 0; i < itemNodes.getLength(); i++) { - Node itemNode = itemNodes.item(i); - - if (itemNode.getNodeType() == Node.ELEMENT_NODE) { - // Convert the Node into an Element. - Element itemElement = (Element) itemNode; - - // Get all elements under the element. - NodeList idNodes = (itemElement).getElementsByTagName("id"); - NodeList titleNodes = (itemElement).getElementsByTagName("title"); - NodeList descriptionNodes = (itemElement).getElementsByTagName("description"); - NodeList dateNodes = (itemElement).getElementsByTagName("date"); - NodeList locationNodes = (itemElement).getElementsByTagName("location"); - NodeList textNodes = (itemElement).getElementsByTagName("content"); - NodeList categoryNodes = (itemElement).getElementsByTagName("category"); - - // Convert a Node into an Element. - Node idElement = idNodes.item(0); - Node titleElement = titleNodes.item(0); - Node descriptionElement = descriptionNodes.item(0); - Node dateElement = dateNodes.item(0); - Node locationElement = locationNodes.item(0); - Node textElement = textNodes.item(0); - Node categoryElement = categoryNodes.item(0); - - // Get all the child nodes. - NodeList idTextNodes = idElement.getChildNodes(); - NodeList titleTextNodes = titleElement.getChildNodes(); - NodeList descriptionTextNodes = descriptionElement.getChildNodes(); - NodeList dateTextNodes = dateElement.getChildNodes(); - NodeList locationTextNodes = locationElement.getChildNodes(); - NodeList textTextNodes = textElement.getChildNodes(); - NodeList categoryTextNodes = categoryElement.getChildNodes(); - - // Retrieve the text. - id = idTextNodes.item(0).getNodeValue(); // mandatory - title = titleTextNodes.item(0).getNodeValue(); // mandatory - if (descriptionTextNodes.getLength() > 0) description = descriptionTextNodes.item(0).getNodeValue(); - if (dateTextNodes.getLength() > 0) date = dateTextNodes.item(0).getNodeValue(); - if (locationTextNodes.getLength() > 0) location = locationTextNodes.item(0).getNodeValue(); - if (textTextNodes.getLength() > 0) text = textTextNodes.item(0).getNodeValue(); - if (categoryTextNodes.getLength() > 0) category = categoryTextNodes.item(0).getNodeValue(); - - dh.insertEvent(id, title, description, date, location, text, category); - } - } - return dh; + public RSSParserProgram() { + this(null); + } + + public RSSParserProgram(DataHandler dh) { + if (dh == null) { + this.dh = new DataHandler(); + } else { + this.dh = dh; } + } + + public DataHandler parse(NodeList itemNodes) { + String id = ""; + String title = ""; + String description = ""; + String date = ""; + String location = ""; + String text = ""; + String category = ""; + // String pictureUrl = ""; Necessary? + + for (int i = 0; i < itemNodes.getLength(); i++) { + Node itemNode = itemNodes.item(i); + + if (itemNode.getNodeType() == Node.ELEMENT_NODE) { + // Convert the Node into an Element. + Element itemElement = (Element) itemNode; + + // Get all elements under the element. + NodeList idNodes = (itemElement).getElementsByTagName("id"); + NodeList titleNodes = (itemElement).getElementsByTagName("title"); + NodeList descriptionNodes = (itemElement).getElementsByTagName("description"); + NodeList dateNodes = (itemElement).getElementsByTagName("date"); + NodeList locationNodes = (itemElement).getElementsByTagName("location"); + NodeList textNodes = (itemElement).getElementsByTagName("content"); + NodeList categoryNodes = (itemElement).getElementsByTagName("category"); + + // Convert a Node into an Element. + Node idElement = idNodes.item(0); + Node titleElement = titleNodes.item(0); + Node descriptionElement = descriptionNodes.item(0); + Node dateElement = dateNodes.item(0); + Node locationElement = locationNodes.item(0); + Node textElement = textNodes.item(0); + Node categoryElement = categoryNodes.item(0); + + // Get all the child nodes. + NodeList idTextNodes = idElement.getChildNodes(); + NodeList titleTextNodes = titleElement.getChildNodes(); + NodeList descriptionTextNodes = descriptionElement.getChildNodes(); + NodeList dateTextNodes = dateElement.getChildNodes(); + NodeList locationTextNodes = locationElement.getChildNodes(); + NodeList textTextNodes = textElement.getChildNodes(); + NodeList categoryTextNodes = categoryElement.getChildNodes(); + + // Retrieve the text. + id = idTextNodes.item(0).getNodeValue(); // mandatory + title = titleTextNodes.item(0).getNodeValue(); // mandatory + if (descriptionTextNodes.getLength() > 0) description = descriptionTextNodes.item(0).getNodeValue(); + if (dateTextNodes.getLength() > 0) date = dateTextNodes.item(0).getNodeValue(); + if (locationTextNodes.getLength() > 0) location = locationTextNodes.item(0).getNodeValue(); + if (textTextNodes.getLength() > 0) text = textTextNodes.item(0).getNodeValue(); + if (categoryTextNodes.getLength() > 0) category = categoryTextNodes.item(0).getNodeValue(); + + dh.insertEvent(id, title, description, date, location, text, category); + } + } + return dh; + } }