You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ma...@apache.org on 2014/02/14 11:49:17 UTC

svn commit: r1568234 - in /felix/sandbox/marrs/dependencymanager-prototype/dm: src/dm/impl/ComponentImpl.java src/dm/impl/DependencyImpl.java src/dm/impl/ServiceDependencyImpl.java test/test/ComponentTest.java

Author: marrs
Date: Fri Feb 14 10:49:17 2014
New Revision: 1568234

URL: http://svn.apache.org/r1568234
Log:
Added some test cases, refactored callbacks to simplify them, and added some more functionality to the ServiceDependencyImpl.

Modified:
    felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java
    felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/DependencyImpl.java
    felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ServiceDependencyImpl.java
    felix/sandbox/marrs/dependencymanager-prototype/dm/test/test/ComponentTest.java

Modified: felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java?rev=1568234&r1=1568233&r2=1568234&view=diff
==============================================================================
--- felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java (original)
+++ felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ComponentImpl.java Fri Feb 14 10:49:17 2014
@@ -271,10 +271,12 @@ public class ComponentImpl implements Co
                 // if the method does not exist, ignore it
             }
             catch (InvocationTargetException e) {
+//            	e.printStackTrace();
                 // the method itself threw an exception, log that
 //                m_logger.log(Logger.LOG_WARNING, "Invocation of '" + methodName + "' failed.", e.getCause());
             }
             catch (Exception e) {
+//            	e.printStackTrace();
 //                m_logger.log(Logger.LOG_WARNING, "Could not invoke '" + methodName + "'.", e);
             }
         }

Modified: felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/DependencyImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/DependencyImpl.java?rev=1568234&r1=1568233&r2=1568234&view=diff
==============================================================================
--- felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/DependencyImpl.java (original)
+++ felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/DependencyImpl.java Fri Feb 14 10:49:17 2014
@@ -8,13 +8,13 @@ import dm.Dependency;
 import dm.Event;
 
 public class DependencyImpl implements Dependency {
-	private Component m_component;
-	private boolean m_available;
-	private boolean m_instanceBound;
-	private boolean m_required;
-	private String m_add;
-	private String m_change;
-	private String m_remove;
+	protected Component m_component;
+	protected boolean m_available;
+	protected boolean m_instanceBound;
+	protected boolean m_required;
+	protected String m_add;
+	protected String m_change;
+	protected String m_remove;
 	// TODO when we start injecting the "highest" one, this needs to be sorted at
 	// some point in time (note that we could choose to only do that if the dependency is
 	// actually injected (auto config is on for it)
@@ -60,7 +60,7 @@ public class DependencyImpl implements D
 		// if this is an optional dependency and the component is in an instantiated
 		// state, we can invoke the callback here
 		if (m_component.isAvailable()) {
-			invokeAdd(e);
+			invoke(m_add, e);
 		}
 		m_component.handleChange();
 	}
@@ -69,7 +69,7 @@ public class DependencyImpl implements D
 		m_dependencies.remove(e);
 		m_dependencies.add(e);
 		if (m_component.isAvailable()) {
-			invokeChange(e);
+			invoke(m_change, e);
 		}
 		m_component.handleChange();
 	}
@@ -78,7 +78,7 @@ public class DependencyImpl implements D
 		m_dependencies.remove(e);
 		m_available = (!m_dependencies.isEmpty());
 		if (m_component.isAvailable()) {
-			invokeRemove(e);
+			invoke(m_remove, e);
 		}
 		m_component.handleChange();
 	}
