/*
- * Copyright (C) 2001, 2002 The Mir-coders group
+ * Copyright (C) 2001-2006 The Mir-coders group
*
* This file is part of Mir.
*
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* In addition, as a special exception, The Mir-coders gives permission to link
- * the code of this program with the com.oreilly.servlet library, any library
- * licensed under the Apache Software License, The Sun (tm) Java Advanced
- * Imaging library (JAI), The Sun JIMI library (or with modified versions of
- * the above that use the same license as the above), and distribute linked
- * combinations including the two. You must obey the GNU General Public
- * License in all respects for all of the code used other than the above
- * mentioned libraries. If you modify this file, you may extend this exception
- * to your version of the file, but you are not obligated to do so. If you do
- * not wish to do so, delete this exception statement from your version.
+ * the code of this program with any library licensed under the Apache Software License,
+ * and distribute linked combinations including the two. You must obey the
+ * GNU General Public License in all respects for all of the code used other than
+ * the above mentioned libraries. If you modify this file, you may extend this
+ * exception to your version of the file, but you are not obligated to do so.
+ * If you do not wish to do so, delete this exception statement from your version.
*/
-
package mir.rss;
+import mir.util.DateTimeRoutines;
+import mir.util.HTTPClientHelper;
+import mir.util.xml.XMLParserEngine;
+import mir.util.xml.XMLParserExc;
+import mir.util.xml.XMLParserFailure;
+
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.XMLReader;
-import mir.util.XMLReaderTool;
-
-/**
- *
- * <p>Title: </p>
- * <p>Description: </p>
- * <p>Copyright: Copyright (c) 2003</p>
- * <p>Company: </p>
- * @author not attributable
- * @version 1.0
- */
public class RSSReader {
+ public static final String RDF_NAMESPACE_URI = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+ public static final String RSS_1_0_NAMESPACE_URI = "http://purl.org/rss/1.0/";
+ public static final String RSS_0_9_NAMESPACE_URI = "http://my.netscape.com/rdf/simple/0.9/";
+ public static final String DUBLINCORE_NAMESPACE_URI = "http://purl.org/dc/elements/1.1/";
+ public static final String EVENT_NAMESPACE_URI = "http://purl.org/rss/1.0/modules/event/";
+ public static final String TAXONOMY_NAMESPACE_URI = "http://web.resource.org/rss/1.0/modules/taxonomy/";
+ public static final String DUBLINCORE_TERMS_NAMESPACE_URI = "http://purl.org/dc/terms/";
+ 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.cc/rss/";
+
+ 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 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 ArrayList();
+ namespaceURItoModule = new HashMap();
+ moduleToPrefix = new HashMap();
+
+ registerModule(new RSSBasicModule(RDF_NAMESPACE_URI, "RDF module"), "rdf");
+ registerModule(new RSSBasicModule(RSS_1_0_NAMESPACE_URI, "RSS 1.0 module"), "rss");
+ registerModule(new RSSBasicModule(RSS_0_9_NAMESPACE_URI, "RSS 0.9 module"), "rss");
+
+ RSSBasicModule dcModule = new RSSBasicModule(DUBLINCORE_NAMESPACE_URI, "RSS Dublin Core 1.1");
+ dcModule.addProperty("date", RSSModule.W3CDTF_PROPERTY_TYPE);
+ registerModule(dcModule, "dc");
+
+ RSSBasicModule dcTermsModule = new RSSBasicModule(DUBLINCORE_TERMS_NAMESPACE_URI, "RSS Qualified Dublin core");
+ dcTermsModule.addProperty("created", RSSModule.W3CDTF_PROPERTY_TYPE);
+ dcTermsModule.addProperty("issued", RSSModule.W3CDTF_PROPERTY_TYPE);
+ dcTermsModule.addProperty("modified", RSSModule.W3CDTF_PROPERTY_TYPE);
+ dcTermsModule.addProperty("dateAccepted", RSSModule.W3CDTF_PROPERTY_TYPE);
+ dcTermsModule.addProperty("dateCopyrighted", RSSModule.W3CDTF_PROPERTY_TYPE);
+ dcTermsModule.addProperty("dateSubmitted", RSSModule.W3CDTF_PROPERTY_TYPE);
+ registerModule(dcTermsModule, "dcterms");
+
+ RSSBasicModule v2vTermsModule = new RSSBasicModule(V2V_NAMESPACE_URI, "indymedia v2v RSS module");
+ v2vTermsModule.addMultiValuedProperty("topic", RSSModule.PCDATA_PROPERTY_TYPE);
+ v2vTermsModule.addMultiValuedProperty("genre", RSSModule.PCDATA_PROPERTY_TYPE);
+ v2vTermsModule.addMultiValuedProperty("link", RSSModule.PCDATA_PROPERTY_TYPE);
+ registerModule(v2vTermsModule, "v2v");
+
+ registerModule(new RSSBasicModule(EVENT_NAMESPACE_URI, "Event RSS module"), "ev");
+ registerModule(new RSSBasicModule(TAXONOMY_NAMESPACE_URI, "Taxonomy RSS module"), "taxo");
+ registerModule(new RSSBasicModule(CONTENT_NAMESPACE_URI , "Content RSS module"), "content");
+ }
+
+ public void registerModule(RSSModule aModule, String aPrefix) {
+ modules.add(aModule);
+ namespaceURItoModule.put(aModule.getNamespaceURI(), aModule);
+ moduleToPrefix.put(aModule, aPrefix);
}
public RSSData parseInputStream(InputStream aStream) throws RSSExc, RSSFailure {
try {
- XMLReader xmlReader = new XMLReader();
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 static 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(String aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
- if (XMLReaderTool.getLocalNameFromQualifiedName(aTag).equals("RDF")) {
+ 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 static class RDFSectionHandler extends XMLReader.AbstractSectionHandler {
+ private class RDFSectionHandler extends mir.util.xml.AbstractSectionHandler {
private RSSData data;
+
public RDFSectionHandler(RSSData aData) {
data = aData;
}
- public XMLReader.SectionHandler startElement(String aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
- String identifier = (String) anAttributes.get("rdf:about");
+ 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);
- if (aTag.equals("channel")) {
- if (identifier==null)
- throw new XMLReader.XMLReaderFailure(new RSSExc("Missing rdf:about"));
- else
- return new ChannelSectionHandler(identifier);
- }
- else if (aTag.equals("item")) {
- if (identifier==null)
- throw new XMLReader.XMLReaderFailure(new RSSExc("Missing rdf:about"));
- else
- return new ItemSectionHandler(identifier);
+ return new RDFResourceSectionHandler(rdfClass, identifier);
+ }
+
+ public void endElement(mir.util.xml.SectionHandler aHandler) throws XMLParserExc {
+ if (aHandler instanceof RDFResourceSectionHandler) {
+ data.addResource(((RDFResourceSectionHandler) aHandler).getResource());
}
- else
- return new DiscardingSectionHandler();
- };
+ }
+
+ public void characters(String aCharacters) throws XMLParserExc {
+ if (aCharacters.trim().length()>0)
+ throw new XMLParserExc("No character data allowed here");
+ }
- public void endElement(XMLReader.SectionHandler aHandler) throws XMLReader.XMLReaderExc {
- if (aHandler instanceof ItemSectionHandler) {
- data.addItem(((ItemSectionHandler) aHandler).getItem());
+ public void finishSection() throws XMLParserExc {
+ }
+ }
+
+ private mir.util.xml.SectionHandler makePropertyValueSectionHandler(mir.util.xml.XMLName aTag, Map anAttributes) {
+ RSSModule module = (RSSModule) namespaceURItoModule.get(aTag.getNamespaceURI());
+
+ if (module!=null) {
+ RSSModule.RSSModuleProperty property = module.getPropertyForName(aTag.getLocalName());
+
+ if (property!=null) {
+ switch (property.getType()) {
+ case
+ RSSModule.PCDATA_PROPERTY_TYPE:
+ return new PCDATASectionHandler();
+ case
+ RSSModule.RDFCOLLECTION_PROPERTY_TYPE:
+ return new RDFCollectionSectionHandler();
+// case
+// RSSModule.RDF_PROPERTY_TYPE:
+// return new RDFValueSectionHandler();
+ case
+ RSSModule.W3CDTF_PROPERTY_TYPE:
+ return new DateSectionHandler();
+ }
}
- else if (aHandler instanceof ChannelSectionHandler) {
- data.setChannel(((ChannelSectionHandler) aHandler).getChannel());
+ }
+
+ return new FlexiblePropertyValueSectionHandler();
+ }
+
+ private void usePropertyValueSectionHandler(RDFResource aResource, PropertyValueSectionHandler aHandler, mir.util.xml.XMLName aTag) {
+ RSSModule module = (RSSModule) namespaceURItoModule.get(aTag.getNamespaceURI());
+
+ if (module!=null) {
+ RSSModule.RSSModuleProperty property = module.getPropertyForName(aTag.getLocalName());
+
+ if (property!=null && property.getIsMultiValued()) {
+ List value = (List) aResource.get(makeQualifiedName(aTag));
+
+ if (value==null) {
+ value = new ArrayList();
+ aResource.set(makeQualifiedName(aTag), value);
+ }
+
+ value.add(aHandler.getValue());
+
+ return;
}
- };
+ }
- public void characters(String aCharacters) throws XMLReader.XMLReaderExc {
- if (aCharacters.trim().length()>0)
- throw new XMLReader.XMLReaderExc("No character data allowed here");
- };
+ aResource.set(makeQualifiedName(aTag), aHandler.getValue());
+ }
+
+ private String makeQualifiedName(mir.util.xml.XMLName aName) {
+ String result=aName.getLocalName();
+ RSSModule module = (RSSModule) namespaceURItoModule.get(aName.getNamespaceURI());
+ if (module!=null) {
+ String prefix = (String) moduleToPrefix.get(module);
- public void finishSection() throws XMLReader.XMLReaderExc {
- };
+ if (prefix!=null && prefix.length()>0)
+ result = prefix+":"+result;
+ }
+
+ return result;
}
- private static class ChannelSectionHandler extends XMLReader.AbstractSectionHandler {
+ private class RDFResourceSectionHandler extends mir.util.xml.AbstractSectionHandler {
private String image;
- private String currentTag;
- private RSSChannel channel;
+ private mir.util.xml.XMLName currentTag;
+ private RDFResource resource;
- public ChannelSectionHandler(String anIdentifier) {
- channel = new RSSChannel(anIdentifier);
+ public RDFResourceSectionHandler(String anRDFClass, String anIdentifier) {
+ resource = new RDFResource(anRDFClass, anIdentifier);
}
- public XMLReader.SectionHandler startElement(String aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
+ public mir.util.xml.SectionHandler startElement(mir.util.xml.XMLName aTag, Map anAttributes) throws XMLParserExc {
currentTag = aTag;
- if (currentTag.equals("items")) {
- return new ChannelItemsSectionHandler();
- }
- else if (currentTag.equals("description") ||
- currentTag.equals("link") ||
- currentTag.equals("title")) {
- return new PCDATASectionHandler();
- }
- return new DiscardingSectionHandler();
- };
+ return makePropertyValueSectionHandler(aTag, anAttributes);
+ }
- public void endElement(XMLReader.SectionHandler aHandler) throws XMLReader.XMLReaderExc {
- if (currentTag.equals("items")) {
- channel.setItems(((ChannelItemsSectionHandler) aHandler).getItems());
- }
- if (currentTag.equals("description")) {
- channel.setDescription(((PCDATASectionHandler) aHandler).getData());
+ 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).getFieldValue());
}
- else if (currentTag.equals("title")) {
- channel.setTitle(((PCDATASectionHandler) aHandler).getData());
+ }
+
+ public void characters(String aCharacters) throws XMLParserExc {
+ if (aCharacters.trim().length()>0)
+ throw new XMLParserExc("No character data allowed here");
+ }
+
+ public void finishSection() throws XMLParserExc {
+ }
+
+ public RDFResource getResource() {
+ if ((resource.getIdentifier()==null || resource.getIdentifier().length()==0) && resource.get("rss:link")!=null) {
+ resource.setIdentifier(resource.get("rss:link").toString());
}
- else if (currentTag.equals("link")) {
- channel.setLink(((PCDATASectionHandler) aHandler).getData());
+
+ return resource;
+ }
+ }
+
+ private abstract class PropertyValueSectionHandler extends mir.util.xml.AbstractSectionHandler {
+ public abstract Object getValue();
+ }
+
+ private class FlexiblePropertyValueSectionHandler extends PropertyValueSectionHandler {
+ private StringBuffer stringData;
+ private Object structuredData;
+
+ public FlexiblePropertyValueSectionHandler() {
+ stringData = new StringBuffer();
+ structuredData=null;
+ }
+
+ 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(mir.util.xml.SectionHandler aHandler) throws XMLParserExc {
+ if (aHandler instanceof RDFSequenceSectionHandler) {
+ structuredData= ((RDFSequenceSectionHandler) aHandler).getItems();
}
- };
+ }
- public void characters(String aCharacters) throws XMLReader.XMLReaderExc {
- if (aCharacters.trim().length()>0)
- throw new XMLReader.XMLReaderExc("No character data allowed here");
- };
+ public void characters(String aCharacters) throws XMLParserExc {
+ stringData.append(aCharacters);
+ }
- public void finishSection() throws XMLReader.XMLReaderExc {
- };
+ public void finishSection() throws XMLParserExc {
+ }
- public RSSChannel getChannel () {
- return channel;
+ public String getData() {
+ return stringData.toString();
+ }
+
+ public Object getValue() {
+ if (structuredData==null)
+ return stringData.toString();
+ return structuredData;
}
}
- private static class ChannelItemsSectionHandler extends XMLReader.AbstractSectionHandler {
+ private class RDFCollectionSectionHandler extends PropertyValueSectionHandler {
private List items;
- public ChannelItemsSectionHandler() {
- items = new Vector();
+ public RDFCollectionSectionHandler() {
+ items = new ArrayList();
}
- public XMLReader.SectionHandler startElement(String aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
- if (aTag.equals("rdf:Seq"))
+ 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;
}
+
+ public Object getValue() {
+ return items;
+ }
}
- private static class ItemSectionHandler extends XMLReader.AbstractSectionHandler {
- private String currentTag;
- private RSSItem item;
+ private class PCDATASectionHandler extends PropertyValueSectionHandler {
+ private StringBuffer data;
- public ItemSectionHandler(String anIdentifier) {
- item = new RSSItem(anIdentifier);
+ public PCDATASectionHandler() {
+ data = new StringBuffer();
}
- public XMLReader.SectionHandler startElement(String aTag, Map anAttributes) throws XMLReader.XMLReaderExc {
- currentTag = aTag;
-
- if (currentTag.equals("description") ||
- currentTag.equals("link") ||
- currentTag.equals("title")) {
- return new PCDATASectionHandler();
- }
+ public mir.util.xml.SectionHandler startElement(String aTag, Map anAttributes) throws XMLParserExc {
+ throw new XMLParserFailure(new RSSExc("No subtags allowed here"));
+ }
- return new DiscardingSectionHandler();
- };
+ public void endElement(mir.util.xml.SectionHandler aHandler) throws XMLParserExc {
+ }
- public void endElement(XMLReader.SectionHandler aHandler) throws XMLReader.XMLReaderExc {
- if (currentTag.equals("description")) {
- item.setDescription(((PCDATASectionHandler) aHandler).getData());
- }
- else if (currentTag.equals("title")) {
- item.setTitle(((PCDATASectionHandler) aHandler).getData());
- }
- else if (currentTag.equals("link")) {
- item.setLink(((PCDATASectionHandler) aHandler).getData());
- }
- };
+ public void characters(String aCharacters) throws XMLParserExc {
+ data.append(aCharacters);
+ }
- public void characters(String aCharacters) throws XMLReader.XMLReaderExc {
- if (aCharacters.trim().length()>0)
- throw new XMLReader.XMLReaderExc("No character data allowed here");
- };
+ public void finishSection() throws XMLParserExc {
+ }
- public void finishSection() throws XMLReader.XMLReaderExc {
- };
+ public String getData() {
+ return data.toString();
+ }
- public RSSItem getItem() {
- return item;
- };
+ public Object getValue() {
+ return data.toString();
+ }
}
- private static class PCDATASectionHandler extends XMLReader.AbstractSectionHandler {
+ private class DateSectionHandler extends PropertyValueSectionHandler {
private StringBuffer data;
- public PCDATASectionHandler() {
+ public DateSectionHandler() {
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();
+ public Object getValue() {
+ try {
+ String expression = data.toString().trim();
+
+ return DateTimeRoutines.parseW3CDTFString(expression);
+ }
+ catch (Throwable t) {
+
+ return null;
+ }
}
}
- private static 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;
}
}
- private static class RDFLiteralSectionHandler extends XMLReader.AbstractSectionHandler {
+ private class RDFLiteralSectionHandler extends PropertyValueSectionHandler {
private StringBuffer data;
private String tag;
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 XMLParserExc {
+ }
- public void finishSection() throws XMLReader.XMLReaderExc {
- };
+ public Object getValue() {
+ return data.toString();
+ }
}
- private static 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 {
+ }
}
}