package mir.rss;
import java.io.InputStream;
-import java.net.URL;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Vector;
-import mir.util.DateTimeFunctions;
-import mir.util.XMLReader;
-
-/**
- *
- * <p>Title: </p>
- * <p>Description: </p>
- * <p>Copyright: Copyright (c) 2003</p>
- * <p>Company: </p>
- * @author not attributable
- * @version 1.0
- */
+import mir.util.DateTimeRoutines;
+import mir.util.HTTPClientHelper;
+import mir.util.xml.XMLParserEngine;
+import mir.util.xml.XMLParserExc;
+import mir.util.xml.XMLParserFailure;
public class RSSReader {
public static final String RDF_NAMESPACE_URI = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
public static final String CONTENT_NAMESPACE_URI = "http://purl.org/rss/1.0/modules/content/";
// ML: to be localized:
- public static final String V2V_NAMESPACE_URI = "http://v2v.indymedia.de/rss/";
+ public static final String V2V_NAMESPACE_URI = "http://v2v.cc/rss/";
- private static final XMLReader.XMLName RDF_ABOUT_PARAMETER = new XMLReader.XMLName(RDF_NAMESPACE_URI, "about");
- private static final XMLReader.XMLName RDF_SEQUENCE_TAG = new XMLReader.XMLName(RDF_NAMESPACE_URI, "Seq");
- private static final XMLReader.XMLName RDF_BAG_PARAMETER = new XMLReader.XMLName(RDF_NAMESPACE_URI, "Bag");
+ private static final mir.util.xml.XMLName RDF_ABOUT_PARAMETER = new mir.util.xml.XMLName(RDF_NAMESPACE_URI, "about");
+ private static final mir.util.xml.XMLName RDF_SEQUENCE_TAG = new mir.util.xml.XMLName(RDF_NAMESPACE_URI, "Seq");
+ private static final mir.util.xml.XMLName RDF_BAG_PARAMETER = new mir.util.xml.XMLName(RDF_NAMESPACE_URI, "Bag");
- private static final XMLReader.XMLName RSS_CHANNEL_TAG = new XMLReader.XMLName(RSS_1_0_NAMESPACE_URI, "channel");
- private static final XMLReader.XMLName RSS_ITEM_TAG = new XMLReader.XMLName(RSS_1_0_NAMESPACE_URI, "item");
- private static final XMLReader.XMLName RSS_ITEMS_TAG = new XMLReader.XMLName(RSS_1_0_NAMESPACE_URI, "items");
+ private static final mir.util.xml.XMLName RSS_CHANNEL_TAG = new mir.util.xml.XMLName(RSS_1_0_NAMESPACE_URI, "channel");
+ private static final mir.util.xml.XMLName RSS_ITEM_TAG = new mir.util.xml.XMLName(RSS_1_0_NAMESPACE_URI, "item");
+ private static final mir.util.xml.XMLName RSS_ITEMS_TAG = new mir.util.xml.XMLName(RSS_1_0_NAMESPACE_URI, "items");
private List modules;
private Map namespaceURItoModule;
private Map moduleToPrefix;
public RSSReader() {
- modules = new Vector();
+ modules = new ArrayList();
namespaceURItoModule = new HashMap();
moduleToPrefix = new HashMap();
public RSSData parseInputStream(InputStream aStream) throws RSSExc, RSSFailure {
try {
- XMLReader xmlReader = new XMLReader(true);
RSSData result = new RSSData();
- xmlReader.parseInputStream(aStream, new RootSectionHandler(result));
+ XMLParserEngine.getInstance().parse("xml", aStream, new RootSectionHandler(result));
+
+ return result;
+ }
+ catch (Throwable t) {
+ throw new RSSFailure(t);
+ }
+ }
+
+ public RSSData parseInputStream(InputStream aStream, String anEncoding) throws RSSExc, RSSFailure {
+ try {
+ RSSData result = new RSSData();
+ XMLParserEngine.getInstance().parse("xml", aStream, anEncoding, new RootSectionHandler(result));
return result;
}
public RSSData parseUrl(String anUrl) throws RSSExc, RSSFailure {
try {
- InputStream inputStream = (InputStream) new URL(anUrl).getContent(new Class[] {InputStream.class});
+ HTTPClientHelper httpClientHelper = new HTTPClientHelper();
+ InputStream inputStream = httpClientHelper.getUrl(anUrl);
+ if (inputStream==null)
+ throw new RSSExc("RSSChannel.parseUrl: Can't get url content");
+ RSSData theRSSData = parseInputStream(inputStream);
+ httpClientHelper.releaseHTTPConnection();
+ return theRSSData;
+ }
+ catch (Throwable t) {
+ throw new RSSFailure(t);
+ }
+ }
+
+ public RSSData parseUrl(String anUrl, String anEncoding) throws RSSExc, RSSFailure {
+ try {
+ HTTPClientHelper httpClientHelper = new HTTPClientHelper();
+ InputStream inputStream = httpClientHelper.getUrl(anUrl);
if (inputStream==null)
throw new RSSExc("RSSChannel.parseUrl: Can't get url content");
- return parseInputStream(inputStream);
+ RSSData theRSSData = parseInputStream(inputStream, anEncoding);
+ httpClientHelper.releaseHTTPConnection();
+ return theRSSData;
}
catch (Throwable t) {
throw new RSSFailure(t);
}
}
- private class RootSectionHandler extends XMLReader.AbstractSectionHandler {
+ private class RootSectionHandler extends mir.util.xml.AbstractSectionHandler {
private RSSData data;
public RootSectionHandler(RSSData aData) {
data = aData;
}
- public XMLReader.SectionHandler startElement(XMLReader.XMLName aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
+ public mir.util.xml.SectionHandler startElement(mir.util.xml.XMLName aTag, Map anAttributes) throws XMLParserExc {
if (aTag.getLocalName().equals("RDF")) {
return new RDFSectionHandler(data);
}
- else
- throw new XMLReader.XMLReaderFailure(new RSSExc("'RDF' tag expected"));
- };
+ throw new XMLParserFailure(new RSSExc("'RDF' tag expected"));
+ }
- public void endElement(XMLReader.SectionHandler aHandler) throws XMLReader.XMLReaderExc {
- };
+ public void endElement(mir.util.xml.SectionHandler aHandler) throws XMLParserExc {
+ }
- public void characters(String aCharacters) throws XMLReader.XMLReaderExc {
+ public void characters(String aCharacters) throws XMLParserExc {
if (aCharacters.trim().length()>0)
- throw new XMLReader.XMLReaderExc("No character data allowed here");
- };
+ throw new XMLParserExc("No character data allowed here");
+ }
- public void finishSection() throws XMLReader.XMLReaderExc {
- };
+ public void finishSection() throws XMLParserExc {
+ }
}
- private class RDFSectionHandler extends XMLReader.AbstractSectionHandler {
+ private class RDFSectionHandler extends mir.util.xml.AbstractSectionHandler {
private RSSData data;
data = aData;
}
- public XMLReader.SectionHandler startElement(XMLReader.XMLName aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
+ public mir.util.xml.SectionHandler startElement(mir.util.xml.XMLName aTag, Map anAttributes) throws XMLParserExc {
String identifier = (String) anAttributes.get(RDF_ABOUT_PARAMETER);
String rdfClass = makeQualifiedName(aTag);
return new RDFResourceSectionHandler(rdfClass, identifier);
- };
+ }
- public void endElement(XMLReader.SectionHandler aHandler) throws XMLReader.XMLReaderExc {
+ public void endElement(mir.util.xml.SectionHandler aHandler) throws XMLParserExc {
if (aHandler instanceof RDFResourceSectionHandler) {
data.addResource(((RDFResourceSectionHandler) aHandler).getResource());
}
- };
+ }
- public void characters(String aCharacters) throws XMLReader.XMLReaderExc {
+ public void characters(String aCharacters) throws XMLParserExc {
if (aCharacters.trim().length()>0)
- throw new XMLReader.XMLReaderExc("No character data allowed here");
- };
+ throw new XMLParserExc("No character data allowed here");
+ }
- public void finishSection() throws XMLReader.XMLReaderExc {
- };
+ public void finishSection() throws XMLParserExc {
+ }
}
- private XMLReader.SectionHandler makePropertyValueSectionHandler(XMLReader.XMLName aTag, Map anAttributes) {
+ private mir.util.xml.SectionHandler makePropertyValueSectionHandler(mir.util.xml.XMLName aTag, Map anAttributes) {
RSSModule module = (RSSModule) namespaceURItoModule.get(aTag.getNamespaceURI());
if (module!=null) {
return new FlexiblePropertyValueSectionHandler();
}
- private void usePropertyValueSectionHandler(RDFResource aResource, PropertyValueSectionHandler aHandler, XMLReader.XMLName aTag) {
+ private void usePropertyValueSectionHandler(RDFResource aResource, PropertyValueSectionHandler aHandler, mir.util.xml.XMLName aTag) {
RSSModule module = (RSSModule) namespaceURItoModule.get(aTag.getNamespaceURI());
if (module!=null) {
List value = (List) aResource.get(makeQualifiedName(aTag));
if (value==null) {
- value = new Vector();
+ value = new ArrayList();
aResource.set(makeQualifiedName(aTag), value);
}
aResource.set(makeQualifiedName(aTag), aHandler.getValue());
}
- private String makeQualifiedName(XMLReader.XMLName aName) {
+ private String makeQualifiedName(mir.util.xml.XMLName aName) {
String result=aName.getLocalName();
RSSModule module = (RSSModule) namespaceURItoModule.get(aName.getNamespaceURI());
if (module!=null) {
return result;
}
- private class RDFResourceSectionHandler extends XMLReader.AbstractSectionHandler {
+ private class RDFResourceSectionHandler extends mir.util.xml.AbstractSectionHandler {
private String image;
- private XMLReader.XMLName currentTag;
+ private mir.util.xml.XMLName currentTag;
private RDFResource resource;
public RDFResourceSectionHandler(String anRDFClass, String anIdentifier) {
resource = new RDFResource(anRDFClass, anIdentifier);
}
- public XMLReader.SectionHandler startElement(XMLReader.XMLName aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
+ public mir.util.xml.SectionHandler startElement(mir.util.xml.XMLName aTag, Map anAttributes) throws XMLParserExc {
currentTag = aTag;
return makePropertyValueSectionHandler(aTag, anAttributes);
- };
+ }
- public void endElement(XMLReader.SectionHandler aHandler) throws XMLReader.XMLReaderExc {
+ public void endElement(mir.util.xml.SectionHandler aHandler) throws XMLParserExc {
if (aHandler instanceof PropertyValueSectionHandler) {
usePropertyValueSectionHandler(resource, (PropertyValueSectionHandler) aHandler, currentTag);
-// resource.set(makeQualifiedName(currentTag), ( (PropertyValueSectionHandler) aHandler).getValue());
+// resource.set(makeQualifiedName(currentTag), ( (PropertyValueSectionHandler) aHandler).getFieldValue());
}
- };
+ }
- public void characters(String aCharacters) throws XMLReader.XMLReaderExc {
+ public void characters(String aCharacters) throws XMLParserExc {
if (aCharacters.trim().length()>0)
- throw new XMLReader.XMLReaderExc("No character data allowed here");
- };
+ throw new XMLParserExc("No character data allowed here");
+ }
- public void finishSection() throws XMLReader.XMLReaderExc {
- };
+ public void finishSection() throws XMLParserExc {
+ }
public RDFResource getResource() {
- if (resource.getIdentifier()==null || resource.getIdentifier().length()==0) {
+ if ((resource.getIdentifier()==null || resource.getIdentifier().length()==0) && resource.get("rss:link")!=null) {
resource.setIdentifier(resource.get("rss:link").toString());
}
}
}
- private abstract class PropertyValueSectionHandler extends XMLReader.AbstractSectionHandler {
+ private abstract class PropertyValueSectionHandler extends mir.util.xml.AbstractSectionHandler {
public abstract Object getValue();
}
structuredData=null;
}
- public XMLReader.SectionHandler startElement(String aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
+ public mir.util.xml.SectionHandler startElement(String aTag, Map anAttributes) throws XMLParserExc {
if (aTag.equals(RDF_SEQUENCE_TAG))
return new RDFSequenceSectionHandler();
else
return new DiscardingSectionHandler();
- };
+ }
- public void endElement(XMLReader.SectionHandler aHandler) throws XMLReader.XMLReaderExc {
+ public void endElement(mir.util.xml.SectionHandler aHandler) throws XMLParserExc {
if (aHandler instanceof RDFSequenceSectionHandler) {
structuredData= ((RDFSequenceSectionHandler) aHandler).getItems();
}
- };
+ }
- public void characters(String aCharacters) throws XMLReader.XMLReaderExc {
+ public void characters(String aCharacters) throws XMLParserExc {
stringData.append(aCharacters);
- };
+ }
- public void finishSection() throws XMLReader.XMLReaderExc {
- };
+ public void finishSection() throws XMLParserExc {
+ }
public String getData() {
return stringData.toString();
public Object getValue() {
if (structuredData==null)
return stringData.toString();
- else
- return structuredData;
+ return structuredData;
}
}
private List items;
public RDFCollectionSectionHandler() {
- items = new Vector();
+ items = new ArrayList();
}
- public XMLReader.SectionHandler startElement(String aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
+ public mir.util.xml.SectionHandler startElement(String aTag, Map anAttributes) throws XMLParserExc {
if (aTag.equals(RDF_SEQUENCE_TAG))
return new RDFSequenceSectionHandler();
else
return new DiscardingSectionHandler();
- };
+ }
- public void endElement(XMLReader.SectionHandler aHandler) throws XMLReader.XMLReaderExc {
+ public void endElement(mir.util.xml.SectionHandler aHandler) throws XMLParserExc {
if (aHandler instanceof RDFSequenceSectionHandler) {
items.addAll(((RDFSequenceSectionHandler) aHandler).getItems());
}
- };
+ }
- public void characters(String aCharacters) throws XMLReader.XMLReaderExc {
+ public void characters(String aCharacters) throws XMLParserExc {
if (aCharacters.trim().length()>0)
- throw new XMLReader.XMLReaderExc("No character data allowed here");
- };
+ throw new XMLParserExc("No character data allowed here");
+ }
- public void finishSection() throws XMLReader.XMLReaderExc {
- };
+ public void finishSection() throws XMLParserExc {
+ }
public List getItems() {
return items;
data = new StringBuffer();
}
- public XMLReader.SectionHandler startElement(String aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
- throw new XMLReader.XMLReaderFailure(new RSSExc("No subtags allowed here"));
- };
+ public mir.util.xml.SectionHandler startElement(String aTag, Map anAttributes) throws XMLParserExc {
+ throw new XMLParserFailure(new RSSExc("No subtags allowed here"));
+ }
- public void endElement(XMLReader.SectionHandler aHandler) throws XMLReader.XMLReaderExc {
- };
+ public void endElement(mir.util.xml.SectionHandler aHandler) throws XMLParserExc {
+ }
- public void characters(String aCharacters) throws XMLReader.XMLReaderExc {
+ public void characters(String aCharacters) throws XMLParserExc {
data.append(aCharacters);
- };
+ }
- public void finishSection() throws XMLReader.XMLReaderExc {
- };
+ public void finishSection() throws XMLParserExc {
+ }
public String getData() {
return data.toString();
data = new StringBuffer();
}
- public XMLReader.SectionHandler startElement(String aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
- throw new XMLReader.XMLReaderFailure(new RSSExc("No subtags allowed here"));
- };
+ public mir.util.xml.SectionHandler startElement(String aTag, Map anAttributes) throws XMLParserExc {
+ throw new XMLParserFailure(new RSSExc("No subtags allowed here"));
+ }
- public void endElement(XMLReader.SectionHandler aHandler) throws XMLReader.XMLReaderExc {
- };
+ public void endElement(mir.util.xml.SectionHandler aHandler) throws XMLParserExc {
+ }
- public void characters(String aCharacters) throws XMLReader.XMLReaderExc {
+ public void characters(String aCharacters) throws XMLParserExc {
data.append(aCharacters);
- };
-
- public void finishSection() throws XMLReader.XMLReaderExc {
- };
+ }
- private final static String SPACE = "[\t\n\r ]*";
- private final static String NUMBER = "[0-9]*";
- private final static String SIGN = "[-+]";
+ public void finishSection() throws XMLParserExc {
+ }
public Object getValue() {
try {
String expression = data.toString().trim();
- return DateTimeFunctions.parseW3CDTFString(expression);
+ return DateTimeRoutines.parseW3CDTFString(expression);
}
catch (Throwable t) {
}
- private class RDFSequenceSectionHandler extends XMLReader.AbstractSectionHandler {
+ private class RDFSequenceSectionHandler extends mir.util.xml.AbstractSectionHandler {
private List items;
public RDFSequenceSectionHandler() {
- items = new Vector();
+ items = new ArrayList();
}
- public XMLReader.SectionHandler startElement(String aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
+ public mir.util.xml.SectionHandler startElement(String aTag, Map anAttributes) throws XMLParserExc {
if (aTag.equals("rdf:li")) {
String item = (String) anAttributes.get("rdf:resource");
}
return new DiscardingSectionHandler();
- };
+ }
- public void endElement(XMLReader.SectionHandler aHandler) throws XMLReader.XMLReaderExc {
- };
+ public void endElement(mir.util.xml.SectionHandler aHandler) throws XMLParserExc {
+ }
- public void characters(String aCharacters) throws XMLReader.XMLReaderExc {
- };
+ public void characters(String aCharacters) throws XMLParserExc {
+ }
- public void finishSection() throws XMLReader.XMLReaderExc {
- };
+ public void finishSection() throws XMLParserExc {
+ }
public List getItems() {
return items;
return data;
}
- public XMLReader.SectionHandler startElement(String aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
+ public mir.util.xml.SectionHandler startElement(String aTag, Map anAttributes) throws XMLParserExc {
tag=aTag;
data.append("<"+tag+">");
return new RDFLiteralSectionHandler();
- };
+ }
- public void endElement(XMLReader.SectionHandler aHandler) throws XMLReader.XMLReaderExc {
+ public void endElement(mir.util.xml.SectionHandler aHandler) throws XMLParserExc {
data.append(((RDFLiteralSectionHandler) aHandler).getData());
data.append("</"+tag+">");
- };
+ }
- public void characters(String aCharacters) throws XMLReader.XMLReaderExc {
+ public void characters(String aCharacters) throws XMLParserExc {
data.append(aCharacters);
- };
+ }
- public void finishSection() throws XMLReader.XMLReaderExc {
- };
+ public void finishSection() throws XMLParserExc {
+ }
public Object getValue() {
return data.toString();
}
}
- private class DiscardingSectionHandler extends XMLReader.AbstractSectionHandler {
- public XMLReader.SectionHandler startElement(String aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
+ private class DiscardingSectionHandler extends mir.util.xml.AbstractSectionHandler {
+ public mir.util.xml.SectionHandler startElement(String aTag, Map anAttributes) throws XMLParserExc {
return this;
- };
+ }
- public void endElement(XMLReader.SectionHandler aHandler) throws XMLReader.XMLReaderExc {
- };
+ public void endElement(mir.util.xml.SectionHandler aHandler) throws XMLParserExc {
+ }
- public void characters(String aCharacters) throws XMLReader.XMLReaderExc {
- };
+ public void characters(String aCharacters) throws XMLParserExc {
+ }
- public void finishSection() throws XMLReader.XMLReaderExc {
- };
+ public void finishSection() throws XMLParserExc {
+ }
}
}