@@ -131,20 +131,26 @@ public class DependencyImpl implements D
 	}
 	
 	public void invokeAdd() {
-		for (Event e : m_dependencies) {
-			invokeAdd(e);
+		if (m_add != null) {
+			for (Event e : m_dependencies) {
+				invoke(m_add, e);
+			}
 		}
 	}
 	
 	public void invokeChange() {
-		for (Event e : m_dependencies) {
-			invokeChange(e);
+		if (m_change != null) {
+			for (Event e : m_dependencies) {
+				invoke(m_change, e);
+			}
 		}
 	}
 	
 	public void invokeRemove() {
-		for (Event e : m_dependencies) {
-			invokeRemove(e);
+		if (m_remove != null) {
+			for (Event e : m_dependencies) {
+				invoke(m_remove, e);
+			}
 		}
 	}
 	
@@ -153,19 +159,11 @@ public class DependencyImpl implements D
 		return m_component.getInstances();
 	}
 
-	public void invokeAdd(Event e) {
+	public void invoke(String method, Event e) {
 		// specific for this type of dependency
-		m_component.invokeCallbackMethod(getInstances(), m_add, new Class[][] {{}}, new Object[][] {{}});
+		m_component.invokeCallbackMethod(getInstances(), method, new Class[][] {{}}, new Object[][] {{}});
 	}
 	
-	public void invokeChange(Event e) {
-		m_component.invokeCallbackMethod(getInstances(), m_change, new Class[][] {{}}, new Object[][] {{}});
-	}
-	
-	public void invokeRemove(Event e) {
-		// specific for this type of dependency
-		m_component.invokeCallbackMethod(getInstances(), m_remove, new Class[][] {{}}, new Object[][] {{}});
-	}
 	@Override
 	public void setRequired(boolean required) {
 		m_required = required;

Modified: felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ServiceDependencyImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ServiceDependencyImpl.java?rev=1568234&r1=1568233&r2=1568234&view=diff
==============================================================================
--- felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ServiceDependencyImpl.java (original)
+++ felix/sandbox/marrs/dependencymanager-prototype/dm/src/dm/impl/ServiceDependencyImpl.java Fri Feb 14 10:49:17 2014
@@ -4,6 +4,8 @@ import org.osgi.framework.BundleContext;
 import org.osgi.framework.Filter;
 import org.osgi.framework.ServiceReference;
 
+import dm.Event;
+
 import tracker.ServiceTracker;
 import tracker.ServiceTrackerCustomizer;
 
@@ -50,4 +52,14 @@ public class ServiceDependencyImpl exten
 	public void removedService(ServiceReference reference, Object service) {
 		remove(new ServiceEventImpl(reference, service));
 	}
+	
+	@Override
+	public void invoke(String method, Event e) {
+		ServiceEventImpl se = (ServiceEventImpl) e;
+		// TODO add the full list of signatures we support
+		m_component.invokeCallbackMethod(getInstances(), method,
+			new Class[][] {{ ServiceReference.class }},
+			new Object[][] {{ se.getReference() }}
+		);
+	}
 }

Modified: felix/sandbox/marrs/dependencymanager-prototype/dm/test/test/ComponentTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/marrs/dependencymanager-prototype/dm/test/test/ComponentTest.java?rev=1568234&r1=1568233&r2=1568234&view=diff
==============================================================================
--- felix/sandbox/marrs/dependencymanager-prototype/dm/test/test/ComponentTest.java (original)
+++ felix/sandbox/marrs/dependencymanager-prototype/dm/test/test/ComponentTest.java Fri Feb 14 10:49:17 2014
@@ -84,6 +84,45 @@ public class ComponentTest {
 		c.stop();
 		e.step(8);
 	}
+	
+	@Test
+	public void testAddAvailableDependencyFromInitCallback() {
+		final Ensure e = new Ensure();
+		final Dependency d = new DependencyImpl();
+		d.setRequired(true);
+		final Dependency d2 = new DependencyImpl();
+		d2.setRequired(true);
+		Component c = new ComponentImpl();
+		c.setImplementation(new Object() {
+			void init(Component c) {
+				System.out.println("init");
+				e.step(2);
+				c.add(d);
+				d.add(new EventImpl());
+				c.add(d2);
+			}
+			void start() {
+				System.out.println("start");
+				e.step();
+			}
+			void stop() {
+				System.out.println("stop");
+				e.step();
+			}
+			void destroy() {
+				System.out.println("destroy");
+				e.step(7);
+			}
+		});
+		e.step(1);
+		c.start();
+		e.step(5);
+		d2.add(new EventImpl());
+		e.step(7);
+		d.remove(new EventImpl());
+		c.stop();
+		e.step(10);
+	}
 
 	@Test
 	public void createComponentAddDependencyAndStartComponent() {