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 2006/09/13 20:47:58 UTC

svn commit: r443068 - in /incubator/abdera/java/trunk: core/src/main/java/org/apache/abdera/model/ core/src/main/java/org/apache/abdera/util/ parser/src/main/java/org/apache/abdera/parser/stax/

Author: jmsnell
Date: Wed Sep 13 11:47:57 2006
New Revision: 443068

URL: http://svn.apache.org/viewvc?view=rev&rev=443068
Log:
Per RFC4287 and APP Draft -10 section 11.2, alternate and edit-media links may be selected by 
a combination of the hreflang and type attributes. Provide getAlternateLink and getEditMediaLink 
alternatives that select the link based on hreflang and type.

Fix the algorithm in MimeTypeHelper.isMatch so that wildcards (e.g. */*, text/*, etc) are properly
supported.


Modified:
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Entry.java
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Source.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/FOMElement.java
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMSource.java

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Entry.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Entry.java?view=diff&rev=443068&r1=443067&r2=443068
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Entry.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Entry.java Wed Sep 13 11:47:57 2006
@@ -581,6 +581,12 @@
   Link getAlternateLink();
   
   /**
+   * Returns the first alternate link matching the specified type and hreflang
+   * @throws MimeTypeParseException 
+   */
+  Link getAlternateLink(String type, String hreflang) throws MimeTypeParseException;
+  
+  /**
    * Returns this entries first enclosure link
    */
   Link getEnclosureLink();
@@ -596,14 +602,22 @@
   Link getEditMediaLink();
   
   /**
+   * Returns the first edit-media link matching the specified type and hreflang
+   * @throws MimeTypeParseException 
+   */
+  Link getEditMediaLink(String type, String hreflang) throws MimeTypeParseException;
+  
+  /**
    * Returns this entries first self link
    */
   Link getSelfLink();
  
   URI getLinkResolvedHref(String rel) throws URISyntaxException;
   URI getAlternateLinkResolvedHref() throws URISyntaxException;
+  URI getAlternateLinkResolvedHref(String type, String hreflang) throws URISyntaxException, MimeTypeParseException;
   URI getEnclosureLinkResolvedHref() throws URISyntaxException;
   URI getEditLinkResolvedHref() throws URISyntaxException;
   URI getEditMediaLinkResolvedHref() throws URISyntaxException;
+  URI getEditMediaLinkResolvedHref(String type, String hreflang) throws URISyntaxException, MimeTypeParseException;
   URI getSelfLinkResolvedHref() throws URISyntaxException;
 }

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Source.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Source.java?view=diff&rev=443068&r1=443067&r2=443068
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Source.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Source.java Wed Sep 13 11:47:57 2006
@@ -468,9 +468,12 @@
    */
   Link getAlternateLink();
   
+  Link getAlternateLink(String type, String hreflang) throws MimeTypeParseException;
+  
   URI getLinkResolvedHref(String rel) throws URISyntaxException;
   URI getSelfLinkResolvedHref() throws URISyntaxException;
   URI getAlternateLinkResolvedHref() throws URISyntaxException;
+  URI getAlternateLinkResolvedHref(String type, String hreflang) throws URISyntaxException, MimeTypeParseException;
   
   Collection getCollection();
   

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=443068&r1=443067&r2=443068
==============================================================================
--- 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 Wed Sep 13 11:47:57 2006
@@ -29,14 +29,36 @@
 import org.apache.abdera.model.Service;
 
 public class MimeTypeHelper {
-
+   
   public static boolean isMatch(String a, String b) {
+    if ((a == null || a.length() == 0) && 
+        (b == null || b.length() == 0)) 
+          return true;
     boolean answer = false;
     try {
       MimeType mta = new MimeType(a);
-      answer = mta.match(b);
+      MimeType mtb = new MimeType(b);
+      return isMatch(mta,mtb);
     } catch (Exception e) {}
     return answer;
+  }
+  
+  public static boolean isMatch(MimeType a, MimeType b) {
+    try {
+      final MimeType WILDCARD = new MimeType("*/*");
+      if (a == null || b == null) return true;
+      if (a.match(b)) return true;
+      if (a.equals(WILDCARD)) return true;
+      if (a.getPrimaryType().equals("*")) {
+        MimeType c = new MimeType(b.getPrimaryType(), a.getSubType());
+        return c.match(b);
+      }
+      if (b.getPrimaryType().equals("*")) {
+        MimeType c = new MimeType(a.getPrimaryType(), b.getSubType());
+        return c.match(a);
+      }
+    } catch (Exception e) {}
+    return false;
   }
   
   public static boolean isApp(String a) {

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=443068&r1=443067&r2=443068
==============================================================================
--- 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 Sep 13 11:47:57 2006
@@ -29,6 +29,8 @@
 import java.util.List;
 import java.util.Locale;
 
+import javax.activation.MimeType;
+import javax.activation.MimeTypeParseException;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
@@ -39,11 +41,13 @@
 import org.apache.abdera.model.Div;
 import org.apache.abdera.model.Document;
 import org.apache.abdera.model.Element;
+import org.apache.abdera.model.Link;
 import org.apache.abdera.model.Text;
 import org.apache.abdera.parser.Parser;
 import org.apache.abdera.parser.ParserOptions;
 import org.apache.abdera.parser.stax.util.FOMList;
 import org.apache.abdera.util.Constants;
+import org.apache.abdera.util.MimeTypeHelper;
 import org.apache.abdera.util.URIHelper;
 import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.OMComment;
@@ -586,4 +590,23 @@
     return locale;
   }
 
+  protected Link selectLink(
+    List<Link> links, 
+    String type, 
+    String hreflang) 
+      throws MimeTypeParseException {
+    for (Link link : links) {
+      MimeType mt = link.getMimeType();
+      boolean typematch =  
+        MimeTypeHelper.isMatch(
+          (mt != null) ? mt.toString() : null, type);
+      boolean langmatch = 
+        "*".equals(hreflang) ||
+        ((hreflang != null) ? 
+          hreflang.equals(link.getHrefLang()) : 
+          link.getHrefLang() == null);
+      if (typematch && langmatch) return link;
+    }
+    return null;
+  }
 }

Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java?view=diff&rev=443068&r1=443067&r2=443068
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java Wed Sep 13 11:47:57 2006
@@ -758,4 +758,36 @@
     Content content = getContentElement();
     return (content != null) ? content.getMimeType() : null;
   }
