You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2009/04/22 13:30:06 UTC

svn commit: r767473 - in /felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag: DefaultAnnotationTagProvider.java PropertyTag.java ReferenceTag.java Util.java

Author: cziegeler
Date: Wed Apr 22 11:30:05 2009
New Revision: 767473

URL: http://svn.apache.org/viewvc?rev=767473&view=rev
Log:
FELIX-1010 : Fix several issues with the annotations

Modified:
    felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/DefaultAnnotationTagProvider.java
    felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/PropertyTag.java
    felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ReferenceTag.java
    felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/Util.java

Modified: felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/DefaultAnnotationTagProvider.java
URL: http://svn.apache.org/viewvc/felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/DefaultAnnotationTagProvider.java?rev=767473&r1=767472&r2=767473&view=diff
==============================================================================
--- felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/DefaultAnnotationTagProvider.java (original)
+++ felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/DefaultAnnotationTagProvider.java Wed Apr 22 11:30:05 2009
@@ -89,17 +89,17 @@
 
         // check for multi-annotations
         else if (annotation.getType().getJavaClass().getFullyQualifiedName().equals(Properties.class.getName())) {
-            final com.thoughtworks.qdox.model.Annotation[] properties = (com.thoughtworks.qdox.model.Annotation[])annotation.getNamedParameter("value");
+            final List<com.thoughtworks.qdox.model.Annotation> properties = (List<com.thoughtworks.qdox.model.Annotation>)annotation.getNamedParameter("value");
             for (com.thoughtworks.qdox.model.Annotation property : properties) {
                 tags.add(new PropertyTag(property, description));
             }
         } else if (annotation.getType().getJavaClass().getFullyQualifiedName().equals(Services.class.getName())) {
-            final com.thoughtworks.qdox.model.Annotation[] services = (com.thoughtworks.qdox.model.Annotation[])annotation.getNamedParameter("value");
+            final List<com.thoughtworks.qdox.model.Annotation> services = (List<com.thoughtworks.qdox.model.Annotation>)annotation.getNamedParameter("value");
             for (com.thoughtworks.qdox.model.Annotation service : services) {
                 tags.add(new ServiceTag(service, description));
             }
         } else if (annotation.getType().getJavaClass().getFullyQualifiedName().equals(References.class.getName())) {
-            final com.thoughtworks.qdox.model.Annotation[] references = (com.thoughtworks.qdox.model.Annotation[])annotation.getNamedParameter("value");
+            final List<com.thoughtworks.qdox.model.Annotation> references = (List<com.thoughtworks.qdox.model.Annotation>)annotation.getNamedParameter("value");
             for (com.thoughtworks.qdox.model.Annotation reference : references) {
                 tags.add(new ReferenceTag(reference, description, field));
             }

Modified: felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/PropertyTag.java
URL: http://svn.apache.org/viewvc/felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/PropertyTag.java?rev=767473&r1=767472&r2=767473&view=diff
==============================================================================
--- felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/PropertyTag.java (original)
+++ felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/PropertyTag.java Wed Apr 22 11:30:05 2009
@@ -88,7 +88,14 @@
             }
 
             public String[] value() {
-                return Util.getStringValues(annotation, "value", Property.class);
+                // value property can be used as String[] or String property
+                Object obj = annotation.getNamedParameter("value");
+                if (obj instanceof List) {
+                    return Util.getStringValues(annotation, "value", Property.class);
+                }
+                else {
+                    return new String[] { Util.getStringValue(annotation, "value", Property.class) };
+                }
             }
 
             public Class<? extends java.lang.annotation.Annotation> annotationType() {

Modified: felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ReferenceTag.java
URL: http://svn.apache.org/viewvc/felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ReferenceTag.java?rev=767473&r1=767472&r2=767473&view=diff
==============================================================================
--- felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ReferenceTag.java (original)
+++ felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ReferenceTag.java Wed Apr 22 11:30:05 2009
@@ -59,19 +59,7 @@
             }
 
             public ReferenceCardinality cardinality() {
-                final Object obj = annotation.getNamedParameter("cardinality");
-                if ( obj != null ) {
-                    if ( obj instanceof ReferenceCardinality ) {
-                        return (ReferenceCardinality)obj;
-                    }
-                    return ReferenceCardinality.values()[(Integer)obj];
-                }
-                try {
-                    return (ReferenceCardinality) Reference.class.getMethod("cardinality").getDefaultValue();
-                } catch( NoSuchMethodException mnfe) {
-                    // we ignore this
-                    return null;
-                }
+                return Util.getEnumValue(annotation, "cardinality", ReferenceCardinality.class, Reference.class);
             }
 
             public boolean checked() {
@@ -83,19 +71,7 @@
             }
 
             public ReferencePolicy policy() {
-                final Object obj = annotation.getNamedParameter("policy");
-                if ( obj != null ) {
-                    if ( obj instanceof ReferencePolicy ) {
-                        return (ReferencePolicy)obj;
-                    }
-                    return ReferencePolicy.values()[(Integer)obj];
-                }
-                try {
-                    return (ReferencePolicy) Reference.class.getMethod("policy").getDefaultValue();
-                } catch( NoSuchMethodException mnfe) {
-                    // we ignore this
-                    return null;
-                }
+                return Util.getEnumValue(annotation, "policy", ReferencePolicy.class, Reference.class);
             }
 
             public Class<?> referenceInterface() {

Modified: felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/Util.java
URL: http://svn.apache.org/viewvc/felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/Util.java?rev=767473&r1=767472&r2=767473&view=diff
==============================================================================
--- felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/Util.java (original)
+++ felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/Util.java Wed Apr 22 11:30:05 2009
@@ -18,6 +18,9 @@
  */
 package org.apache.felix.scrplugin.tags.annotation.defaulttag;
 
+import java.util.EnumSet;
+import java.util.List;
+
 import org.apache.felix.scrplugin.tags.ClassUtil;
 
 import com.thoughtworks.qdox.model.Annotation;
@@ -63,7 +66,12 @@
     public static String[] getStringValues(Annotation annotation, String name, final Class<?> clazz) {
         final Object obj = annotation.getNamedParameter(name);
         if ( obj != null ) {
-            return (String[])obj;
+            List<String> list = (List<String>)obj;
+            String[] values = new String[list.size()];
+            for (int i=0; i<values.length; i++) {
+                values[i] = stripQuotes(list.get(i));
+            }
+            return values;
         }
         try {
             return (String[]) clazz.getMethod(name).getDefaultValue();
@@ -77,11 +85,7 @@
         final Object obj = annotation.getNamedParameter(name);
         if ( obj != null ) {
             if ( obj instanceof String ) {
-                final String s = (String)obj;
-                if ( s.startsWith("\"") && s.endsWith("\"")) {
-                    return s.substring(1, s.length() - 1);
-                }
-                return s;
+                return stripQuotes((String)obj);
             }
             return obj.toString();
         }
@@ -92,6 +96,18 @@
             return "";
         }
     }
+    
+    /**
+     * QDox annotations seemt to return annotation values always with quotes - remove them
+     * @param s String with our without quotes
+     * @return String without quotes
+     */
+    private static String stripQuotes(String s) {
+        if (s.startsWith("\"") && s.endsWith("\"")) {
+            return s.substring(1, s.length() - 1);
+        }
+        return s;
+    }
 
     public static Class<?> getClassValue(Annotation annotation, String name, final Class<?> clazz) {
         final Object obj = annotation.getNamedParameter(name);
@@ -108,4 +124,30 @@
             return null;
         }
     }
+
+    public static <T extends Enum> T getEnumValue(Annotation annotation, String name, final Class<T> enumClass, final Class<?> clazz) {
+        Object obj = annotation.getNamedParameter(name);
+        if (obj == null) {
+            try {
+                obj = clazz.getMethod(name).getDefaultValue();
+            } catch( NoSuchMethodException mnfe) {
+                // we ignore this
+            }
+        }
+        if ( obj != null ) {
+            if (enumClass.isAssignableFrom(obj.getClass())) {
+                return (T)obj;
+            }
+            else if ( obj instanceof String ) {
+                String enumName = (String)obj;
+                int dotPos = enumName.lastIndexOf('.');
+                if (dotPos >= 0) {
+                    enumName = enumName.substring(dotPos+1);
+                }
+                return Enum.valueOf(enumClass, enumName);
+            }
+        }
+        return null;
+    }
+
 }