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/09/13 23:08:29 UTC

svn commit: r575452 - in /incubator/abdera/java/trunk/extensions/converters/src: main/java/org/apache/abdera/converter/ main/java/org/apache/abdera/converter/annotation/ test/java/org/apache/abdera/test/converter/

Author: jmsnell
Date: Thu Sep 13 14:08:28 2007
New Revision: 575452

URL: http://svn.apache.org/viewvc?rev=575452&view=rev
Log:
More work on the annotation converter

Removed:
    incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Direction.java
Modified:
    incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/BaseConverter.java
    incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/ConventionConversionContext.java
    incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/DefaultConventions.java
    incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Entry.java
    incubator/abdera/java/trunk/extensions/converters/src/test/java/org/apache/abdera/test/converter/ConverterTest.java

Modified: incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/BaseConverter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/BaseConverter.java?rev=575452&r1=575451&r2=575452&view=diff
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/BaseConverter.java (original)
+++ incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/BaseConverter.java Thu Sep 13 14:08:28 2007
@@ -74,6 +74,20 @@
     T dest,
     AccessibleObject accessor) {}
   
+  private Document getDocument(T obj) {
+    if (obj == null) return null;
+    Document doc = null;
+    if (obj instanceof Document) {
+      doc = (Document) obj;
+    } else if (obj instanceof Element) {
+      Element element = (Element) obj;
+      Document parent = element.getDocument();
+      Element root = parent.getRoot();
+      if (root.equals(element)) doc = parent;
+    }
+    return doc;
+  }
+  
   @Override 
   public T convert(
     Object source, 
@@ -122,54 +136,57 @@
             if (dest instanceof Document) ((Document)dest).setBaseUri(iri);
             else if (dest instanceof Element) ((Element)dest).setBaseUri(iri);
           }
-        } else if (dest instanceof Document && 
-          accessor.isAnnotationPresent(Slug.class) || 
+        } else if (accessor.isAnnotationPresent(Slug.class) || 
           Slug.class.equals(conventions.matchConvention(accessor))) {
             Object value = eval(accessor,source);
             ObjectContext valueContext = new ObjectContext(value,source,accessor);
             StringConverter c = new StringConverter();
             StringBuffer buf = c.convert(value, valueContext, context);
-            if (buf != null) ((Document)dest).setSlug(buf.toString());
-        } else if (dest instanceof Document && 
-            accessor.isAnnotationPresent(LastModified.class) || 
+            Document doc = getDocument(dest);
+            if (doc != null && buf != null) doc.setSlug(buf.toString());
+        } else if (accessor.isAnnotationPresent(LastModified.class) || 
             LastModified.class.equals(conventions.matchConvention(accessor))) {
           Object value = eval(accessor,source);
-          Document doc = (Document)dest;
-          if (value instanceof Date) {
-            doc.setLastModified((Date)value);
-          } else if (value instanceof Calendar) {
-            Calendar cal = (Calendar)value;
-            doc.setLastModified(cal.getTime());
-          } else if (value instanceof Long) {
-            Long l = (Long) value;
-            doc.setLastModified(new Date(l.longValue()));
-          } else if (value instanceof String) {
-            doc.setLastModified(AtomDate.parse((String)value));
-          } else {
-            StringConverter s = new StringConverter();
-            StringBuffer v = s.convert(source, objectContext, context);
-            if (v != null) doc.setLastModified(AtomDate.parse(v.toString()));
+          Document doc = getDocument(dest);
+          if (doc != null) {
+            if (value instanceof Date) {
+              doc.setLastModified((Date)value);
+            } else if (value instanceof Calendar) {
+              Calendar cal = (Calendar)value;
+              doc.setLastModified(cal.getTime());
+            } else if (value instanceof Long) {
+              Long l = (Long) value;
+              doc.setLastModified(new Date(l.longValue()));
+            } else if (value instanceof String) {
+              doc.setLastModified(AtomDate.parse((String)value));
+            } else {
+              StringConverter s = new StringConverter();
+              StringBuffer v = s.convert(source, objectContext, context);
+              if (v != null) doc.setLastModified(AtomDate.parse(v.toString()));
+            }
           }
-        } else if (dest instanceof Document && 
-            accessor.isAnnotationPresent(Charset.class) || 
+        } else if (accessor.isAnnotationPresent(Charset.class) || 
             Charset.class.equals(conventions.matchConvention(accessor))) {
           Object value = eval(accessor,source);
           ObjectContext valueContext = new ObjectContext(value,source,accessor);
           StringConverter c = new StringConverter();
           StringBuffer buf = c.convert(value, valueContext, context);
-          if (buf != null) ((Document)dest).setCharset(buf.toString());
-        } else if (dest instanceof Document && 
-            accessor.isAnnotationPresent(EntityTag.class) || 
+          Document doc = getDocument(dest);
+          if (doc != null && buf != null) doc.setCharset(buf.toString());
+        } else if (accessor.isAnnotationPresent(EntityTag.class) || 
             EntityTag.class.equals(conventions.matchConvention(accessor))) {
-              Object value = eval(accessor,source);
-              if (value instanceof org.apache.abdera.util.EntityTag) {
-                ((Document)dest).setEntityTag((org.apache.abdera.util.EntityTag)value);
-              } else {
-                ObjectContext valueContext = new ObjectContext(value,source,accessor);
-                StringConverter c = new StringConverter();
-                StringBuffer buf = c.convert(value, valueContext, context);
-                if (buf != null) ((Document)dest).setEntityTag(buf.toString());
-              }
+          Document doc = getDocument(dest);
+          if (doc != null) {
+            Object value = eval(accessor,source);
+            if (value instanceof org.apache.abdera.util.EntityTag) {
+              doc.setEntityTag((org.apache.abdera.util.EntityTag)value);
+            } else {
+              ObjectContext valueContext = new ObjectContext(value,source,accessor);
+              StringConverter c = new StringConverter();
+              StringBuffer buf = c.convert(value, valueContext, context);
+              if (buf != null) doc.setEntityTag(buf.toString());
+            }
+          }
         } else {
           process(source, objectContext, context, conventions, dest, accessor);
         }

Modified: incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/ConventionConversionContext.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/ConventionConversionContext.java?rev=575452&r1=575451&r2=575452&view=diff
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/ConventionConversionContext.java (original)
+++ incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/ConventionConversionContext.java Thu Sep 13 14:08:28 2007
@@ -22,6 +22,7 @@
 
 import org.apache.abdera.Abdera;
 import org.apache.abdera.converter.annotation.Feed;
+import org.apache.abdera.converter.annotation.Entry;
 
 public class ConventionConversionContext 
   extends DefaultConversionContext {
@@ -86,6 +87,5 @@
   }
   
   @SuppressWarnings("unchecked") private static final Class[] annotations = 
-  {Feed.class, 
-  };
+  {Feed.class, Entry.class};
 }

