You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2007/06/10 06:35:37 UTC

svn commit: r545838 - in /incubator/abdera/java/trunk/contrib/rss/src: main/java/org/apache/abdera/contrib/rss/ test/java/org/apache/abdera/test/contrib/rss/ test/resources/

Author: jmsnell
Date: Sat Jun  9 21:35:35 2007
New Revision: 545838

URL: http://svn.apache.org/viewvc?view=rev&rev=545838
Log:
filling out more of the rss 1.0 support

Modified:
    incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssCategory.java
    incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssChannel.java
    incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssConstants.java
    incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssExtensionFactory.java
    incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssFeed.java
    incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssItem.java
    incubator/abdera/java/trunk/contrib/rss/src/test/java/org/apache/abdera/test/contrib/rss/RssTest.java
    incubator/abdera/java/trunk/contrib/rss/src/test/resources/rss1.rdf

Modified: incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssCategory.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssCategory.java?view=diff&rev=545838&r1=545837&r2=545838
==============================================================================
--- incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssCategory.java (original)
+++ incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssCategory.java Sat Jun  9 21:35:35 2007
@@ -44,7 +44,8 @@
   }
 
   public IRI getScheme() {
-    return new IRI(this.getAttributeValue("domain"));
+    String domain = this.getAttributeValue("domain");
+    return (domain != null) ? new IRI(this.getAttributeValue("domain")) : null;
   }
 
   public String getTerm() {

Modified: incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssChannel.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssChannel.java?view=diff&rev=545838&r1=545837&r2=545838
==============================================================================
--- incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssChannel.java (original)
+++ incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssChannel.java Sat Jun  9 21:35:35 2007
@@ -20,7 +20,6 @@
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Date;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -87,9 +86,7 @@
               Element entryel = null;
               try {
                 entryel = locate(path);
-              } catch (Exception e) {
-                e.printStackTrace();
-              }
+              } catch (Exception e) {}
               if (entryel != null) {
                 //TODO:fix this.. entryel should already be an RssItem
                 entries.add(new RssItem(entryel));
@@ -197,21 +194,34 @@
   }
 
   public Person getAuthor() {
-    return getExtension(RssConstants.QNAME_MANAGINGEDITOR);
+    Person person = getExtension(RssConstants.QNAME_MANAGINGEDITOR);
+    if (person == null) person = getExtension(RssConstants.QNAME_DC_CREATOR);
+    return person;
   }
 
   public List<Person> getAuthors() {
-    return getExtensions(RssConstants.QNAME_MANAGINGEDITOR);
+    List<Person> people = getExtensions(RssConstants.QNAME_MANAGINGEDITOR);
+    if (people == null || people.size() == 0) people = getExtensions(RssConstants.QNAME_DC_CREATOR);
+    return people;
+  }
+  
+  public List<Person> getContributors() {
+    List<Person> people = getExtensions(RssConstants.QNAME_DC_CONTRIBUTOR);
+    return people;
   }
 
   public List<Category> getCategories() {
-    return getExtensions(RssConstants.QNAME_CATEGORY);
+    List<Category> cats = getExtensions(RssConstants.QNAME_CATEGORY);
+    if (cats == null || cats.size() == 0) cats = getExtensions(RssConstants.QNAME_DC_SUBJECT);
+    return cats;
   }
 
   @SuppressWarnings("unchecked")
   public List<Category> getCategories(String scheme) {
-    Iterator i = new FOMElementIterator(getInternal(), RssCategory.class, new QName("domain"), scheme, null);
-    return new FOMList<Category>(i);
+    return (scheme != null) ? 
+      new FOMList<Category>(
+        new FOMElementIterator(getInternal(), RssCategory.class, new QName("domain"), scheme, null)
+      ) : getCategories();
   }
 
   public Generator getGenerator() {
@@ -228,14 +238,20 @@
   }
 
   public IRI getId() {
-    return null;
+    IRIElement id = getIdElement();
+    return (id != null) ? id.getValue() : null;
   }
 
   public IRIElement getIdElement() {
-    return null;
+    return getExtension(RssConstants.QNAME_DC_IDENTIFIER);
   }
 
   public Link getLink(String rel) {
+    if (rel.equals(Link.REL_ALTERNATE) || rel.equals(Link.REL_ALTERNATE_IANA)) {
+      RssGuid guid = (RssGuid) getIdElement();
+      if (guid != null && guid.isPermalink()) return guid;
+      return getAlternateLink();
+    }
     List<Link> links = FOMHelper.getLinks(getInternal(), rel);
     return (links != null && links.size() > 0) ? links.get(0) : null;
   }
