simplified updating of instances and propagation of properties
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@889178 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterImpl.java
index 89e9c3b..e5bb19e 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterImpl.java
@@ -34,7 +34,6 @@
}
public void added(Resource resource) {
- System.out.println("ADDED " + resource);
m_manager.add(m_manager.createService()
.setInterface(m_iface.getName(), null)
.setImplementation(m_impl)
@@ -48,5 +47,4 @@
public void removed(Resource resource) {
}
-
}
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 c6b437e..ee4644a 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
@@ -35,18 +35,12 @@
import org.apache.felix.dm.DependencyManager;
import org.apache.felix.dm.dependencies.Dependency;
-import org.apache.felix.dm.impl.dependencies.BundleDependencyImpl;
-import org.apache.felix.dm.impl.dependencies.ConfigurationDependencyImpl;
import org.apache.felix.dm.impl.dependencies.DependencyActivation;
import org.apache.felix.dm.impl.dependencies.DependencyService;
-import org.apache.felix.dm.impl.dependencies.ResourceDependencyImpl;
-import org.apache.felix.dm.impl.dependencies.ServiceDependencyImpl;
import org.apache.felix.dm.management.ServiceComponent;
import org.apache.felix.dm.management.ServiceComponentDependency;
-import org.apache.felix.dm.resources.Resource;
import org.apache.felix.dm.service.Service;
import org.apache.felix.dm.service.ServiceStateListener;
-import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
@@ -421,7 +415,7 @@
public synchronized void setServiceProperties(Dictionary serviceProperties) {
m_serviceProperties = serviceProperties;
- if (isBound() && (m_serviceName != null)) {
+ if ((m_registration != null) && (m_serviceName != null)) {
m_registration.setProperties(calculateServiceProperties());
}
}
@@ -814,36 +808,44 @@
}
private void updateInstance(Dependency dependency) {
- if (dependency instanceof ServiceDependencyImpl) {
- ServiceDependencyImpl sd = (ServiceDependencyImpl) dependency;
- // update the dependency in the service instance (it will use
- // a null object if necessary)
- if (sd.isAutoConfig()) {
- configureImplementation(sd.getInterface(), sd.getService(), sd.getAutoConfigName());
+
+ if (dependency.isAutoConfig()) {
+ configureImplementation(dependency.getAutoConfigType(), dependency.getAutoConfigInstance(), dependency.getAutoConfigName());
+ if (dependency.isPropagated() && m_registration != null) {
+ m_registration.setProperties(calculateServiceProperties());
}
}
- else if (dependency instanceof ConfigurationDependencyImpl) {
- ConfigurationDependencyImpl cd = (ConfigurationDependencyImpl) dependency;
- if (cd.isPropagated()) {
- // change service properties accordingly, but only if the service was already registered
- if (m_registration != null) {
- Dictionary props = calculateServiceProperties();
- m_registration.setProperties(props);
- }
- }
- }
- else if (dependency instanceof BundleDependencyImpl) {
- BundleDependencyImpl bd = (BundleDependencyImpl) dependency;
- if (bd.isAutoConfig()) {
- configureImplementation(Bundle.class, bd.getBundle()); // TODO support AutoConfigName
- }
- }
- else if (dependency instanceof ResourceDependencyImpl) {
- ResourceDependencyImpl rd = (ResourceDependencyImpl) dependency;
- if (rd.isAutoConfig()) {
- configureImplementation(Resource.class, rd.getResource()); // TODO support AutoConfigName
- }
- }
+
+// if (dependency instanceof ServiceDependencyImpl) {
+// ServiceDependencyImpl sd = (ServiceDependencyImpl) dependency;
+// // update the dependency in the service instance (it will use
+// // a null object if necessary)
+// if (sd.isAutoConfig()) {
+// configureImplementation(sd.getInterface(), sd.getService(), sd.getAutoConfigName());
+// }
+// }
+// else if (dependency instanceof ConfigurationDependencyImpl) {
+// ConfigurationDependencyImpl cd = (ConfigurationDependencyImpl) dependency;
+// if (cd.isPropagated()) {
+// // change service properties accordingly, but only if the service was already registered
+// if (m_registration != null) {
+// Dictionary props = calculateServiceProperties();
+// m_registration.setProperties(props);
+// }
+// }
+// }
+// else if (dependency instanceof BundleDependencyImpl) {
+// BundleDependencyImpl bd = (BundleDependencyImpl) dependency;
+// if (bd.isAutoConfig()) {
+// configureImplementation(Bundle.class, bd.getBundle()); // TODO support AutoConfigName
+// }
+// }
+// else if (dependency instanceof ResourceDependencyImpl) {
+// ResourceDependencyImpl rd = (ResourceDependencyImpl) dependency;
+// if (rd.isAutoConfig()) {
+// configureImplementation(Resource.class, rd.getResource()); // TODO support AutoConfigName
+// }
+// }
}
/**
@@ -1031,14 +1033,6 @@
return (state.isAllRequiredAvailable());
}
- private boolean isBound() {
- State state;
- synchronized (m_dependencies) {
- state = m_state;
- }
- return (state.isBound());
- }
-
// ServiceComponent interface
static class SCDImpl implements ServiceComponentDependency {