You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cl...@apache.org on 2013/10/03 16:07:02 UTC

svn commit: r1528874 - in /felix/trunk/ipojo: manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/ manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/ manipulator/manipulator/src/ma...

Author: clement
Date: Thu Oct  3 14:07:02 2013
New Revision: 1528874

URL: http://svn.apache.org/r1528874
Log:
Fix:
* FELIX-4251 The @Bind annotation should use Class instead of String
* FELIX-4269 Introduce an enumeration to configure binding policy from the annotation

Added:
    felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/BindingPolicy.java
Modified:
    felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Bind.java
    felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Modified.java
    felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Requires.java
    felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Unbind.java
    felix/trunk/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/RequiresVisitor.java
    felix/trunk/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/bind/AbstractBindVisitor.java
    felix/trunk/ipojo/runtime/core-it/ipojo-core-annotations-test/src/main/java/org/apache/felix/ipojo/runtime/core/test/components/PolicyDependency.java
    felix/trunk/ipojo/runtime/core-it/ipojo-core-annotations-test/src/test/java/org/apache/felix/ipojo/runtime/core/test/annotations/TestDependencyPolicy.java
    felix/trunk/ipojo/runtime/core-it/ipojo-core-service-dependency-interceptor-test/src/main/java/org/apache/felix/ipojo/runtime/core/test/components/FooConsumer.java

