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/20 21:22:02 UTC

svn commit: r530895 - in /incubator/abdera/java/trunk: core/src/main/java/org/apache/abdera/model/Collection.java core/src/main/java/org/apache/abdera/util/MimeTypeHelper.java parser/src/main/java/org/apache/abdera/parser/stax/FOMCollection.java

Author: jmsnell
Date: Fri Apr 20 12:22:01 2007
New Revision: 530895

URL: http://svn.apache.org/viewvc?view=rev&rev=530895
Log:
The APP spec is changing the definition of the <accept> header.
Instead of <accept>entry,image/*</accept>, it's going to be multiple
elements...

  <accept>entry</accept>
  <accept>image/*</accept>
  
It's also likely that the "entry" special value will be changed to the full entry media type:

  application/atom+xml;type="entry"

Modified:
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Collection.java
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/MimeTypeHelper.java
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMCollection.java

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Collection.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Collection.java?view=diff&rev=530895&r1=530894&r2=530895
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Collection.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Collection.java Fri Apr 20 12:22:01 2007
@@ -102,12 +102,6 @@
    * @throws IRISyntaxException if the href attribute is malformed 
    */
   void setHref(String href) throws IRISyntaxException;
-
-  /**
-   * Returns the app:accept element
-   * @return The app:accept element
-   */
-  Element getAcceptElement();
   
   /**
    * Returns the listing of media-ranges allowed for this collection

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/MimeTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/MimeTypeHelper.java?view=diff&rev=530895&r1=530894&r2=530895
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/MimeTypeHelper.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/MimeTypeHelper.java Fri Apr 20 12:22:01 2007
@@ -20,9 +20,11 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
+import java.util.Enumeration;
 import java.util.List;
 
 import javax.activation.MimeType;
+import javax.activation.MimeTypeParameterList;
 import javax.activation.MimeTypeParseException;
 
 import org.apache.abdera.model.Base;
@@ -70,15 +72,30 @@
   public static boolean isMatch(MimeType a, MimeType b) {
     try {
       if (a == null || b == null) return true;
-      if (a.match(b)) return true;
+      if (a.match(b)) {
+        MimeTypeParameterList aparams = a.getParameters();
+        MimeTypeParameterList bparams = b.getParameters();
+        if (aparams.isEmpty() && bparams.isEmpty()) return true;
+        if (aparams.isEmpty() && !bparams.isEmpty()) return false;
+        if (!aparams.isEmpty() && bparams.isEmpty()) return false;
+        boolean answer = true;
+        for (Enumeration e = aparams.getNames(); e.hasMoreElements();) {
+          String aname = (String)e.nextElement();
+          String avalue = aparams.get(aname);
+          String bvalue = bparams.get(aname);
+          if (avalue.equals(bvalue)) answer = true;
+          else { answer = false; break; }
+        }
+        return answer;
+      }
       if (a.equals(WILDCARD)) return true;
       if (a.getPrimaryType().equals("*")) {
         MimeType c = new MimeType(b.getPrimaryType(), a.getSubType());
-        return c.match(b);
+        return isMatch(c,b);
       }
       if (b.getPrimaryType().equals("*")) {
         MimeType c = new MimeType(a.getPrimaryType(), b.getSubType());
-        return c.match(a);
+        return isMatch(a,c);
       }
     } catch (Exception e) {}
     return false;

Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMCollection.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMCollection.java?view=diff&rev=530895&r1=530894&r2=530895
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMCollection.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMCollection.java Fri Apr 20 12:22:01 2007
@@ -17,6 +17,8 @@
 */
 package org.apache.abdera.parser.stax;
 
+import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 import javax.activation.MimeType;
@@ -42,8 +44,8 @@
   extends FOMExtensibleElement 
   implements Collection {
 
+  private static final String[] ENTRY = {"application/atom+xml;type=\"entry\""};
   private static final String[] EMPTY = new String[0];
-  private static final String[] ENTRY = new String[] {"entry"};
   
   private static final long serialVersionUID = -5291734055253987136L;
 
@@ -143,21 +145,25 @@
       removeAttribute(HREF);
   }
   
-  public Element getAcceptElement() {
-    return getFirstChild(ACCEPT);
-  }
-  
   public String[] getAccept(){
-    String accept = _getElementValue(ACCEPT);
-    if (accept == null) return ENTRY;
-    else accept = accept.trim();
-    if (accept.length() == 0) return EMPTY;
-    String[] list = accept.split("\\s*,\\s*(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
-    return MimeTypeHelper.condense(list);
+    List<String> accept = new ArrayList<String>();
+    for (Iterator i = getChildrenWithName(ACCEPT); i.hasNext();) {
+      Element e = (Element) i.next();
+      String t = e.getText();
+      if (t != null) { 
+        accept.add(t.trim());
+      }
+    }
+    if (accept.size() > 0) {
+      String[] list = accept.toArray(new String[accept.size()]);
+      return MimeTypeHelper.condense(list);
+    } else {
+      return EMPTY;
+    }
   }
 
   public void setAccept(String... mediaRanges) {
-    if (mediaRanges != null) {
+    if (mediaRanges != null || mediaRanges.length == 0) {
       mediaRanges = MimeTypeHelper.condense(mediaRanges);
       StringBuffer value = new StringBuffer();
       for (String type : mediaRanges) {
@@ -165,17 +171,16 @@
           value.append(",");
         value.append(type);
       }
-      _setElementValue(ACCEPT, value.toString());
+      addSimpleExtension(ACCEPT, value.toString());
     } else {
-      _removeChildren(ACCEPT, false);
+      _removeChildren(ACCEPT, true);
     }
   }
 
   public boolean accepts(String mediaType) {
     String[] accept = getAccept();
+    if (accept.length == 0) accept = ENTRY;
     for (String a : accept) {
-      if (mediaType.equalsIgnoreCase("entry") && 
-          a.equalsIgnoreCase("entry")) return true;
       if (MimeTypeHelper.isMatch(a, mediaType)) return true;
     }
     return false;