added BundleDependency annotation

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@916023 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 14d14c1..44f344c 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
@@ -28,6 +28,7 @@
 import java.util.List;
 
 import org.apache.felix.dm.DependencyManager;
+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.ServiceDependency;
@@ -173,6 +174,11 @@
                         checkServiceParsed(service);
                         service.add(createConfigurationDependency(b, dm, parser));
                         break;
+                        
+                    case BundleDependency:
+                        checkServiceParsed(service);
+                        service.add(createBundleDependency(b, dm, parser));
+                        break;
                 }
             }
 
@@ -442,4 +448,44 @@
         cd.setCallback(callback);
         return cd;
     }
+    
+    /**
+     * Creates a BundleDependency that we parsed from a component descriptor entry.
+     * @param b
+     * @param dm
+     * @param parser
+     * @return
+     */
+    private Dependency createBundleDependency(Bundle b, DependencyManager dm,
+        DescriptorParser parser)
+    {
+        BundleDependency bd = dm.createBundleDependency();
+
+        // 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);
+        bd.setCallbacks(added, changed, removed);
+
+        // required
+        bd.setRequired("true".equals(parser.getString(DescriptorParam.required, "true")));
+        
+        // filter
+        String filter = parser.getString(DescriptorParam.filter, null);
+        if (filter != null) 
+        {
+            bd.setFilter(filter);
+        }
+        
+        // stateMask
+        int stateMask = parser.getInt(DescriptorParam.stateMask, -1);
+        if (stateMask != -1) 
+        {
+            bd.setStateMask(stateMask);
+        }
+
+        // propagate
+        bd.setPropagate("true".equals(parser.getString(DescriptorParam.stateMask, "true")));
+        return bd;
+    }
 }
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 4d5de4c..9297c1e 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
@@ -29,5 +29,6 @@
     AdapterService,
     ServiceDependency,
     TemporalServiceDependency,
-    ConfigurationDependency
+    ConfigurationDependency,
+    BundleDependency
 }
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 4476adc..781e961 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
@@ -102,7 +102,10 @@
     adapteeService,
     
     /* AdapterService attribute for the adaptee service filter (the parsed value is a String) */
-    adapteeFilter;
+    adapteeFilter,
+    
+    /* BundleDependency attribute for the state mask bundle (the parsed value is a string) */
+    stateMask;
     
     /**
      * 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 649750a..ba0f86d 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
@@ -202,6 +202,34 @@
 
     /**
      * Once a component descriptor entry line is parsed, you can retrieve entry attributes using this method.
+     *
+     * @param param
+     * @param def
+     * @return
+     */
+    public int getInt(DescriptorParam param, int def)
+    {
+        String value = getString(param, null);
+        if (value != null)
+        {
+            try
+            {
+                return Integer.parseInt(value);
+            }
+            catch (NumberFormatException e)
+            {
+                throw new IllegalArgumentException("parameter " + param + " is not an int value: "
+                    + value);
+            }
+        }
+        else
+        {
+            return def;
+        }
+    }
+
+    /**
+     * Once a component descriptor entry line is parsed, you can retrieve entry attributes using this method.
      * @param param
      * @return
      */