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
*/