@@ -296,7 +312,9 @@
   }
 
   public Text getRightsElement() {
-    return getExtension(RssConstants.QNAME_COPYRIGHT);
+    Text text = getExtension(RssConstants.QNAME_COPYRIGHT);
+    if (text == null) text = getExtension(RssConstants.QNAME_DC_RIGHTS);
+    return text;
   }
 
   public Type getRightsType() {
@@ -321,6 +339,7 @@
   public Text getSubtitleElement() {
     Text text = getExtension(RssConstants.QNAME_DESCRIPTION);
     if (text == null) text = getExtension(RssConstants.QNAME_RDF_DESCRIPTION);
+    if (text == null) text = getExtension(RssConstants.QNAME_DC_DESCRIPTION);
     return text;
   }
 
@@ -337,6 +356,7 @@
   public Text getTitleElement() {
     Text text = getExtension(RssConstants.QNAME_TITLE);
     if (text == null) text = getExtension(RssConstants.QNAME_RDF_TITLE);
+    if (text == null) text = getExtension(RssConstants.QNAME_DC_TITLE);
     return text;
   }
 
@@ -355,6 +375,7 @@
     if (dt == null) dt = getExtension(RssConstants.QNAME_LASTBUILDDATE2);
     if (dt == null) dt = getExtension(RssConstants.QNAME_PUBDATE);
     if (dt == null) dt = getExtension(RssConstants.QNAME_PUBDATE2);
+    if (dt == null) dt = getExtension(RssConstants.QNAME_DC_DATE);
     return dt;
   }
 
@@ -371,6 +392,7 @@
   public DateTime getPublishedElement() {
     DateTime dt = getExtension(RssConstants.QNAME_PUBDATE);
     if (dt == null) dt = getExtension(RssConstants.QNAME_PUBDATE2);
+    if (dt == null) dt = getExtension(RssConstants.QNAME_DC_DATE);
     return dt;
   }
 
@@ -504,7 +526,9 @@
   }
 
   public String getLanguage() {
-    return getSimpleExtension(RssConstants.QNAME_LANGUAGE);
+    String lang = getSimpleExtension(RssConstants.QNAME_LANGUAGE);
+    if (lang == null) lang = getSimpleExtension(RssConstants.QNAME_DC_LANGUAGE);
+    return lang;
   }
 
   public void setLanguage(String language) {  

Modified: incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssConstants.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssConstants.java?view=diff&rev=545838&r1=545837&r2=545838
==============================================================================
--- incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssConstants.java (original)
+++ incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssConstants.java Sat Jun  9 21:35:35 2007
@@ -24,6 +24,7 @@
   public static final String ENC_NS = "http://purl.org/rss/1.0/modules/content/";
   public static final String RDF_NS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
   public static final String RSS1_NS = "http://purl.org/rss/1.0/";
+  public static final String DC_NS = "http://purl.org/dc/elements/1.1/";
   
   public static final QName QNAME_RDF = new QName(RDF_NS,"RDF");
   public static final QName QNAME_RDF_CHANNEL = new QName(RSS1_NS,"channel");
@@ -82,5 +83,21 @@
   public static final QName QNAME_NAME = new QName("name");
   
   public static final QName QNAME_CONTENT_ENCODED = new QName(ENC_NS, "encoded");
+  
+  public static final QName QNAME_DC_TITLE = new QName(DC_NS, "title");
+  public static final QName QNAME_DC_CREATOR = new QName(DC_NS, "creator");
+  public static final QName QNAME_DC_SUBJECT = new QName(DC_NS, "subject");
+  public static final QName QNAME_DC_DESCRIPTION = new QName(DC_NS, "description");
+  public static final QName QNAME_DC_PUBLISHER = new QName(DC_NS, "publisher");
+  public static final QName QNAME_DC_CONTRIBUTOR = new QName(DC_NS, "contributor");
+  public static final QName QNAME_DC_DATE = new QName(DC_NS, "date");
+  public static final QName QNAME_DC_TYPE = new QName(DC_NS, "type");
+  public static final QName QNAME_DC_FORMAT = new QName(DC_NS, "format");
+  public static final QName QNAME_DC_IDENTIFIER = new QName(DC_NS, "identifier");
+  public static final QName QNAME_DC_SOURCE = new QName(DC_NS, "source");
+  public static final QName QNAME_DC_LANGUAGE = new QName(DC_NS, "language");
+  public static final QName QNAME_DC_RELATION = new QName(DC_NS, "relation");
+  public static final QName QNAME_DC_COVERAGE = new QName(DC_NS, "covrerage");
+  public static final QName QNAME_DC_RIGHTS = new QName(DC_NS, "rights");
   
 }