+
+  public Link getAlternateLink(
+    String type, 
+    String hreflang) 
+      throws MimeTypeParseException {
+    return selectLink(getLinks(Link.REL_ALTERNATE), type, hreflang);
+  }
+
+  public java.net.URI getAlternateLinkResolvedHref(
+    String type, 
+    String hreflang) 
+      throws URISyntaxException, 
+             MimeTypeParseException {
+    Link link = getAlternateLink(type, hreflang);
+    return (link != null) ? link.getResolvedHref() : null;
+  }
+
+  public Link getEditMediaLink(
+    String type, 
+    String hreflang) 
+      throws MimeTypeParseException {
+    return selectLink(getLinks(Link.REL_EDIT_MEDIA), type, hreflang);
+  }
+
+  public java.net.URI getEditMediaLinkResolvedHref(
+    String type, 
+    String hreflang) 
+      throws URISyntaxException, 
+             MimeTypeParseException {
+    Link link = getEditMediaLink(type, hreflang);
+    return (link != null) ? link.getResolvedHref() : null;
+  }
 }

Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMSource.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMSource.java?view=diff&rev=443068&r1=443067&r2=443068
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMSource.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMSource.java Wed Sep 13 11:47:57 2006
@@ -573,4 +573,21 @@
     else 
       _removeChildren(COLLECTION, false);
   }
+  
+  public Link getAlternateLink(
+    String type, 
+    String hreflang) 
+      throws MimeTypeParseException {
+    return selectLink(getLinks(Link.REL_ALTERNATE), type, hreflang);
+  }
+
+  public java.net.URI getAlternateLinkResolvedHref(
+    String type, 
+    String hreflang) 
+      throws URISyntaxException, 
+             MimeTypeParseException {
+    Link link = getAlternateLink(type, hreflang);
+    return (link != null) ? link.getResolvedHref() : null;
+  }
+
 }



Re: svn commit: r443068 - in /incubator/abdera/java/trunk: core/src/main/java/org/apache/abdera/model/ core/src/main/java/org/apache/abdera/util/ parser/src/main/java/org/apache/abdera/parser/stax/

Posted by Garrett Rooney <ro...@electricjellyfish.net>.
On 9/13/06, jmsnell@apache.org <jm...@apache.org> wrote:

> +  public static boolean isMatch(MimeType a, MimeType b) {
> +    try {
> +      final MimeType WILDCARD = new MimeType("*/*");
> +      if (a == null || b == null) return true;
> +      if (a.match(b)) return true;
> +      if (a.equals(WILDCARD)) return true;
> +      if (a.getPrimaryType().equals("*")) {
> +        MimeType c = new MimeType(b.getPrimaryType(), a.getSubType());
> +        return c.match(b);
> +      }
> +      if (b.getPrimaryType().equals("*")) {
> +        MimeType c = new MimeType(a.getPrimaryType(), b.getSubType());
> +        return c.match(a);
> +      }
> +    } catch (Exception e) {}
> +    return false;

It seems like WILDCARD would be a nice chance for a static member, to
avoid having to allocate one each time through here...

-garrett