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/04/19 02:19:27 UTC

svn commit: r530211 - in /incubator/abdera/java/trunk: client/src/main/java/org/apache/abdera/protocol/client/ core/src/main/java/org/apache/abdera/model/ extensions/src/main/java/org/apache/abdera/ext/features/ parser/src/main/java/org/apache/abdera/p...

Author: jmsnell
Date: Wed Apr 18 17:19:26 2007
New Revision: 530211

URL: http://svn.apache.org/viewvc?view=rev&rev=530211
Log:
Some general improvements

* in the Document object, capture some of the entity headers from a request
* add the language and slug entity headers to the document element
* use the Content-Location header, if provided, as a basis for relative uri resolution
* set the slug header from the document, if provided
* add a method to ClientResponse to get the charset encoding for the request to use that in the parse
* changes to the features extension implementation to reflect an upcoming spec update
* resolve the base language from the Document object

Removed:
    incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/features/Control.java
Modified:
    incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/AbstractClientResponse.java
    incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/Client.java
    incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/ClientResponse.java
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Document.java
    incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/features/FeaturesExtensionFactory.java
    incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/features/FeaturesHelper.java
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMElement.java

Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/AbstractClientResponse.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/AbstractClientResponse.java?view=diff&rev=530211&r1=530210&r2=530211
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/AbstractClientResponse.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/AbstractClientResponse.java Wed Apr 18 17:19:26 2007
@@ -21,7 +21,11 @@
 import java.io.InputStream;
 import java.util.Date;
 
+import javax.activation.MimeType;
+import javax.activation.MimeTypeParseException;
+
 import org.apache.abdera.Abdera;
+import org.apache.abdera.i18n.iri.IRI;
 import org.apache.abdera.model.Document;
 import org.apache.abdera.model.Element;
 import org.apache.abdera.parser.ParseException;
@@ -29,6 +33,7 @@
 import org.apache.abdera.parser.ParserOptions;
 import org.apache.abdera.protocol.util.AbstractResponse;
 import org.apache.abdera.protocol.util.CacheControlUtil;
+import org.apache.abdera.util.EntityTag;
 
 public abstract class AbstractClientResponse
   extends AbstractResponse
@@ -72,7 +77,26 @@
     ParserOptions options) 
       throws ParseException {
     try {
-      return parser.parse(getInputStream(), getUri(), options);
+      String charset = getCharacterEncoding();
+      if (charset != null) options.setCharset(charset);
+      IRI cl = getContentLocation();
+      if (!cl.isAbsolute()) {
+        IRI r = new IRI(getUri());
+        cl = r.resolve(cl);
+      }
+      String base = (cl != null) ? cl.toASCIIString() : getUri();
+      Document<T> doc = parser.parse(getInputStream(), base, options);
+      EntityTag etag = getEntityTag();
+      if (etag != null) doc.setEntityTag(etag);
+      Date lm = getLastModified();
+      if (lm != null) doc.setLastModified(lm);
+      MimeType mt = getContentType();
+      if (mt != null) doc.setContentType(mt.toString());
+      String language = getContentLanguage();
+      if (language != null) doc.setLanguage(language);
+      String slug = getSlug();
+      if (slug != null) doc.setSlug(slug);
+      return doc;
     } catch (Exception e) {
       throw new ParseException(e);
     }
@@ -98,6 +122,14 @@
     String cc = getHeader("Cache-Control");
     if (cc != null)
       CacheControlUtil.parseCacheControl(cc, this);
+  }
+  
+  public String getCharacterEncoding() throws MimeTypeParseException {
+    MimeType mt = getContentType();
+    String charset = null;
+    if (mt != null)
+      charset = mt.getParameter("charset");
+    return charset;
   }
 
 }

Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/Client.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/Client.java?view=diff&rev=530211&r1=530210&r2=530211
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/Client.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/Client.java Wed Apr 18 17:19:26 2007
@@ -24,6 +24,7 @@
 
 import org.apache.abdera.Abdera;
 import org.apache.abdera.model.Base;
+import org.apache.abdera.model.Document;
 import org.apache.abdera.protocol.client.cache.Cache;
 import org.apache.abdera.protocol.client.cache.CacheFactory;
 import org.apache.abdera.protocol.client.cache.lru.LRUCache;
@@ -137,6 +138,12 @@
     String uri, 
     Base base, 
     RequestOptions options) {
+      if (base instanceof Document) {
+        Document d = (Document) base;
+        if (options.getSlug() == null && 
+            d.getSlug() != null) 
+          options.setSlug(d.getSlug());
+      }
       return execute("POST", uri, new BaseRequestEntity(base, options.isUseChunked()), options);
   }
     
