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/14 22:20:20 UTC
svn commit: r575785 - in
/incubator/abdera/java/trunk/extensions/converters/src:
main/java/org/apache/abdera/converter/impl/
test/java/org/apache/abdera/test/converter/
Author: jmsnell
Date: Fri Sep 14 13:20:19 2007
New Revision: 575785
URL: http://svn.apache.org/viewvc?rev=575785&view=rev
Log:
Adding basic extension support
Added:
incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/ExtensionConverter.java
Modified:
incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/CategoryConverter.java
incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/EntryConverter.java
incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/LinkConverter.java
incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/PersonConverter.java
incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/SourceConverter.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/impl/CategoryConverter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/CategoryConverter.java?rev=575785&r1=575784&r2=575785&view=diff
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/CategoryConverter.java (original)
+++ incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/CategoryConverter.java Fri Sep 14 13:20:19 2007
@@ -19,7 +19,6 @@
import java.lang.reflect.AccessibleObject;
-import org.apache.abdera.converter.BaseConverter;
import org.apache.abdera.converter.Conventions;
import org.apache.abdera.converter.ConversionContext;
import org.apache.abdera.converter.ObjectContext;
@@ -29,7 +28,7 @@
import org.apache.abdera.model.Category;
public class CategoryConverter
- extends BaseConverter<Category> {
+ extends ExtensionConverter<Category> {
@Override
protected Category create(
@@ -77,7 +76,7 @@
if (v != null) dest.setTerm(v.toString());
}
- if (accessor.isAnnotationPresent(Scheme.class) ||
+ else if (accessor.isAnnotationPresent(Scheme.class) ||
Scheme.class.equals(conventions.matchConvention(accessor))) {
Object value = eval(accessor, source);
ObjectContext valueContext = new ObjectContext(value,source,accessor);
@@ -86,13 +85,23 @@
if (v != null) dest.setScheme(v.toString());
}
- if (accessor.isAnnotationPresent(Label.class) ||
+ else if (accessor.isAnnotationPresent(Label.class) ||
Label.class.equals(conventions.matchConvention(accessor))) {
Object value = eval(accessor, source);
ObjectContext valueContext = new ObjectContext(value,source,accessor);
StringConverter s = new StringConverter();
StringBuffer v = s.convert(value, valueContext, context);
if (v != null) dest.setLabel(v.toString());
+ }
+
+ else {
+ super.process(
+ source,
+ objectContext,
+ context,
+ conventions,
+ dest,
+ accessor);
}
}
Modified: incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/EntryConverter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/EntryConverter.java?rev=575785&r1=575784&r2=575785&view=diff
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/EntryConverter.java (original)
+++ incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/EntryConverter.java Fri Sep 14 13:20:19 2007
@@ -19,7 +19,6 @@
import java.lang.reflect.AccessibleObject;
-import org.apache.abdera.converter.BaseConverter;
import org.apache.abdera.converter.Conventions;
import org.apache.abdera.converter.ConversionContext;
import org.apache.abdera.converter.ObjectContext;
@@ -43,7 +42,7 @@
import org.apache.abdera.util.Constants;
public class EntryConverter
- extends BaseConverter<Entry> {
+ extends ExtensionConverter<Entry> {
@Override
protected Entry create(
@@ -178,7 +177,16 @@
org.apache.abdera.model.Content content = c.convert(value, valueContext, context);
entry.setContentElement(content);
}
-
+
+ else {
+ super.process(
+ source,
+ objectContext,
+ context,
+ conventions,
+ entry,
+ accessor);
+ }
}
}
Added: incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/ExtensionConverter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/ExtensionConverter.java?rev=575785&view=auto
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/ExtensionConverter.java (added)
+++ incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/ExtensionConverter.java Fri Sep 14 13:20:19 2007
@@ -0,0 +1,93 @@
+/*
+* 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.impl;
+
+import java.lang.reflect.AccessibleObject;
+
+import javax.xml.namespace.QName;
+
+import org.apache.abdera.converter.BaseConverter;
+import org.apache.abdera.converter.Conventions;
+import org.apache.abdera.converter.ConversionContext;
+import org.apache.abdera.converter.ObjectContext;
+import org.apache.abdera.converter.annotation.Extension;
+import org.apache.abdera.model.Element;
+import org.apache.abdera.model.ExtensibleElement;
+
+public abstract class ExtensionConverter<T extends ExtensibleElement>
+ extends BaseConverter<T> {
+
+ @Override
+ protected void process(
+ Object source,
+ ObjectContext objectContext,
+ ConversionContext context,
+ Conventions conventions,
+ T dest,
+ AccessibleObject accessor) {
+ if (accessor.isAnnotationPresent(Extension.class) ||
+ Extension.class.equals(conventions.matchConvention(accessor))) {
+ Object val = eval(accessor, source);
+ Object[] values = toArray(val);
+ for (Object value : values) {
+ ObjectContext valueContext = new ObjectContext(value, source, accessor);
+ Extension ext = valueContext.getAnnotation(Extension.class);
+ QName qname = getQName(ext);
+ if (ext.simple() && qname != null) {
+ StringConverter c = new StringConverter();
+ StringBuffer buf = c.convert(value, valueContext, context);
+ dest.addSimpleExtension(qname, buf.toString());
+ } else {
+ Object converted = context.convert(value, valueContext);
+ if (converted != null && converted instanceof Element) {
+ dest.addExtension((Element)converted);
+ }
+ }
+ }
+ }
+ }
+
+ protected static boolean isUndefined(String value) {
+ return value == null || "##default".equals(value);
+ }
+
+ protected static QName getQName(
+ Extension extension) {
+ QName qname = null;
+ if (extension != null) {
+ if (isUndefined(extension.prefix()) &&
+ isUndefined(extension.ns()) &&
+ isUndefined(extension.name())) {
+ qname = new QName(
+ extension.ns(),
+ extension.name(),
+ extension.prefix());
+ } else if (
+ isUndefined(extension.prefix()) &&
+ !isUndefined(extension.ns()) &&
+ !isUndefined(extension.name())) {
+ qname = new QName(
+ extension.ns(),
+ extension.name());
+ } else if (!isUndefined(extension.name())) {
+ qname = new QName(extension.name());
+ }
+ }
+ return qname;
+ }
+}
Modified: incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/LinkConverter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/LinkConverter.java?rev=575785&r1=575784&r2=575785&view=diff
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/LinkConverter.java (original)
+++ incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/LinkConverter.java Fri Sep 14 13:20:19 2007
@@ -21,7 +21,6 @@
import javax.activation.MimeType;
-import org.apache.abdera.converter.BaseConverter;
import org.apache.abdera.converter.Conventions;
import org.apache.abdera.converter.ConversionContext;
import org.apache.abdera.converter.ObjectContext;
@@ -35,7 +34,7 @@
import org.apache.abdera.model.Link;
public class LinkConverter
- extends BaseConverter<Link> {
+ extends ExtensionConverter<Link> {
@Override
protected Link create(
@@ -89,7 +88,7 @@
if (v != null) dest.setHref(v.toString());
}
- if (accessor.isAnnotationPresent(MediaType.class) ||
+ else if (accessor.isAnnotationPresent(MediaType.class) ||
MediaType.class.equals(conventions.matchConvention(accessor))) {
Object value = eval(accessor, source);
if (value != null && value instanceof MimeType) {
@@ -102,7 +101,7 @@
}
}
- if (accessor.isAnnotationPresent(Title.class) ||
+ else if (accessor.isAnnotationPresent(Title.class) ||
Title.class.equals(conventions.matchConvention(accessor))) {
Object value = eval(accessor, source);
ObjectContext valueContext = new ObjectContext(value,source,accessor);
@@ -111,7 +110,7 @@
if (v != null) dest.setTitle(v.toString());
}
- if (accessor.isAnnotationPresent(HrefLanguage.class) ||
+ else if (accessor.isAnnotationPresent(HrefLanguage.class) ||
HrefLanguage.class.equals(conventions.matchConvention(accessor))) {
Object value = eval(accessor, source);
ObjectContext valueContext = new ObjectContext(value,source,accessor);
@@ -120,7 +119,7 @@
if (v != null) dest.setHrefLang(v.toString());
}
- if (accessor.isAnnotationPresent(Rel.class) ||
+ else if (accessor.isAnnotationPresent(Rel.class) ||
Rel.class.equals(conventions.matchConvention(accessor))) {
Object value = eval(accessor, source);
ObjectContext valueContext = new ObjectContext(value,source,accessor);
@@ -129,7 +128,7 @@
if (v != null) dest.setRel(v.toString());
}
- if (accessor.isAnnotationPresent(Length.class) ||
+ else if (accessor.isAnnotationPresent(Length.class) ||
Length.class.equals(conventions.matchConvention(accessor))) {
Object value = eval(accessor, source);
if (value instanceof Long) {
@@ -148,6 +147,15 @@
}
}
+ else {
+ super.process(
+ source,
+ objectContext,
+ context,
+ conventions,
+ dest,
+ accessor);
+ }
}
}
Modified: incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/PersonConverter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/PersonConverter.java?rev=575785&r1=575784&r2=575785&view=diff
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/PersonConverter.java (original)
+++ incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/PersonConverter.java Fri Sep 14 13:20:19 2007
@@ -25,8 +25,10 @@
import org.apache.abdera.converter.ConversionContext;
import org.apache.abdera.converter.ObjectContext;
import org.apache.abdera.converter.annotation.Email;
+import org.apache.abdera.converter.annotation.Extension;
import org.apache.abdera.converter.annotation.Name;
import org.apache.abdera.converter.annotation.URI;
+import org.apache.abdera.model.Element;
import org.apache.abdera.model.IRIElement;
import org.apache.abdera.model.Person;
import org.apache.abdera.util.Constants;
@@ -76,7 +78,7 @@
if (v != null) dest.setName(v.toString());
}
- if (accessor.isAnnotationPresent(Email.class) ||
+ else if (accessor.isAnnotationPresent(Email.class) ||
Email.class.equals(conventions.matchConvention(accessor))) {
Object value = eval(accessor, source);
ObjectContext valueContext = new ObjectContext(value);
@@ -85,13 +87,34 @@
if (v != null) dest.setEmail(v.toString());
}
- if (accessor.isAnnotationPresent(URI.class) ||
+ else if (accessor.isAnnotationPresent(URI.class) ||
URI.class.equals(conventions.matchConvention(accessor))) {
Object value = eval(accessor, source);
ObjectContext valueContext = new ObjectContext(value);
IRIConverter c = new IRIConverter(Constants.URI);
IRIElement iri = c.convert(value, valueContext, context);
if (iri != null) dest.setUriElement(iri);
+ }
+
+ else if (accessor.isAnnotationPresent(Extension.class) ||
+ Extension.class.equals(conventions.matchConvention(accessor))) {
+ Extension ext = objectContext.getAnnotation(Extension.class);
+ Object val = eval(accessor, source);
+ Object[] values = toArray(val);
+ for (Object value : values) {
+ ObjectContext valueContext = new ObjectContext(value, source, accessor);
+ QName qname = ExtensionConverter.getQName(ext);
+ if (ext.simple() && qname != null) {
+ StringConverter c = new StringConverter();
+ StringBuffer buf = c.convert(value, valueContext, context);
+ dest.addSimpleExtension(qname, buf.toString());
+ } else {
+ Object converted = context.convert(value, valueContext);
+ if (converted != null && converted instanceof Element) {
+ dest.addExtension((Element)converted);
+ }
+ }
+ }
}
}
Modified: incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/SourceConverter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/SourceConverter.java?rev=575785&r1=575784&r2=575785&view=diff
==============================================================================
--- incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/SourceConverter.java (original)
+++ incubator/abdera/java/trunk/extensions/converters/src/main/java/org/apache/abdera/converter/impl/SourceConverter.java Fri Sep 14 13:20:19 2007
@@ -19,7 +19,6 @@
import java.lang.reflect.AccessibleObject;
-import org.apache.abdera.converter.BaseConverter;
import org.apache.abdera.converter.Conventions;
import org.apache.abdera.converter.ConversionContext;
import org.apache.abdera.converter.ObjectContext;
@@ -43,7 +42,7 @@
import org.apache.abdera.util.Constants;
public class SourceConverter
- extends BaseConverter<Source> {
+ extends ExtensionConverter<Source> {
@Override
protected Source create(
@@ -177,6 +176,16 @@
ObjectContext valueContext = new ObjectContext(value,source,accessor);
IRIElement iri = c.convert(value, valueContext, context);
feed.setLogoElement(iri);
+ }
+
+ else {
+ super.process(
+ source,
+ objectContext,
+ context,
+ conventions,
+ feed,
+ accessor);
}
}
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=575785&r1=575784&r2=575785&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 Fri Sep 14 13:20:19 2007
@@ -30,6 +30,7 @@
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.Extension;
import org.apache.abdera.converter.annotation.Feed;
import org.apache.abdera.converter.annotation.Generator;
import org.apache.abdera.converter.annotation.Link;
@@ -94,6 +95,8 @@
//@MediaType("text/html") public IRI content = new IRI("http://example.com");
public DataHandler content = new DataHandler(new URLDataSource(getUrl()));
+
+ @Extension(simple=true,name="foo",ns="urn:foo") public String ext = "extension";
private static URL getUrl() {
try {