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 22:34:22 UTC

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

Author: jmsnell
Date: Thu Sep 13 13:34:21 2007
New Revision: 575441

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

Added:
    incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Charset.java
    incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/EntityTag.java
    incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/LastModified.java
    incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Slug.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/DefaultConventions.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=575441&r1=575440&r2=575441&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 13:34:21 2007
@@ -22,14 +22,31 @@
 import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.net.URI;
+import java.net.URL;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Collection;
+import java.util.Date;
 import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.abdera.converter.annotation.BaseURI;
+import org.apache.abdera.converter.annotation.Charset;
+import org.apache.abdera.converter.annotation.EntityTag;
+import org.apache.abdera.converter.annotation.Language;
+import org.apache.abdera.converter.annotation.LastModified;
+import org.apache.abdera.converter.annotation.Slug;
+import org.apache.abdera.converter.impl.StringConverter;
+import org.apache.abdera.i18n.iri.IRI;
+import org.apache.abdera.model.AtomDate;
+import org.apache.abdera.model.Base;
+import org.apache.abdera.model.Document;
+import org.apache.abdera.model.Element;
+
 @SuppressWarnings("unchecked")
 public abstract class BaseConverter<T> 
   extends Converter<T> {
@@ -72,7 +89,90 @@
         ((ConventionConversionContext)context)
           .getConventions();
       for (AccessibleObject accessor : objectContext.getAccessors()) {
-        process(source, objectContext, context, conventions, dest, accessor);
+        if (dest instanceof Base && 
+            accessor.isAnnotationPresent(Language.class) || 
+            Language.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) {
+            if (dest instanceof Document) ((Document)dest).setLanguage(buf.toString());
+            else if (dest instanceof Element) ((Element)dest).setLanguage(buf.toString());
+          }
+        } else if (dest instanceof Base &&
+            accessor.isAnnotationPresent(BaseURI.class) || 
+            BaseURI.class.equals(conventions.matchConvention(accessor))) {
+          
+          Object value = eval(accessor,source);
+          String iri = null;
+          if (value instanceof URI) {
+            iri = value.toString();
+          } else if (value instanceof URL) {
+            iri = value.toString();
+          } else if (value instanceof IRI) {
+            iri = value.toString();
+          } else {
+            ObjectContext valueContext = new ObjectContext(value,source,accessor);
+            StringConverter c = new StringConverter();
+            StringBuffer buf = c.convert(value, valueContext, context);
+            iri = buf.toString();
+          }
+          if (iri != null) {
+            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) || 
+          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) || 
+            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()));
+          }
+        } else if (dest instanceof Document && 
+            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) || 
+            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());
+              }
+        } else {
+          process(source, objectContext, context, conventions, dest, accessor);
+        }
       }      
       finish(
         source, 

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=575441&r1=575440&r2=575441&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 13:34:21 2007
@@ -24,6 +24,7 @@
 import org.apache.abdera.converter.annotation.BaseURI;
 import org.apache.abdera.converter.annotation.Categories;
 import org.apache.abdera.converter.annotation.Category;
+import org.apache.abdera.converter.annotation.Charset;
 import org.apache.abdera.converter.annotation.Collection;
 import org.apache.abdera.converter.annotation.Content;
 import org.apache.abdera.converter.annotation.ContentType;
@@ -33,6 +34,7 @@
 import org.apache.abdera.converter.annotation.Draft;
 import org.apache.abdera.converter.annotation.Edited;
 import org.apache.abdera.converter.annotation.Email;
+import org.apache.abdera.converter.annotation.EntityTag;
 import org.apache.abdera.converter.annotation.Entry;
 import org.apache.abdera.converter.annotation.Extension;
 import org.apache.abdera.converter.annotation.Generator;
@@ -42,6 +44,7 @@
 import org.apache.abdera.converter.annotation.Icon;
 import org.apache.abdera.converter.annotation.Label;
 import org.apache.abdera.converter.annotation.Language;
+import org.apache.abdera.converter.annotation.LastModified;
 import org.apache.abdera.converter.annotation.Length;
 import org.apache.abdera.converter.annotation.Link;
 import org.apache.abdera.converter.annotation.Logo;
@@ -51,6 +54,7 @@
 import org.apache.abdera.converter.annotation.Rel;
 import org.apache.abdera.converter.annotation.Rights;
 import org.apache.abdera.converter.annotation.Scheme;
+import org.apache.abdera.converter.annotation.Slug;
 import org.apache.abdera.converter.annotation.Source;
 import org.apache.abdera.converter.annotation.Src;
 import org.apache.abdera.converter.annotation.Subtitle;
@@ -111,7 +115,11 @@
     URI.class, 
     Value.class, 
     Version.class, 
-    Workspace.class
+    Workspace.class,
+    Slug.class,
+    EntityTag.class,
+    Charset.class,
+    LastModified.class
    };
   
   public DefaultConventions() {

Added: incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Charset.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Charset.java?rev=575441&view=auto
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Charset.java (added)
+++ incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Charset.java Thu Sep 13 13:34:21 2007
@@ -0,0 +1,30 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+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 java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Retention(RUNTIME)
+@Target({METHOD,FIELD})
+@Convention(".*charset")
+public @interface Charset {}

Added: incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/EntityTag.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/EntityTag.java?rev=575441&view=auto
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/EntityTag.java (added)
+++ incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/EntityTag.java Thu Sep 13 13:34:21 2007
@@ -0,0 +1,30 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+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 java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Retention(RUNTIME)
+@Target({METHOD,FIELD})
+@Convention(".*entitytag")
+public @interface EntityTag {}

Added: incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/LastModified.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/LastModified.java?rev=575441&view=auto
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/LastModified.java (added)
+++ incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/LastModified.java Thu Sep 13 13:34:21 2007
@@ -0,0 +1,30 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+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 java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Retention(RUNTIME)
+@Target({METHOD,FIELD})
+@Convention(".*lastmodified")
+public @interface LastModified {}

Added: incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Slug.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Slug.java?rev=575441&view=auto
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Slug.java (added)
+++ incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/annotation/Slug.java Thu Sep 13 13:34:21 2007
@@ -0,0 +1,30 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+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 java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Retention(RUNTIME)
+@Target({METHOD,FIELD})
+@Convention(".*slug")
+public @interface Slug {}