Fixed bug when parsing BundleDependency's propagate attribute. Added ResourceAdapter and ResourceDependency annotations.

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@919864 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 deaf0c0..903333e 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
@@ -31,6 +31,7 @@
 import org.apache.felix.dm.dependencies.BundleDependency;
 import org.apache.felix.dm.dependencies.ConfigurationDependency;
 import org.apache.felix.dm.dependencies.Dependency;
+import org.apache.felix.dm.dependencies.ResourceDependency;
 import org.apache.felix.dm.dependencies.ServiceDependency;
 import org.apache.felix.dm.dependencies.TemporalServiceDependency;
 import org.apache.felix.dm.service.Service;
@@ -164,6 +165,10 @@
                         service = createBundleAdapterService(b, dm, parser);
                         break;
 
+                    case ResourceAdapterService:
+                        service = createResourceAdapterService(b, dm, parser);
+                        break;
+
                     case ServiceDependency:
                         checkServiceParsed(service);
                         service.add(createServiceDependency(b, dm, parser, false));
@@ -183,6 +188,11 @@
                         checkServiceParsed(service);
                         service.add(createBundleDependency(b, dm, parser));
                         break;
+                        
+                    case ResourceDependency:
+                        checkServiceParsed(service);
+                        service.add(createResourceDependency(b, dm, parser));
+                        break;
                 }
             }
 
@@ -386,6 +396,27 @@
     }
 
     /**
+     * Creates a Resource Adapter Service.
+     * @param b
+     * @param dm
+     * @param parser
+     * @return
+     */
+    private Service createResourceAdapterService(Bundle b, DependencyManager dm, DescriptorParser parser)
+        throws ClassNotFoundException
+    {
+        String filter = parser.getString(DescriptorParam.filter, null);
+        Class<?> impl = b.loadClass(parser.getString(DescriptorParam.impl));
+        String service = parser.getString(DescriptorParam.service);
+        Class<?> serviceClass = b.loadClass(service);
+        Dictionary<String, String> properties = parser.getDictionary(DescriptorParam.properties, null);
+        boolean propagate = "true".equals(parser.getString(DescriptorParam.propagate, "false"));
+        Service srv = dm.createResourceAdapterService(filter, serviceClass, properties, impl, propagate);  
+        setCommonServiceParams(srv, parser);
+        return srv;
+    }
+
+    /**
      * Creates a ServiceDependency that we parsed from a component descriptor "ServiceDependency" entry.
      * @param b
      * @param dm
@@ -510,7 +541,33 @@
         }
 
         // propagate
-        bd.setPropagate("true".equals(parser.getString(DescriptorParam.stateMask, "false")));
+        bd.setPropagate("true".equals(parser.getString(DescriptorParam.propagate, "false")));
         return bd;
     }
-}
+
+    private Dependency createResourceDependency(Bundle b, DependencyManager dm,
+        DescriptorParser parser)
+    {
+        ResourceDependency rd = dm.createResourceDependency();
+
+        // Set add/changed/removed
+        String added = parser.getString(DescriptorParam.added, null);
+        String changed = parser.getString(DescriptorParam.changed, null);
+        String removed = parser.getString(DescriptorParam.removed, null);
+        rd.setCallbacks(added, changed, removed);
+
+        // required
+        rd.setRequired("true".equals(parser.getString(DescriptorParam.required, "true")));
+        
+        // filter
+        String filter = parser.getString(DescriptorParam.filter, null);
+        if (filter != null) 
+        {
+            rd.setFilter(filter);
+        }
+        
+        // propagate
+        rd.setPropagate("true".equals(parser.getString(DescriptorParam.propagate, "false")));
+        return rd;
+    }
+}
\ No newline at end of file
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 70f890a..da8d2c0 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
@@ -28,8 +28,10 @@
     AspectService,
     AdapterService,
     BundleAdapterService,
+    ResourceAdapterService,
     ServiceDependency,
     TemporalServiceDependency,
     ConfigurationDependency,
-    BundleDependency
+    BundleDependency,
+    ResourceDependency
 }