Modified: incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/DefaultConventions.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/DefaultConventions.java?rev=575452&r1=575451&r2=575452&view=diff
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/DefaultConventions.java (original)
+++ incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/DefaultConventions.java Thu Sep 13 14:08:28 2007
@@ -30,7 +30,6 @@
 import org.apache.abdera.converter.annotation.ContentType;
 import org.apache.abdera.converter.annotation.Contributor;
 import org.apache.abdera.converter.annotation.Control;
-import org.apache.abdera.converter.annotation.Direction;
 import org.apache.abdera.converter.annotation.Draft;
 import org.apache.abdera.converter.annotation.Edited;
 import org.apache.abdera.converter.annotation.Email;
@@ -83,7 +82,6 @@
     ContentType.class, 
     Contributor.class, 
     Control.class, 
-    Direction.class, 
     Draft.class, 
     Edited.class, 
     Email.class, 

Modified: incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Entry.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Entry.java?rev=575452&r1=575451&r2=575452&view=diff
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Entry.java (original)
+++ incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Entry.java Thu Sep 13 14:08:28 2007
@@ -17,15 +17,18 @@
 */
 package org.apache.abdera.converter.annotation;
 
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
+import org.apache.abdera.converter.impl.EntryConverter;
+
 @Retention(RUNTIME)
 @Target({TYPE,METHOD,FIELD})
 @Convention(".*entry|.*entries")
+@Converter(EntryConverter.class)
 public @interface Entry {}

Modified: incubator/abdera/java/trunk/extensions/converters/src/test/java/org/apache/abdera/test/converter/ConverterTest.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/test/java/org/apache/abdera/test/converter/ConverterTest.java?rev=575452&r1=575451&r2=575452&view=diff
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/test/java/org/apache/abdera/test/converter/ConverterTest.java (original)
+++ incubator/abdera/java/trunk/extensions/converters/src/test/java/org/apache/abdera/test/converter/ConverterTest.java Thu Sep 13 14:08:28 2007
@@ -29,12 +29,14 @@
 import org.apache.abdera.converter.ConventionConversionContext;
 import org.apache.abdera.converter.ConversionContext;
 import org.apache.abdera.converter.annotation.Category;
+import org.apache.abdera.converter.annotation.Entry;
 import org.apache.abdera.converter.annotation.Feed;
 import org.apache.abdera.converter.annotation.Generator;
 import org.apache.abdera.converter.annotation.Link;
 import org.apache.abdera.converter.annotation.Rel;
 import org.apache.abdera.converter.annotation.Scheme;
 import org.apache.abdera.converter.annotation.TextType;
+import org.apache.abdera.model.Document;
 import org.apache.abdera.model.Text;
 
 public class ConverterTest extends TestCase {
@@ -46,10 +48,16 @@
     
     FooFeed fooFeed = new FooFeed();
     
-    Object object = context.convert(fooFeed);
+    org.apache.abdera.model.Feed feed = context.convert(fooFeed);
     
-    System.out.println(object);
+    System.out.println(feed);
     
+    Document<org.apache.abdera.model.Feed> doc = feed.getDocument();
+    System.out.println(doc.getSlug());
+    
+    FooEntry fooEntry = new FooEntry();
+    org.apache.abdera.model.Entry entry = context.convert(fooEntry);
+    System.out.println(entry);
   }
   
   @Feed
@@ -66,8 +74,12 @@
     @Generator(version="1.0",uri="http://example.org") public String generator = "Bob";
     
     public FooEntry[] entries = new FooEntry[] { new FooEntry() };
+    
+    public String slug = "slug";
+    public Date lastmodified = new Date();
   }
   
+  @Entry
   public static class FooEntry {
     public String id = "http://example.org/1/1";
     @TextType(Text.Type.XHTML) public String title = "The title";