added support for annotated adapter services

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@912252 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentManager.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentManager.java
index 79d2b87..14d14c1 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentManager.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentManager.java
@@ -155,6 +155,10 @@
                         service = createAspectService(b, dm, parser);
                         break;
                         
+                    case AdapterService:
+                        service = createAdapterService(b, dm, parser);
+                        break;
+                        
                     case ServiceDependency:
                         checkServiceParsed(service);
                         service.add(createServiceDependency(b, dm, parser, false));
@@ -329,6 +333,28 @@
     }
 
     /**
+     * Creates an Adapter Service.
+     * @param b
+     * @param dm
+     * @param parser
+     * @return
+     */
+    private Service createAdapterService(Bundle b, DependencyManager dm, DescriptorParser parser)
+        throws ClassNotFoundException
+    {
+        Class<?> adapterImpl = b.loadClass(parser.getString(DescriptorParam.impl));
+        Class<?> adapterService = b.loadClass(parser.getString(DescriptorParam.adapterService));
+        Dictionary<String, String> adapterProperties = parser.getDictionary(DescriptorParam.adapterProperties, null);
+        Class<?> adapteeService = b.loadClass(parser.getString(DescriptorParam.adapteeService));
+        String adapteeFilter = parser.getString(DescriptorParam.adapteeFilter, null);
+     
+        Service service = dm.createAdapterService(adapteeService, adapteeFilter, adapterService, adapterImpl, adapterProperties);
+        setServiceCallbacks(service, parser);
+        setServiceComposition(service, parser);
+        return service;
+    }
+
+    /**
      * Creates a ServiceDependency that we parsed from a component descriptor "ServiceDependency" entry.
      * @param b
      * @param dm
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorEntry.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorEntry.java
index ac8125c..4d5de4c 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorEntry.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorEntry.java
@@ -26,6 +26,7 @@
 {
     Service,
     AspectService,
+    AdapterService,
     ServiceDependency,
     TemporalServiceDependency,
     ConfigurationDependency
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParam.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParam.java
index 5fd0dc9..4476adc 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParam.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParam.java
@@ -90,7 +90,19 @@
     updated,
     
     /* TemporalServiceDependency attribute for the timeout (the parsed value is a String) */
-    timeout;
+    timeout,
+    
+    /* AdapterService attribute for the adapter interface (the parsed value is a String) */
+    adapterService,
+    
+    /* AdapterService attribute for the adapter service properties (the parsed value is a Hashtable) */
+    adapterProperties,
+    
+    /* AdapterService attribute for the adaptee service (the parsed value is a String) */
+    adapteeService,
+    
+    /* AdapterService attribute for the adaptee service filter (the parsed value is a String) */
+    adapteeFilter;
     
     /**
      * Indicates if a given attribute is a Service attribute.
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParser.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParser.java
index 4fb3d98..649750a 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParser.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParser.java
@@ -56,7 +56,8 @@
  *    params := paramName '=' paramValue ( ';' paramName '=' paramValue )*
  *    
  *    paramName := init | start | stop | destroy | impl | provide | properties | factory | factoryMethod | composition | service | filter | 
- *                 defaultImpl | required | added | changed | removed | autoConfig | pid | propagate | updated | timeout
+ *                 defaultImpl | required | added | changed | removed | autoConfig | pid | propagate | updated | timeout |
+ *                 adapterService | adapterProperties | adapteeService | adapteeFilter
  *    init := 'init'
  *    start := 'start'
  *    stop := 'stop'
@@ -79,7 +80,11 @@
  *    propagate := 'propagate'
  *    updated := 'updated'
  *    timeout := 'timeout'
- *    
+ *    adapterService := 'adapterService'
+ *    adapterProperties := 'adapterProperties'
+ *    adapteeService := 'adapteeService'
+ *    adapteeFilter := 'adapteeFilter'
+ *     
  *    paramValue := strings | attributes
  *    strings := string ( ',' string )*
  *    attributes := string ':' string ( ',' string : string )*