Modified: felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Bind.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Bind.java?rev=1528874&r1=1528873&r2=1528874&view=diff
==============================================================================
--- felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Bind.java (original)
+++ felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Bind.java Thu Oct  3 14:07:02 2013
@@ -49,9 +49,9 @@ public @interface Bind {
     
     /**
      * Set the required specification.
-     * Default : empty (try to discover)
+     * Default : no specification, will be deduced.
      */
-    String specification() default "";
+    Class specification() default Object.class;
     
     /**
      * Set the dependency id.
@@ -61,16 +61,16 @@ public @interface Bind {
     
     /**
      * Set the binding policy.
-     * Acceptable policy are dynamic, static and dynamic-priority.
+     * Acceptable policies are dynamic, static and dynamic-priority.
      * Default: dynamic.
      */
-    String policy() default "dynamic";
+    BindingPolicy policy() default BindingPolicy.DYNAMIC;
     
     /**
      * Set the comparator.
      * The indicated class must implement {@link Comparator}
      */
-    Class comparator() default Comparator.class;
+    Class<? extends Comparator> comparator() default Comparator.class;
     
     /**
      * Set the from attribute.

Added: felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/BindingPolicy.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/BindingPolicy.java?rev=1528874&view=auto
==============================================================================
--- felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/BindingPolicy.java (added)
+++ felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/BindingPolicy.java Thu Oct  3 14:07:02 2013
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  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.
+ */
+
+package org.apache.felix.ipojo.annotations;
+
+/**
+* Binding policies supported by iPOJO.
+*/
+public enum BindingPolicy {
+    DYNAMIC,
+    STATIC,
+    DYNAMIC_PRIORITY;
+}

Modified: felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Modified.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Modified.java?rev=1528874&r1=1528873&r2=1528874&view=diff
==============================================================================
--- felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Modified.java (original)
+++ felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Modified.java Thu Oct  3 14:07:02 2013
@@ -62,16 +62,16 @@ public @interface Modified {
 
     /**
      * Set the binding policy.
-     * Acceptable policy are dynamic, static and dynamic-priority.
+     * Acceptable policies are dynamic, static and dynamic-priority.
      * Default: dynamic.
      */
-    String policy() default "dynamic";
+    BindingPolicy policy() default BindingPolicy.DYNAMIC;
 
     /**
      * Set the comparator.
      * The indicated class must implement {@link Comparator}
      */
-    Class comparator() default Comparator.class;
+    Class<? extends Comparator> comparator() default Comparator.class;
 
     /**
      * Set the from attribute.

Modified: felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Requires.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Requires.java?rev=1528874&r1=1528873&r2=1528874&view=diff
==============================================================================
--- felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Requires.java (original)
+++ felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Requires.java Thu Oct  3 14:07:02 2013
@@ -75,13 +75,13 @@ public @interface Requires {
      * Acceptable policy are dynamic, static and dynamic-priority.
      * Default: dynamic.
      */
-    String policy() default "dynamic";
+    BindingPolicy policy() default BindingPolicy.DYNAMIC;
 
     /**
      * Set the comparator.
      * The indicated class must implement {@link Comparator}
      */
-    Class comparator() default Comparator.class;
+    Class<?extends Comparator> comparator() default Comparator.class;
 
     /**
      * Set the from attribute.
@@ -92,7 +92,7 @@ public @interface Requires {
      * Set the required service specification.
      * This attribute is required for Collection field.
      */
-    String specification() default "";
+    Class specification() default Object.class;
 
     /**
      * Set to true if the service dependency is injected

Modified: felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Unbind.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Unbind.java?rev=1528874&r1=1528873&r2=1528874&view=diff
==============================================================================
--- felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Unbind.java (original)
+++ felix/trunk/ipojo/manipulator/annotations/src/main/java/org/apache/felix/ipojo/annotations/Unbind.java Thu Oct  3 14:07:02 2013
@@ -52,7 +52,7 @@ public @interface Unbind {
      * Set the required specification.
      * Default : empty (try to discover).
      */
-    String specification() default "";
+    Class specification() default Object.class;
     
     /**
      * Set the dependency id.
@@ -65,13 +65,13 @@ public @interface Unbind {
      * Acceptable policy are dynamic, static and dynamic-priority.
      * Default: dynamic.
      */
-    String policy() default "dynamic";
+    BindingPolicy policy() default BindingPolicy.DYNAMIC;
     
     /**
      * Set the comparator.
      * The indicated class must implement {@link Comparator}
      */
-    Class comparator() default Comparator.class;
+    Class<? extends Comparator> comparator() default Comparator.class;
     
     /**
      * Set the from attribute.

Modified: felix/trunk/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/RequiresVisitor.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/RequiresVisitor.java?rev=1528874&r1=1528873&r2=1528874&view=diff
==============================================================================
--- felix/trunk/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/RequiresVisitor.java (original)
+++ felix/trunk/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/RequiresVisitor.java Thu Oct  3 14:07:02 2013
@@ -129,8 +129,9 @@ public class RequiresVisitor extends Emp
             m_nullable = value.toString();
             return;
         }
+        // Used by component using the pre 1.11 version of annotations.
         if (name.equals("policy")) {
-            m_policy = value.toString();
+            m_policy = getPolicy(value.toString());
             return;
         }
         if (name.equals("defaultimplementation")) {
@@ -144,7 +145,13 @@ public class RequiresVisitor extends Emp
             return;
         }
         if (name.equals("specification")) {
-            m_specification = value.toString();
+            // Detect whether it's an internal class name.
+            if (value.toString().startsWith("L")  && value.toString().endsWith(";")) {
+                Type type = Type.getType(value.toString());
+                m_specification = type.getClassName();
+            } else {
+                m_specification = value.toString();
+            }
             return;
         }
         if (name.equals("id")) {
@@ -168,6 +175,13 @@ public class RequiresVisitor extends Emp
         }
     }
 
+    @Override
+    public void visitEnum(String name, String desc, String value) {
+        if (name.equals("policy")) {
+            m_policy = getPolicy(value.toString());
+        }
+    }
+
     /**
      * End of the annotation.
      * Create a "requires" element
@@ -231,4 +245,23 @@ public class RequiresVisitor extends Emp
 
         workbench.getElements().put(requires, null);
     }
+
+    /**
+     * Gets the iPOJO binding policy name from the given value.
+     * @param policy  the read policy
+     * @return the policy name
+     */
+    public static String getPolicy(String policy) {
+        if (policy.equalsIgnoreCase("static")) {
+            return "static";
+        }
+        if (policy.equalsIgnoreCase("dynamic")) {
+            return "dynamic";
+        }
+        // The _ is used in the annotation.
+        if (policy.equalsIgnoreCase("dynamic_priority")) {
+            return "dynamic-priority";
+        }
+        return policy;
+    }
 }
\ No newline at end of file

Modified: felix/trunk/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/bind/AbstractBindVisitor.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/bind/AbstractBindVisitor.java?rev=1528874&r1=1528873&r2=1528874&view=diff
==============================================================================
--- felix/trunk/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/bind/AbstractBindVisitor.java (original)
+++ felix/trunk/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/bind/AbstractBindVisitor.java Thu Oct  3 14:07:02 2013
@@ -20,6 +20,7 @@
 package org.apache.felix.ipojo.manipulator.metadata.annotation.visitor.bind;
 
 import org.apache.felix.ipojo.manipulator.metadata.annotation.ComponentWorkbench;
+import org.apache.felix.ipojo.manipulator.metadata.annotation.visitor.RequiresVisitor;
 import org.apache.felix.ipojo.metadata.Attribute;
 import org.apache.felix.ipojo.metadata.Element;
 import org.objectweb.asm.AnnotationVisitor;
@@ -98,11 +99,18 @@ public abstract class AbstractBindVisito
             return;
         }
         if (name.equals("specification")) {
-            m_specification = value.toString();
+            // Detect whether it's an internal class name.
+            if (value.toString().startsWith("L")  && value.toString().endsWith(";")) {
+                Type type = Type.getType(value.toString());
+                m_specification = type.getClassName();
+            } else {
+                m_specification = value.toString();
+            }
             return;
         }
