You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2014/03/02 23:42:35 UTC

svn commit: r1573384 - /felix/sandbox/pderop/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java

Author: pderop
Date: Sun Mar  2 22:42:35 2014
New Revision: 1573384

URL: http://svn.apache.org/r1573384
Log:
invoke autoconfig and propagate changes when no transition is performed in the performTransition method.

Modified:
    felix/sandbox/pderop/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java

Modified: felix/sandbox/pderop/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java?rev=1573384&r1=1573383&r2=1573384&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java Sun Mar  2 22:42:35 2014
@@ -22,11 +22,11 @@ import org.osgi.framework.ServiceRegistr
 import dm.Component;
 import dm.ComponentDeclaration;
 import dm.ComponentDependencyDeclaration;
+import dm.ComponentState;
 import dm.ComponentStateListener;
 import dm.Dependency;
 import dm.DependencyManager;
 import dm.context.ComponentContext;
-import dm.context.ComponentState;
 import dm.context.DependencyContext;
 
 public class ComponentImpl implements Component, ComponentContext, ComponentDeclaration {
@@ -207,6 +207,12 @@ public class ComponentImpl implements Co
 		while (performTransition(oldState, newState));
 	}
 	
+	public void propagateChange() {
+		if (m_registration != null) {
+            m_registration.setProperties(calculateServiceProperties());
+		}
+	}
+	
     public Component setAutoConfig(Class clazz, boolean autoConfig) {
         m_autoConfig.put(clazz, Boolean.valueOf(autoConfig));
         return this;
@@ -349,6 +355,21 @@ public class ComponentImpl implements Co
 			notifyListeners(newState);
 			return true;
 		}
+		
+		switch(m_state) {
+		case INSTANTIATED_AND_WAITING_FOR_REQUIRED:
+			invokeAutoConfigInstanceBoundDependencies();
+			break;
+			
+		case TRACKING_OPTIONAL:
+			invokeAutoConfigDependencies();
+			if (hasSomePropagateDependencies()) {
+				propagateChange();
+			}
+			break;
+		default:
+		}
+		
 		return false;
 	}
 	
@@ -392,6 +413,16 @@ public class ComponentImpl implements Co
             m_registration = null;
         }
     }
+    
+    private boolean hasSomePropagateDependencies() {
+		for (int i = 0; i < m_dependencies.size(); i++) {
+			DependencyContext d = (DependencyContext) m_dependencies.get(i);
+			if (d.isPropagated()) {
+				return true;
+			}
+		}
+		return false;
+    }
 
     private Dictionary calculateServiceProperties() {
 		Dictionary properties = new Properties();