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;
+    }
 }