+        // Still used by component using the old version of the annotations.
         if (name.equals("policy")) {
-            m_policy = value.toString();
+            m_policy = RequiresVisitor.getPolicy(value.toString());
             return;
         }
         if (name.equals("id")) {
@@ -123,6 +131,13 @@ public abstract class AbstractBindVisito
 
     }
 
+    @Override
+    public void visitEnum(String name, String desc, String value) {
+        if (name.equals("policy")) {
+            m_policy = RequiresVisitor.getPolicy(value.toString());
+        }
+    }
+
     public void visitEnd() {
     }
 

Modified: felix/trunk/ipojo/runtime/core-it/ipojo-core-annotations-test/src/main/java/org/apache/felix/ipojo/runtime/core/test/components/PolicyDependency.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/runtime/core-it/ipojo-core-annotations-test/src/main/java/org/apache/felix/ipojo/runtime/core/test/components/PolicyDependency.java?rev=1528874&r1=1528873&r2=1528874&view=diff
==============================================================================
--- felix/trunk/ipojo/runtime/core-it/ipojo-core-annotations-test/src/main/java/org/apache/felix/ipojo/runtime/core/test/components/PolicyDependency.java (original)
+++ felix/trunk/ipojo/runtime/core-it/ipojo-core-annotations-test/src/main/java/org/apache/felix/ipojo/runtime/core/test/components/PolicyDependency.java Thu Oct  3 14:07:02 2013
@@ -19,41 +19,38 @@
 
 package org.apache.felix.ipojo.runtime.core.test.components;
 
