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 2008/04/30 00:30:56 UTC

svn commit: r652175 - in /felix/trunk/ipojo: annotations/src/main/java/org/apache/felix/ipojo/annotations/ core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ core/src/main/java/org/apache/felix/ipojo/util/ manipulator/src/main/java/org...

Author: clement
Date: Tue Apr 29 15:30:56 2008
New Revision: 652175

URL: http://svn.apache.org/viewvc?rev=652175&view=rev
Log:
Update annotations to add latest added feature on dependency management


Modified:
    felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Bind.java
    felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Requires.java
    felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Unbind.java
    felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
    felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/DependencyModel.java
    felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/FieldCollector.java
    felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MethodCollector.java

Modified: felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Bind.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Bind.java?rev=652175&r1=652174&r2=652175&view=diff
==============================================================================
--- felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Bind.java (original)
+++ felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Bind.java Tue Apr 29 15:30:56 2008
@@ -20,6 +20,7 @@
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Target;
+import java.util.Comparator;
 
 /**
  * This annotation declares a bind method.
@@ -64,5 +65,11 @@
      * Default: dynamic.
      */
     String policy() default "dynamic";
+    
+    /**
+     * Set the comparator.
+     * The indicated class must implement {@link Comparator}
+     */
+    Class comparator() default Comparator.class;
 
 }

Modified: felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Requires.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Requires.java?rev=652175&r1=652174&r2=652175&view=diff
==============================================================================
--- felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Requires.java (original)
+++ felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Requires.java Tue Apr 29 15:30:56 2008
@@ -20,6 +20,7 @@
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Target;
+import java.util.Comparator;
 
 /**
  * This annotation declares a service requirement.
@@ -55,9 +56,10 @@
     /**
      * Set the default-implementation to use if the dependency is optional,
      * and no providers are available.
+     * The class must implement the required service interface.
      * Default : no default-implementation
      */
-    String defaultimplementation() default "";
+    Class defaultimplementation() default Class.class;
     
     /**
      * Set the binding policy.
@@ -65,4 +67,10 @@
      * Default: dynamic.
      */
     String policy() default "dynamic";
+    
+    /**
+     * Set the comparator.
+     * The indicated class must implement {@link Comparator}
+     */
+    Class comparator() default Comparator.class;
 }

Modified: felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Unbind.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Unbind.java?rev=652175&r1=652174&r2=652175&view=diff
==============================================================================
--- felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Unbind.java (original)
+++ felix/trunk/ipojo/annotations/src/main/java/org/apache/felix/ipojo/annotations/Unbind.java Tue Apr 29 15:30:56 2008
@@ -20,6 +20,7 @@
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Target;
+import java.util.Comparator;
 
 /**
  * This annotation declares an unbind method.
@@ -65,5 +66,11 @@
      * Default: dynamic.
      */
     String policy() default "dynamic";
+    
+    /**
+     * Set the comparator.
+     * The indicated class must implement {@link Comparator}
+     */
+    Class comparator() default Comparator.class;
 
 }