@@ -158,6 +165,12 @@
       String uri, 
       Base base, 
       RequestOptions options) {
+    if (base instanceof Document) {
+      Document d = (Document) base;
+      if (options.getSlug() == null && 
+          d.getSlug() != null) 
+        options.setSlug(d.getSlug());
+    }
     return execute("PUT", uri, new BaseRequestEntity(base, options.isUseChunked()), options);
   }
       

Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/ClientResponse.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/ClientResponse.java?view=diff&rev=530211&r1=530210&r2=530211
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/ClientResponse.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/ClientResponse.java Wed Apr 18 17:19:26 2007
@@ -21,6 +21,8 @@
 import java.io.InputStream;
 import java.util.Date;
 
+import javax.activation.MimeTypeParseException;
+
 import org.apache.abdera.model.Document;
 import org.apache.abdera.model.Element;
 import org.apache.abdera.parser.ParseException;
@@ -79,5 +81,11 @@
    * Return the server-specified date returned in the response
    */
   Date getServerDate();
+  
+  /**
+   * Return the character set encoding specified in the ContentType header, if ant
+   * @throws MimeTypeParseException 
+   */
+  String getCharacterEncoding() throws MimeTypeParseException;
   
 }

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Document.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Document.java?view=diff&rev=530211&r1=530210&r2=530211
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Document.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Document.java Wed Apr 18 17:19:26 2007
@@ -25,6 +25,8 @@
 
 import org.apache.abdera.i18n.iri.IRI;
 import org.apache.abdera.i18n.iri.IRISyntaxException;
+import org.apache.abdera.i18n.lang.InvalidLangTagSyntax;
+import org.apache.abdera.i18n.lang.Lang;
 import org.apache.abdera.util.EntityTag;
 
 /**
@@ -130,4 +132,30 @@
    * Set the entity tag for this document
    */
   void setEntityTag(String tag);
+  
+  /**
+   * Get the language
+   */
+  String getLanguage();
+  
+  /**
+   * Returns the value of the xml:lang attribute as a Lang object
+   */
+  Lang getLanguageTag() throws InvalidLangTagSyntax;
+  
+  /**
+   * set the base language
+   */
+  void setLanguage(String lang);
+  
+  /**
+   * Get the slug for this document
+   */
+  String getSlug();
+  
+  /**
+   * Set the slug for this document
+   */
+  void setSlug(String slug);
+  
 }

Modified: incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/features/FeaturesExtensionFactory.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/features/FeaturesExtensionFactory.java?view=diff&rev=530211&r1=530210&r2=530211
==============================================================================
--- incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/features/FeaturesExtensionFactory.java (original)
+++ incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/features/FeaturesExtensionFactory.java Wed Apr 18 17:19:26 2007
@@ -43,8 +43,6 @@
     QName qname = internal.getQName();
     if (FeaturesHelper.FEATURE.equals(qname)) 
       return (T)new Feature(internal);
-    else if (FeaturesHelper.CONTROL.equals(qname))
-      return (T)new Control(internal);
     else return (T)internal;
   }
 

Modified: incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/features/FeaturesHelper.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/features/FeaturesHelper.java?view=diff&rev=530211&r1=530210&r2=530211
==============================================================================
--- incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/features/FeaturesHelper.java (original)
+++ incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/features/FeaturesHelper.java Wed Apr 18 17:19:26 2007
@@ -21,6 +21,7 @@
 
 import javax.xml.namespace.QName;
 
+import org.apache.abdera.ext.thread.ThreadConstants;
 import org.apache.abdera.factory.Factory;
 import org.apache.abdera.i18n.iri.IRI;
 import org.apache.abdera.i18n.iri.IRISyntaxException;
@@ -35,7 +36,6 @@
 
   public static final String FNS = "http://purl.org/atompub/features/1.0";
   public static final QName FEATURE = new QName(FNS, "feature","f");
-  public static final QName CONTROL = new QName(FNS, "control","f");
   
   public static final String FEATURE_DRAFTS = "http://purl.org/atom/app#drafts";
   public static final String FEATURE_PRESERVE_ENTRY = "http://purl.org/atom/app#preserve-entry";
@@ -59,10 +59,12 @@
   public static final String FEATURE_PRESERVE_UPDATED = "http://purl.org/atom/app#preserve-updated";
   public static final String FEATURE_PRESERVE_EXTENSIONS = "http://purl.org/atom/app#preserve-extensions";
   public static final String FEATURE_PRESERVE_LINKS = "http://purl.org/atom/app#preserve-links";