-import org.apache.felix.ipojo.annotations.Bind;
-import org.apache.felix.ipojo.annotations.Component;
-import org.apache.felix.ipojo.annotations.Requires;
-import org.apache.felix.ipojo.annotations.Unbind;
+import org.apache.felix.ipojo.annotations.*;
 import org.apache.felix.ipojo.runtime.core.test.services.FooService;
 
 @Component
 public class PolicyDependency {
 
-    @Requires(policy="static")
+    @Requires(policy= BindingPolicy.STATIC)
     public FooService fs;
     
-    @Requires(policy="dynamic-priority")
+    @Requires(policy=BindingPolicy.DYNAMIC_PRIORITY)
     public FooService fs2;
     
-    @Unbind(policy="static")
+    @Unbind(policy=BindingPolicy.STATIC)
     public void unbindBar() {    }
     @Bind
     public void bindBar() {    }
     
     @Unbind
     public void unbindBaz() {    }
-    @Bind(policy="static")
+    @Bind(policy=BindingPolicy.STATIC)
     public void bindBaz() {    }
    
-    @Requires(id="inv")
+    @Requires(id="inv", specification = FooService.class)
     public FooService fs2inv;
-    @Bind(id="inv", policy="static")
+    @Bind(id="inv", policy=BindingPolicy.STATIC)
     public void bindFS2Inv() {   }
     @Unbind(id="inv")
     public void unbindFS2Inv() {   }
     
-    @Unbind(policy="static", id="unbindonly")
+    @Unbind(policy=BindingPolicy.STATIC, id="unbindonly")
     public void unbind() {    }
     
-    @Bind(policy="static", id="bindonly")
+    @Bind(policy=BindingPolicy.STATIC, id="bindonly")
     public void bind() {    }
 }

Modified: felix/trunk/ipojo/runtime/core-it/ipojo-core-annotations-test/src/test/java/org/apache/felix/ipojo/runtime/core/test/annotations/TestDependencyPolicy.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/runtime/core-it/ipojo-core-annotations-test/src/test/java/org/apache/felix/ipojo/runtime/core/test/annotations/TestDependencyPolicy.java?rev=1528874&r1=1528873&r2=1528874&view=diff
==============================================================================
--- felix/trunk/ipojo/runtime/core-it/ipojo-core-annotations-test/src/test/java/org/apache/felix/ipojo/runtime/core/test/annotations/TestDependencyPolicy.java (original)
+++ felix/trunk/ipojo/runtime/core-it/ipojo-core-annotations-test/src/test/java/org/apache/felix/ipojo/runtime/core/test/annotations/TestDependencyPolicy.java Thu Oct  3 14:07:02 2013
@@ -87,14 +87,14 @@ public class TestDependencyPolicy extend
 
 
     private Element getDependencyById(Element[] deps, String name) {
-        for (int i = 0; i < deps.length; i++) {
-            String na = deps[i].getAttribute("id");
-            String field = deps[i].getAttribute("field");
+        for (Element dep : deps) {
+            String na = dep.getAttribute("id");
+            String field = dep.getAttribute("field");
             if (na != null && na.equalsIgnoreCase(name)) {
-                return deps[i];
+                return dep;
             }
             if (field != null && field.equalsIgnoreCase(name)) {
-                return deps[i];
+                return dep;
             }
         }
         fail("Dependency  " + name + " not found");

Modified: felix/trunk/ipojo/runtime/core-it/ipojo-core-service-dependency-interceptor-test/src/main/java/org/apache/felix/ipojo/runtime/core/test/components/FooConsumer.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/runtime/core-it/ipojo-core-service-dependency-interceptor-test/src/main/java/org/apache/felix/ipojo/runtime/core/test/components/FooConsumer.java?rev=1528874&r1=1528873&r2=1528874&view=diff
==============================================================================
--- felix/trunk/ipojo/runtime/core-it/ipojo-core-service-dependency-interceptor-test/src/main/java/org/apache/felix/ipojo/runtime/core/test/components/FooConsumer.java (original)
+++ felix/trunk/ipojo/runtime/core-it/ipojo-core-service-dependency-interceptor-test/src/main/java/org/apache/felix/ipojo/runtime/core/test/components/FooConsumer.java Thu Oct  3 14:07:02 2013
@@ -35,7 +35,7 @@ import java.util.Properties;
 @Provides
 public class FooConsumer implements CheckService {
 
-    @Requires(id= "foo", policy = "dynamic-priority", proxy = false)
+    @Requires(id= "foo", policy = BindingPolicy.DYNAMIC_PRIORITY, proxy = false)
     private FooService foo;
 
     private Map<String, Object> props;