Modified: incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssExtensionFactory.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssExtensionFactory.java?view=diff&rev=545838&r1=545837&r2=545838
==============================================================================
--- incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssExtensionFactory.java (original)
+++ incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssExtensionFactory.java Sat Jun  9 21:35:35 2007
@@ -44,20 +44,30 @@
       return (T)(new RssItem(internal));
     } else if (qname.equals(QNAME_LINK) || qname.equals(QNAME_RDF_LINK)) {
       return (T)(new RssLink(internal));
-    } else if (qname.equals(QNAME_TITLE) || qname.equals(QNAME_RDF_TITLE)) {
+    } else if (qname.equals(QNAME_TITLE) || 
+               qname.equals(QNAME_RDF_TITLE) ||
+               qname.equals(QNAME_DC_TITLE) ||
+               qname.equals(QNAME_DESCRIPTION) || 
+               qname.equals(QNAME_RDF_DESCRIPTION) ||
+               qname.equals(QNAME_DC_DESCRIPTION) ||
+               qname.equals(QNAME_COPYRIGHT) || 
+               qname.equals(QNAME_DC_RIGHTS)) {
       return (T)(new RssText(internal));
-    } else if (qname.equals(QNAME_DESCRIPTION) || qname.equals(QNAME_RDF_DESCRIPTION)) {
-      return (T)(new RssText(internal));
-    } else if (qname.equals(QNAME_COPYRIGHT)) {
-      return (T)(new RssText(internal));
-    } else if (qname.equals(QNAME_MANAGINGEDITOR) || qname.equals(QNAME_MANAGINGEDITOR2)) {
-      return (T)(new RssPerson(internal));
-    } else if (qname.equals(QNAME_WEBMASTER) || qname.equals(QNAME_WEBMASTER2)) {
+    } else if (qname.equals(QNAME_MANAGINGEDITOR) || 
+               qname.equals(QNAME_MANAGINGEDITOR2) || 
+               qname.equals(QNAME_DC_CREATOR) ||
+               qname.equals(QNAME_DC_CONTRIBUTOR) ||
+               qname.equals(QNAME_WEBMASTER) ||
+               qname.equals(QNAME_WEBMASTER2)) {
       return (T)(new RssPerson(internal));
-    } else if (qname.equals(QNAME_PUBDATE) || qname.equals(QNAME_PUBDATE2) ||
-               qname.equals(QNAME_LASTBUILDDATE) || qname.equals(QNAME_LASTBUILDDATE2)) {
+    } else if (qname.equals(QNAME_PUBDATE) || 
+               qname.equals(QNAME_PUBDATE2) ||
+               qname.equals(QNAME_LASTBUILDDATE) || 
+               qname.equals(QNAME_LASTBUILDDATE2) ||
+               qname.equals(QNAME_DC_DATE)) {
       return (T)(new RssDateTime(internal));
-    } else if (qname.equals(QNAME_CATEGORY)) {
+    } else if (qname.equals(QNAME_CATEGORY) || 
+               qname.equals(QNAME_DC_SUBJECT)) {
       return (T)(new RssCategory(internal));
     } else if (qname.equals(QNAME_GENERATOR)) {
       return (T)(new RssGenerator(internal));
@@ -83,11 +93,13 @@
       return (T)(new RssPerson(internal));
     } else if (qname.equals(QNAME_ENCLOSURE)) {
       return (T)(new RssEnclosure(internal));
-    } else if (qname.equals(QNAME_GUID)) {
+    } else if (qname.equals(QNAME_GUID) || 
+               qname.equals(QNAME_DC_IDENTIFIER)) {
       return (T)(new RssGuid(internal));
     } else if (qname.equals(QNAME_COMMENTS)) {
       return (T)(new RssLink(internal));
-    } else if (qname.equals(QNAME_SOURCE)) {
+    } else if (qname.equals(QNAME_SOURCE) || 
+               qname.equals(QNAME_DC_SOURCE)) {
       return (T)(new RssSource(internal));
     } else if (qname.equals(QNAME_CONTENT_ENCODED)) {
       return (T)(new RssContent(internal));

Modified: incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssFeed.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssFeed.java?view=diff&rev=545838&r1=545837&r2=545838
==============================================================================
--- incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssFeed.java (original)
+++ incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssFeed.java Sat Jun  9 21:35:35 2007
@@ -192,7 +192,7 @@
   }
 
   public List<Person> getContributors() {
-    throw new UnsupportedOperationException("Contributor's are not supported");
+    return getChannel().getContributors();
   }
 
   public Generator getGenerator() {

Modified: incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssItem.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssItem.java?view=diff&rev=545838&r1=545837&r2=545838
==============================================================================
--- incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssItem.java (original)
+++ incubator/abdera/java/trunk/contrib/rss/src/main/java/org/apache/abdera/contrib/rss/RssItem.java Sat Jun  9 21:35:35 2007
@@ -20,7 +20,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Date;
-import java.util.Iterator;
 import java.util.List;
 
 import javax.activation.DataHandler;
@@ -51,7 +50,7 @@
 
 public class RssItem 
   extends ExtensibleElementWrapper 
-  implements Entry {
+  implements Entry, IRIElement {
 
   public RssItem(Element internal) {
     super(internal);
@@ -115,10 +114,14 @@
   }
 
   public Link getAlternateLink() {
-    RssGuid guid = (RssGuid) getIdElement();
-    if (guid != null && guid.isPermalink())
-      return guid;
-    return getExtension(RssConstants.QNAME_LINK);
+    Link link = getExtension(RssConstants.QNAME_LINK);
+    if (link == null) link = getExtension(RssConstants.QNAME_RDF_LINK);
+    if (link == null) {
+      IRIElement guid = getIdElement();
+      if (guid != null && guid instanceof RssGuid && ((RssGuid)guid).isPermalink())
+        return (Link)guid;
+    }
+    return link;
   }
 
   public Link getAlternateLink(String type, String hreflang)
@@ -137,21 +140,29 @@
   }
 
   public Person getAuthor() {
-    return getExtension(RssConstants.QNAME_AUTHOR);
+    Person person = getExtension(RssConstants.QNAME_AUTHOR);
+    if (person == null) person = getExtension(RssConstants.QNAME_DC_CREATOR);
+    return person;
   }
 
   public List<Person> getAuthors() {
-    return getExtensions(RssConstants.QNAME_AUTHOR);
+    List<Person> people = getExtensions(RssConstants.QNAME_AUTHOR);
+    if (people == null || people.size() == 0) people = getExtensions(RssConstants.QNAME_DC_CREATOR);
+    return people;
   }
 
   public List<Category> getCategories() {
-    return getExtensions(RssConstants.QNAME_CATEGORY);
+    List<Category> cats = getExtensions(RssConstants.QNAME_CATEGORY);
+    if (cats == null || cats.size() == 0) cats = getExtensions(RssConstants.QNAME_DC_SUBJECT);
+    return cats;
   }
 
   @SuppressWarnings("unchecked")
   public List<Category> getCategories(String scheme) {
-    Iterator i = new FOMElementIterator(getInternal(), RssCategory.class, new QName("domain"), scheme, null);
-    return new FOMList<Category>(i);
+    return (scheme != null) ? 
+        new FOMList<Category>(
+          new FOMElementIterator(getInternal(), RssCategory.class, new QName("domain"), scheme, null)
+        ) : getCategories();
   }
 
   public String getContent() {
@@ -163,9 +174,7 @@
   public Content getContentElement() {
     Content content = getExtension(RssConstants.QNAME_CONTENT_ENCODED);
     // what else to return other than content:encoded and possibly atom:content?
-    if (content == null) {
-      content = getExtension(Constants.CONTENT);
-    }
+    if (content == null) content = getExtension(Constants.CONTENT);
     return content;
   }
 
@@ -174,11 +183,11 @@
   }
 
   public IRI getContentSrc() {
-    throw new UnsupportedOperationException("RSS does not support content by reference");
+    return null;
   }
 
   public InputStream getContentStream() throws IOException {
-    throw new UnsupportedOperationException("RSS does not support encoded binary content");
+    return null;
   }
 
   public Type getContentType() {
@@ -197,51 +206,50 @@
   }
 
   public List<Person> getContributors() {
-    return null;
+    List<Person> people = getExtensions(RssConstants.QNAME_DC_CONTRIBUTOR);
+    return people;
   }
 
   public Control getControl(boolean create) {
-    throw new UnsupportedOperationException("RSS does not support APP features");
+    return null;
   }
 
   public Control getControl() {
-    throw new UnsupportedOperationException("RSS does not support APP features");
+    return null;
   }
 
   public Link getEditLink() {
-    throw new UnsupportedOperationException("RSS does not support APP features");
+    return null;
   }
 
   public IRI getEditLinkResolvedHref() {
-    @SuppressWarnings("unused")
-    Link link = getEditLink();
-    throw new UnsupportedOperationException("RSS does not support APP features");
+    return null;
   }
 
   public Link getEditMediaLink() {
-    throw new UnsupportedOperationException("RSS does not support APP features");
+    return null;
   }
 
   public Link getEditMediaLink(String type, String hreflang)
       throws MimeTypeParseException {
-    throw new UnsupportedOperationException("RSS does not support APP features");
+    return null;
   }
 
   public IRI getEditMediaLinkResolvedHref() {
-    throw new UnsupportedOperationException("RSS does not support APP features");
+    return null;
   }
 
   public IRI getEditMediaLinkResolvedHref(String type, String hreflang)
       throws MimeTypeParseException {
-    throw new UnsupportedOperationException("RSS does not support APP features");
+    return null;
   }
 
   public Date getEdited() {
-    throw new UnsupportedOperationException("RSS does not support APP features");
+    return null;
   }
 
   public DateTime getEditedElement() {
-    throw new UnsupportedOperationException("RSS does not support APP features");
+    return null;
   }
 
   public Link getEnclosureLink() {
@@ -259,7 +267,10 @@
   }
 
   public IRIElement getIdElement() {
-    return getExtension(RssConstants.QNAME_GUID);
+    IRIElement id = getExtension(RssConstants.QNAME_GUID);
+    if (id == null) id = getExtension(RssConstants.QNAME_DC_IDENTIFIER);
+    if (id == null && this.getQName().equals(RssConstants.QNAME_RDF_ITEM)) return this;
+    return id;
   }
 
   public Link getLink(String rel) {
@@ -267,6 +278,7 @@
       RssGuid guid = (RssGuid) getIdElement();
       if (guid != null && guid.isPermalink())
         return guid;
+      return getAlternateLink();
     }
     List<Link> links = FOMHelper.getLinks(getInternal(), rel);
     return (links != null && links.size() > 0) ? links.get(0) : null;
@@ -297,6 +309,7 @@
   public DateTime getPublishedElement() {
     DateTime dt = getExtension(RssConstants.QNAME_PUBDATE);
     if (dt == null) dt = getExtension(RssConstants.QNAME_PUBDATE2);
+    if (dt == null) dt = getExtension(RssConstants.QNAME_DC_DATE);
     return dt;
   }
 
@@ -311,7 +324,8 @@
       return ((RssChannel)el).getRightsElement();
     else if (el instanceof RssFeed) 
       return ((RssFeed)el).getRightsElement();
-    return null;
+    Text text = getExtension(RssConstants.QNAME_DC_RIGHTS);
+    return text;
   }
 
   public org.apache.abdera.model.Text.Type getRightsType() {
@@ -329,16 +343,21 @@
   }
 
   public Source getSource() {
-    return getExtension(RssConstants.QNAME_SOURCE);
+    Source source = getExtension(RssConstants.QNAME_SOURCE);
+    if (source == null) getExtension(RssConstants.QNAME_DC_SOURCE);
+    return source;
   }
 
   public String getSummary() {
-    Text text = getSummaryElement();
+    Text text = getSummaryElement(); 
     return (text != null) ? text.getValue() : null;
   }
 
   public Text getSummaryElement() {
-    return getExtension(RssConstants.QNAME_DESCRIPTION);
+    Text text = getExtension(RssConstants.QNAME_DESCRIPTION);
+    if (text == null) text = getExtension(RssConstants.QNAME_RDF_DESCRIPTION);
+    if (text == null) text = getExtension(RssConstants.QNAME_DC_DESCRIPTION);
+    return text;
   }
 
   public org.apache.abdera.model.Text.Type getSummaryType() {
@@ -352,7 +371,10 @@
   }
 
   public Text getTitleElement() {
-    return getExtension(RssConstants.QNAME_TITLE);
+    Text text = getExtension(RssConstants.QNAME_TITLE);
+    if (text == null) text = getExtension(RssConstants.QNAME_RDF_TITLE);
+    if (text == null) text = getExtension(RssConstants.QNAME_DC_TITLE);
+    return text;
   }
 
   public org.apache.abdera.model.Text.Type getTitleType() {
@@ -568,5 +590,23 @@
 
   public Link getComments() {
     return getExtension(RssConstants.QNAME_COMMENTS);
+  }
+
+  
+  public IRI getResolvedValue() {
+    return getValue();
+  }
+
+  public IRI getValue() {
+    String about = getAttributeValue(RssConstants.QNAME_RDF_ABOUT);
+    return (about != null) ? new IRI(about) : null;
+  }
+
+  public void setNormalizedValue(String iri) {
+    throw new UnsupportedOperationException("Modifications are not allowed");
+  }
+
+  public void setValue(String iri) {
+    throw new UnsupportedOperationException("Modifications are not allowed");
   }
 }

Modified: incubator/abdera/java/trunk/contrib/rss/src/test/java/org/apache/abdera/test/contrib/rss/RssTest.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/contrib/rss/src/test/java/org/apache/abdera/test/contrib/rss/RssTest.java?view=diff&rev=545838&r1=545837&r2=545838
==============================================================================
--- incubator/abdera/java/trunk/contrib/rss/src/test/java/org/apache/abdera/test/contrib/rss/RssTest.java (original)
+++ incubator/abdera/java/trunk/contrib/rss/src/test/java/org/apache/abdera/test/contrib/rss/RssTest.java Sat Jun  9 21:35:35 2007
@@ -24,6 +24,7 @@
 import org.apache.abdera.model.Document;
 import org.apache.abdera.model.Entry;
 import org.apache.abdera.model.Feed;
+import org.apache.abdera.model.Person;
 
 import junit.framework.TestCase;
 
@@ -42,10 +43,45 @@
     assertEquals("XML.com",feed.getTitle());
     assertEquals("http://xml.com/pub", feed.getAlternateLinkResolvedHref().toASCIIString());
     assertEquals("XML.com features a rich mix of information and services \n      for the XML community.", feed.getSubtitle().trim());
+    assertNotNull(feed.getAuthor());
+    assertEquals("James Snell", feed.getAuthor().getName());
+    assertEquals("jasnell@example.com", feed.getAuthor().getEmail());
+    assertEquals(1,feed.getCategories().size());
+    assertEquals("Anything",feed.getCategories().get(0).getTerm());
+    assertEquals("foo", feed.getId().toASCIIString());
+    assertEquals("Copyright 2007 Foo", feed.getRights());
+    assertNotNull(feed.getUpdated());
+    assertEquals("en-US", feed.getLanguage());
+    assertEquals(1,feed.getContributors().size());
+    Person person = feed.getContributors().get(0);
+    assertEquals("John Doe", person.getName());
+    assertEquals("jdoe@example.org",person.getEmail());
+    
     List<Entry> entries = feed.getEntries();
     assertEquals(2, entries.size());
     
-    // TODO: finish this test as the RSS 1.0 impl is completed
+    Entry entry = entries.get(0);
+    assertEquals("Processing Inclusions with XSLT",entry.getTitle());
+    assertEquals("http://xml.com/pub/2000/08/09/xslt/xslt.html",entry.getId().toASCIIString());
+    assertEquals("http://xml.com/pub/2000/08/09/xslt/xslt.html",entry.getAlternateLinkResolvedHref().toASCIIString());
+    assertNotNull(entry.getSummary());
+    assertEquals("testing",entry.getContent());
+    
+    person = entry.getAuthor();
+    System.out.println(person.getName());
+    assertEquals("Bob",person.getName());
+    
+    entry = entries.get(1);
+    assertEquals("Putting RDF to Work",entry.getTitle());
+    assertEquals("http://xml.com/pub/2000/08/09/rdfdb/index.html",entry.getId().toASCIIString());
+    assertEquals("http://xml.com/pub/2000/08/09/rdfdb/index.html",entry.getAlternateLinkResolvedHref().toASCIIString());
+    
+    assertNotNull(entry.getSummary());
+    assertEquals("testing",entry.getContent());
+    
+    person = entry.getAuthor();
+    assertEquals("Joe",person.getName());
+   
   }
   
 }