Modified: felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java?rev=652175&r1=652174&r2=652175&view=diff
==============================================================================
--- felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java (original)
+++ felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java Tue Apr 29 15:30:56 2008
@@ -557,7 +557,7 @@
                 // Check type if not already set
                 if (type == null) {
                     if (field == null) {
-                        throw new ConfigurationException("The property " + name + " has neither type neither field.");
+                        throw new ConfigurationException("The property " + name + " has neither type nor field.");
                     }
                     FieldMetadata fieldMeta = manipulation.getField(field);
                     if (fieldMeta == null) {

Modified: felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/DependencyModel.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/DependencyModel.java?rev=652175&r1=652174&r2=652175&view=diff
==============================================================================
--- felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/DependencyModel.java (original)
+++ felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/util/DependencyModel.java Tue Apr 29 15:30:56 2008
@@ -32,7 +32,7 @@
 
 /**
  * Abstract dependency model. This class is the parent class of every service dependency. It manages the most part of dependency management. This
- * class creates an insterface between the service tracker and the concrete dependency.
+ * class creates an interface between the service tracker and the concrete dependency.
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 public abstract class DependencyModel implements TrackerCustomizer {

Modified: felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/FieldCollector.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/FieldCollector.java?rev=652175&r1=652174&r2=652175&view=diff
==============================================================================
--- felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/FieldCollector.java (original)
+++ felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/FieldCollector.java Tue Apr 29 15:30:56 2008
@@ -22,6 +22,7 @@
 import org.apache.felix.ipojo.metadata.Element;
 import org.objectweb.asm.AnnotationVisitor;
 import org.objectweb.asm.FieldVisitor;
+import org.objectweb.asm.Type;
 import org.objectweb.asm.commons.EmptyVisitor;
 
 /**
@@ -151,6 +152,11 @@
         private String m_nullable;
         
         /**
+         * Comparator.
+         */
+        private String m_comparator;
+        
+        /**
          * Constructor.
          * @param name : field name.
          */
@@ -182,7 +188,8 @@
                 return;
             }
             if (arg0.equals("defaultimplementation")) {
-                m_defaultImplementation = arg1.toString();
+                Type type = Type.getType(arg1.toString());
+                m_defaultImplementation = type.getClassName();
                 return;
             }
             if (arg0.equals("specification")) {
@@ -193,6 +200,11 @@
                 m_id = arg1.toString();
                 return;
             }
+            if (arg0.equals("comparator")) {
+                Type type = Type.getType(arg1.toString());
+                m_comparator = type.getClassName();
+                return;
+            }
         }
 
         /**
@@ -237,6 +249,9 @@
             if (m_id != null) {
                 req.addAttribute(new Attribute("id", m_id));
             }
+            if (m_comparator != null) {
+                req.addAttribute(new Attribute("comparator", m_comparator));
+            }
             
             if (m_id != null) { 
                 m_collector.getIds().put(m_id, req);

Modified: felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MethodCollector.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MethodCollector.java?rev=652175&r1=652174&r2=652175&view=diff
==============================================================================
--- felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MethodCollector.java (original)
+++ felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MethodCollector.java Tue Apr 29 15:30:56 2008
@@ -21,6 +21,7 @@
 import org.apache.felix.ipojo.metadata.Attribute;
 import org.apache.felix.ipojo.metadata.Element;
 import org.objectweb.asm.AnnotationVisitor;
+import org.objectweb.asm.Type;
 import org.objectweb.asm.commons.EmptyVisitor;
 
 /**
@@ -192,6 +193,11 @@
          * Binding policy.
          */
         private String m_policy;
+        
+        /**
+         * Comparator.
+         */
+        private String m_comparator;
 
         /**
          * Constructor.
@@ -234,6 +240,12 @@
                 m_id = arg1.toString();
                 return;
             }
+            if (arg0.equals("comparator")) {
+                Type type = Type.getType(arg1.toString());
+                m_comparator = type.getClassName();
+                return;
+            }
+            
         }
 
         /**
@@ -275,6 +287,71 @@
                 if (m_id != null) {
                     req.addAttribute(new Attribute("id", m_id));
                 }
+                if (m_comparator != null) {
+                    req.addAttribute(new Attribute("comparator", m_comparator));
+                }
+            } else {
+                String itf = req.getAttribute("interface");
+                String aggregate = req.getAttribute("aggregate");
+                String optional = req.getAttribute("optional");
+                String filter = req.getAttribute("filter");
+                String policy = req.getAttribute("policy");
+                String comparator = req.getAttribute("comparator");
+                
+                if (m_specification != null) {
+                    if (itf == null) {
+                        req.addAttribute(new Attribute("interface", m_specification));
+                    } else if (! m_specification.equals(itf)) {
+                        System.err.println("The required specification is not the same than previouly : " + m_specification + " & " + itf);
+                        return;
+                    }
+                }
+                
+                if (m_optional != null) {
+                    if (optional == null) {
+                        req.addAttribute(new Attribute("optional", m_optional));
+                    } else if (! m_optional.equals(optional)) {
+                        System.err.println("The optional attribute is not always the same");
+                        return;
+                    }
+                }
+                
+                if (m_aggregate != null) {
+                    if (aggregate == null) {
+                        req.addAttribute(new Attribute("aggregate", m_aggregate));
+                    } else if (! m_aggregate.equals(aggregate)) {
+                        System.err.println("The aggregate attribute is not always the same");
+                        return;
+                    }
+                }
+                
+                if (m_filter != null) {
+                    if (filter == null) {
+                        req.addAttribute(new Attribute("filter", m_filter));
+                    } else if (! m_filter.equals(filter)) {
+                        System.err.println("The filter attribute is not always the same");
+                        return;
+                    }
+                }
+                
+                if (m_policy != null) {
+                    if (policy == null) {
+                        req.addAttribute(new Attribute("policy", m_policy));
+                    } else if (! m_policy.equals(policy)) {
+                        System.err.println("The policy attribute is not always the same");
+                        return;
+                    }
+                }
+                
+                if (m_comparator != null) {
+                    if (comparator == null) {
+                        req.addAttribute(new Attribute("comparator", m_comparator));
+                    } else if (! m_comparator.equals(policy)) {
+                        System.err.println("The comparator attribute is not always the same");
+                        return;
+                    }
+                }
+                
             }
             Element method = new Element("callback", "");
             method.addAttribute(new Attribute("method", m_name));