added generic support for propagation of a dependency's properties to a service, implemented for configuration and resource dependencies
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@889163 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/dependencies/Dependency.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/dependencies/Dependency.java
index cd1c0af..29cbe94 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/dependencies/Dependency.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/dependencies/Dependency.java
@@ -18,6 +18,8 @@
*/
package org.apache.felix.dm.dependencies;
+import java.util.Dictionary;
+
import org.apache.felix.dm.impl.dependencies.DependencyService;
/**
@@ -104,4 +106,7 @@
* @param service
*/
public void invokeRemoved(DependencyService service);
+
+ public boolean isPropagated();
+ public Dictionary getProperties();
}
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java
index f8637d6..27d074a 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java
@@ -781,12 +781,9 @@
addTo(properties, m_serviceProperties);
for (int i = 0; i < m_dependencies.size(); i++) {
Dependency d = (Dependency) m_dependencies.get(i);
- if (d instanceof ConfigurationDependencyImpl) {
- ConfigurationDependencyImpl cd = (ConfigurationDependencyImpl) d;
- if (cd.isPropagated()) {
- Dictionary dict = cd.getConfiguration();
- addTo(properties, dict);
- }
+ if (d.isPropagated()) {
+ Dictionary dict = d.getProperties();
+ addTo(properties, dict);
}
}
if (properties.size() == 0) {
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/BundleDependencyImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/BundleDependencyImpl.java
index e67860a..ab748a7 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/BundleDependencyImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/BundleDependencyImpl.java
@@ -389,4 +389,14 @@
invokeRemoved(service, m_bundleInstance);
m_bundleInstance = null;
}
+
+ public Dictionary getProperties() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public boolean isPropagated() {
+ // TODO Auto-generated method stub
+ return false;
+ }
}
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ConfigurationDependencyImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ConfigurationDependencyImpl.java
index cafb0ea..f90df0c 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ConfigurationDependencyImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ConfigurationDependencyImpl.java
@@ -298,4 +298,8 @@
// TODO Auto-generated method stub
return false;
}
+
+ public Dictionary getProperties() {
+ return getConfiguration();
+ }
}
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ResourceDependencyImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ResourceDependencyImpl.java
index 09fb6db..e2b4474 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ResourceDependencyImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ResourceDependencyImpl.java
@@ -22,6 +22,7 @@
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
+import java.util.Dictionary;
import java.util.List;
import java.util.Properties;
@@ -47,11 +48,11 @@
protected List m_services = new ArrayList();
private boolean m_isRequired;
private String m_resourceFilter;
-// private Resource m_resource;
private Resource m_trackedResource;
private boolean m_isStarted;
private List m_resources = new ArrayList();
private Resource m_resourceInstance;
+ private boolean m_propagate;
public ResourceDependencyImpl(BundleContext context, Logger logger) {
m_context = context;
@@ -414,4 +415,28 @@
invokeRemoved(service, m_resourceInstance);
m_resourceInstance = null;
}
+
+ public ResourceDependency setPropagate(boolean propagate) {
+ ensureNotActive();
+ m_propagate = propagate;
+ return this;
+ }
+
+ public Dictionary getProperties() {
+ Resource resource = lookupResource();
+ if (resource != null) {
+ Properties props = new Properties();
+ props.put(Resource.NAME, resource.getName());
+ props.put(Resource.PATH, resource.getPath());
+ props.put(Resource.REPOSITORY, resource.getRepository());
+ return props;
+ }
+ else {
+ throw new IllegalStateException("cannot find resource");
+ }
+ }
+
+ public boolean isPropagated() {
+ return m_propagate;
+ }
}
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
index f337bd3..3c25769 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
@@ -23,6 +23,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
+import java.util.Dictionary;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -753,4 +754,14 @@
m_reference = null;
m_serviceInstance = null;
}
+
+ public Dictionary getProperties() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public boolean isPropagated() {
+ // TODO Auto-generated method stub
+ return false;
+ }
}