+  public static final String FEATURE_PRESERVE_RIGHTS = "http://purl.org/atom/app#preserve-rights";
   public static final String FEATURE_SLUG = "http://purl.org/atom/app#slug";
   public static final String FEATURE_MULTIPLE_CATEGORIES= "http://purl.org/atom/app#multiple-categories";
   public static final String FEATURE_CONTRIBUTORS = "http://purl.org/atom/app#contributors";
   public static final String FEATURE_MULTIPLE_AUTHORS = "http://purl.org/atom/app#multiple-authors";
+  public static final String FEATURE_FEED_THREAD = ThreadConstants.THR_NS;
   
   private FeaturesHelper() {}
   
@@ -81,20 +83,6 @@
   }
   
   /**
-   * Returns the specified control element or null
-   */
-  public static Control getControl(
-    Collection collection,
-    String control) {
-      List<Element> list = collection.getExtensions(CONTROL);
-      for (Element el : list) {
-        if (el.getAttributeValue("ref").equals(control))
-          return (Control)el;
-      }
-      return null;
-  }
-  
-  /**
    * Returns true if the collection contains the specified feature element
    */
   public static boolean supportsFeature(
@@ -113,24 +101,6 @@
       return check(list,features) == features.length;
   }
   
-  /**
-   * Returns true if the collection contains the specified control element
-   */
-  public static boolean supportsControl(
-    Collection collection,
-    String control) { 
-      return supportsControl(collection, new String[] {control});
-  }
-  
-  /**
-   * Returns true if the collection contains the specified control element(s)
-   */
-  public static boolean supportsControl(
-    Collection collection, 
-    String... controls) {
-      List<Element> list = collection.getExtensions(CONTROL);
-      return check(list, controls) == controls.length;
-  }
   
   private static int check(List<Element> exts, String... refvals) {
     int c = 0;
@@ -175,32 +145,4 @@
     return el;
   }
   
-  /**
-   * Add the specified control to the collection
-   * @param collection The collection
-   * @param feature The IRI of the control to add 
-   * @param required True if the control is required
-   * @param href An IRI pointing to a human readable resource describing the control
-   * @param label A human readable label for the control
-   */
-  public static Control addControl(
-    Collection collection,
-    String control,
-    boolean required,
-    String href,
-    String label) 
-      throws IRISyntaxException {
-    if (supportsControl(collection, control)) 
-      throw new IllegalArgumentException("Control already supported");
-    Factory factory = collection.getFactory();
-    Control el = 
-      (Control)factory.newExtensionElement(
-        FeaturesHelper.CONTROL, collection);
-    collection.declareNS(FNS, "f");
-    el.setAttributeValue("ref", (new IRI(control)).toString());
-    if (required) el.setAttributeValue("required", "yes");
-    if (href != null) el.setAttributeValue("href", (new IRI(href)).toString());
-    if (label != null) el.setAttributeValue("label", label);
-    return el;
-  }
 }

Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java?view=diff&rev=530211&r1=530210&r2=530211
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMDocument.java Wed Apr 18 17:19:26 2007
@@ -34,6 +34,8 @@
 import org.apache.abdera.util.EntityTag;
 import org.apache.abdera.i18n.iri.IRI;
 import org.apache.abdera.i18n.iri.IRISyntaxException;
+import org.apache.abdera.i18n.lang.InvalidLangTagSyntax;
+import org.apache.abdera.i18n.lang.Lang;
 import org.apache.axiom.om.OMComment;
 import org.apache.axiom.om.OMDocType;
 import org.apache.axiom.om.OMDocument;
@@ -57,6 +59,8 @@
   protected MimeType contentType = null;
   protected Date lastModified = null;
   protected EntityTag etag = null;
+  protected String language = null;
+  protected String slug = null;
 
   public FOMDocument() {
     super();
@@ -235,4 +239,24 @@
     this.etag = new EntityTag(tag);
   }
   
+  public String getLanguage() {
+    return language;
+  }
+  
+  public Lang getLanguageTag() throws InvalidLangTagSyntax {
+    String lang = getLanguage();
+    return (lang != null) ? new Lang(lang) : null;
+  }
+  
+  public void setLanguage(String lang) {
+    this.language = lang;
+  }
+  
+  public String getSlug() {
+    return slug;
+  }
+  
+  public void setSlug(String slug) {
+    this.slug = slug;
+  }
 }

Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMElement.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMElement.java?view=diff&rev=530211&r1=530210&r2=530211
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMElement.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMElement.java Wed Apr 18 17:19:26 2007
@@ -218,7 +218,9 @@
     Base parent = this.getParentElement();
     return (lang != null) ? lang :
       (parent != null && parent instanceof Element) ? 
-        ((Element)parent).getLanguage() : null;
+        ((Element)parent).getLanguage() : 
+      (parent != null && parent instanceof Document) ? 
+        ((Document)parent).getLanguage(): null;
   }
 
   public void setLanguage(String language) {