Modified: incubator/abdera/java/trunk/contrib/rss/src/test/resources/rss1.rdf
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/contrib/rss/src/test/resources/rss1.rdf?view=diff&rev=545838&r1=545837&r2=545838
==============================================================================
--- incubator/abdera/java/trunk/contrib/rss/src/test/resources/rss1.rdf (original)
+++ incubator/abdera/java/trunk/contrib/rss/src/test/resources/rss1.rdf Sat Jun  9 21:35:35 2007
@@ -2,12 +2,21 @@
 
 <rdf:RDF 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+  xmlns:dc="http://purl.org/dc/elements/1.1/"
+  xmlns:content="http://purl.org/rss/1.0/modules/content/"
   xmlns="http://purl.org/rss/1.0/"
 >
 
   <channel rdf:about="http://www.xml.com/xml/news.rss">
     <title>XML.com</title>
     <link>http://xml.com/pub</link>
+    <dc:creator>James Snell (mailto:jasnell@example.com)</dc:creator>
+    <dc:subject>Anything</dc:subject>
+    <dc:identifier>foo</dc:identifier>
+    <dc:rights>Copyright 2007 Foo</dc:rights>
+    <dc:date>2000-01-01T12:00+00:00</dc:date>
+    <dc:language>en-US</dc:language>
+    <dc:contributor>John Doe (mailto:jdoe@example.org)</dc:contributor>
     <description>
       XML.com features a rich mix of information and services 
       for the XML community.
@@ -40,6 +49,8 @@
      problematic. This article proposes a way of preserving inclusion 
      information through SAX-based processing.
     </description>
+    <content:encoded>testing</content:encoded>
+    <dc:creator>Bob (mailto:bob@example.org)</dc:creator>
   </item>
   
   <item rdf:about="http://xml.com/pub/2000/08/09/rdfdb/index.html">
@@ -50,6 +61,8 @@
      is slowly coming of age. Edd Dumbill takes a look at RDFDB, 
      one of the most exciting new RDF toolkits.
     </description>
+    <content:encoded>testing</content:encoded>
+    <dc:creator>Joe (mailto:joe@example.org)</dc:creator>
   </item>
 
   <textinput rdf:about="http://search.xml.com">