From: erik <erik@77661180-640e-0410-b3a8-9f9b13e6d0e0>
Date: Fri, 4 Apr 2008 22:40:40 +0000 (+0000)
Subject: (no commit message)
X-Git-Tag: wamblee-utils-0.2~1^2~197
X-Git-Url: http://wamblee.org/gitweb/?a=commitdiff_plain;h=adaa3d8cf1b51559b5fd0f3fd6fffb3577f84fc7;p=utils

---

diff --git a/system/general/src/main/java/org/wamblee/system/DefaultRequiredInterface.java b/system/general/src/main/java/org/wamblee/system/DefaultRequiredInterface.java
index 2f06247d..7bc5b270 100644
--- a/system/general/src/main/java/org/wamblee/system/DefaultRequiredInterface.java
+++ b/system/general/src/main/java/org/wamblee/system/DefaultRequiredInterface.java
@@ -64,6 +64,9 @@ public class DefaultRequiredInterface implements RequiredInterface {
 
 	@Override
 	public <T> T getImplementation(Class<T> aClass) {
+		if ( _provider == null ) { 
+			return null; 
+		}
 		return (T)_provider.getImplementation();
 	}
 	
diff --git a/system/general/src/test/java/org/wamblee/system/Application.java b/system/general/src/test/java/org/wamblee/system/Application.java
index 6e9eb675..3b84b3cb 100644
--- a/system/general/src/test/java/org/wamblee/system/Application.java
+++ b/system/general/src/test/java/org/wamblee/system/Application.java
@@ -2,6 +2,8 @@ package org.wamblee.system;
 
 import javax.sql.DataSource;
 
+import org.wamblee.test.EventTracker;
+
 public class Application extends AbstractComponent {
 	private static RequiredInterface[] required() {
 		return
@@ -10,18 +12,32 @@ public class Application extends AbstractComponent {
     			new DefaultRequiredInterface("integer", Integer.class)
     	};
 	}
+
+	private EventTracker<String> _tracker;
 	
 	public Application() {
 		super("application", new ProvidedInterface[0], required()); 
 	}
+	
+	public Application(EventTracker<String> aTracker) { 
+		this();
+		_tracker = aTracker; 
+	}
 
 	@Override
 	protected void doStart(String aContext) {
-		// Empty, no services provided externally. 
+		track("start." + getName()); 
 	}
 	
 	@Override
 	protected void doStop() {
-		// Empty.	
+		track("stop." + getName());	
+	}
+	
+	private void track(String aString) {
+		if ( _tracker == null ) { 
+			return; 
+		}
+		_tracker.eventOccurred(aString);
 	}
 }
diff --git a/system/general/src/test/java/org/wamblee/system/DefaultRequiredInterfaceTest.java b/system/general/src/test/java/org/wamblee/system/DefaultRequiredInterfaceTest.java
index 6a209b48..45cf9d92 100644
--- a/system/general/src/test/java/org/wamblee/system/DefaultRequiredInterfaceTest.java
+++ b/system/general/src/test/java/org/wamblee/system/DefaultRequiredInterfaceTest.java
@@ -20,4 +20,9 @@ public class DefaultRequiredInterfaceTest extends TestCase {
 				new DefaultRequiredInterface("a", new Class[]{ String.class, Integer.class})));
 		
 	}
+	
+	public void testGetImplementation() { 
+		RequiredInterface required = new DefaultRequiredInterface("hello", String.class);
+		assertNull(required.getImplementation(String.class));
+	}
 }
diff --git a/system/general/src/test/java/org/wamblee/system/Environment.java b/system/general/src/test/java/org/wamblee/system/Environment.java
index 300adf5c..d6465d68 100644
--- a/system/general/src/test/java/org/wamblee/system/Environment.java
+++ b/system/general/src/test/java/org/wamblee/system/Environment.java
@@ -2,6 +2,8 @@ package org.wamblee.system;
 
 import javax.sql.DataSource;
 
+import org.wamblee.test.EventTracker;
+
 
 public class Environment extends AbstractComponent {
 	
@@ -12,18 +14,33 @@ public class Environment extends AbstractComponent {
     	};
 	}
 	
+	private EventTracker<String> _tracker; 
+	
 	public Environment() { 
 		super("environment", provided(), new RequiredInterface[0]);
 	}
 	
+	public Environment(EventTracker aTracker) { 
+		this();
+		_tracker = aTracker; 
+	}
+	
 	@Override
 	protected void doStart(String aContext) {
 	    addService(aContext, getProvidedServices()[0], new Integer(1));
 	    addService(aContext, getProvidedServices()[1], new Integer(2));
+	    track("start." + getName());
 	}
-	
+
 	@Override
 	protected void doStop() {
-		// Empty.	
+		track("stop." + getName());
+	}
+	
+	private void track(String aString) {
+		if ( _tracker == null ) { 
+			return; 
+		}
+		_tracker.eventOccurred(aString);
 	}
 }
diff --git a/system/general/src/test/java/org/wamblee/system/SystemAssemblerTest.java b/system/general/src/test/java/org/wamblee/system/SystemAssemblerTest.java
index d862b15e..7bbf08bf 100644
--- a/system/general/src/test/java/org/wamblee/system/SystemAssemblerTest.java
+++ b/system/general/src/test/java/org/wamblee/system/SystemAssemblerTest.java
@@ -6,14 +6,18 @@ import java.util.Arrays;
 
 import org.wamblee.system.Component.Status;
 import org.wamblee.test.AssertionUtils;
+import org.wamblee.test.EventTracker;
 
 import junit.framework.TestCase;
 
 public class SystemAssemblerTest extends TestCase {
 
+	private EventTracker<String> _tracker;
+
 	@Override
 	protected void setUp() throws Exception {
 		super.setUp();
+		_tracker = new EventTracker<String>();
 	}
 
 	private static class MyMultiple implements Serializable, Runnable {
@@ -28,12 +32,12 @@ public class SystemAssemblerTest extends TestCase {
 				Runnable.class);
 		RequiredInterface req2 = new DefaultRequiredInterface("name",
 				Serializable.class);
-		ProvidedInterface prov1 = new DefaultProvidedInterface(
-				"name", Runnable.class);
-		ProvidedInterface prov2 = new DefaultProvidedInterface(
-				"name", Serializable.class);
-		ProvidedInterface prov3 = new DefaultProvidedInterface(
-				"name", MyMultiple.class);
+		ProvidedInterface prov1 = new DefaultProvidedInterface("name",
+				Runnable.class);
+		ProvidedInterface prov2 = new DefaultProvidedInterface("name",
+				Serializable.class);
+		ProvidedInterface prov3 = new DefaultProvidedInterface("name",
+				MyMultiple.class);
 
 		AssertionUtils.assertEquals(new RequiredInterface[] { req1 },
 				SystemAssembler.filterRequiredServices(prov1, Arrays
@@ -57,19 +61,19 @@ public class SystemAssemblerTest extends TestCase {
 	}
 
 	public void testEnvironmentApplication() {
-		Component environment = new Environment();
-		Component application = new Application();
+		Component environment = new Environment(_tracker);
+		Component application = new Application(_tracker);
 		SystemAssembler assembler = new SystemAssembler(new Component[] {
 				environment, application }, new ProvidedInterface[0]);
 		assembler.start();
+		AssertionUtils.assertEquals(new String[] { "start.environment",
+				"start.application" }, _tracker.getEvents(
+				Thread.currentThread()).toArray(new String[0]));
 		ProvidedInterface[] envServices = environment.getRunningServices();
 		assertEquals(2, envServices.length);
 		ProvidedInterface[] appServices = environment.getRunningServices();
 		assertEquals(2, appServices.length);
-
-		// TODO test stopping!!!!!!
-		environment.stop();
-		application.stop();
+		
 	}
 
 	public void testApplicationEnvironment() {
@@ -87,10 +91,12 @@ public class SystemAssemblerTest extends TestCase {
 	}
 
 	public void testComposite() {
-		Component environment = new Environment();
-		Component application = new Application();
+		Component environment = new Environment(_tracker);
+		Component application = new Application(_tracker);
+		assertEquals(0, _tracker.getEventCount());
 		assertEquals(Status.NOT_STARTED, environment.getStatus());
 		assertEquals(Status.NOT_STARTED, application.getStatus());
+		
 		Container system = new Container("all", new Component[] { environment,
 				application }, new ProvidedInterface[0],
 				new RequiredInterface[0]);
@@ -103,20 +109,30 @@ public class SystemAssemblerTest extends TestCase {
 		assertEquals(Status.RUNNING, environment.getStatus());
 		assertEquals(Status.RUNNING, application.getStatus());
 		assertEquals(Status.RUNNING, system.getStatus());
-
+		
+		AssertionUtils.assertEquals(
+				new String[] { "start.environment", "start.application" }, 
+				_tracker.getEvents(Thread.currentThread()).toArray(new String[0]));
+        _tracker.clear();
+		
 		system.stop();
 		assertEquals(Status.STOPPED, environment.getStatus());
 		assertEquals(Status.STOPPED, application.getStatus());
 		assertEquals(Status.STOPPED, system.getStatus());
+		
+		AssertionUtils.assertEquals(
+				new String[] { "stop.application", "stop.environment" }, 
+				_tracker.getEvents(Thread.currentThread()).toArray(new String[0]));
+      
+		
 	}
 
 	public void testCompositeWithWrongProvidedInfo() {
 		try {
 			Component environment = new Environment();
 			Component application = new Application();
-			Container system = new Container(
-					"all",
-					new Component[] { environment, application },
+			Container system = new Container("all", new Component[] {
+					environment, application },
 					new ProvidedInterface[] { new DefaultProvidedInterface(
 							"string", String.class) },
 					new DefaultRequiredInterface[0]);
@@ -130,10 +146,8 @@ public class SystemAssemblerTest extends TestCase {
 		try {
 			Component environment = new Environment();
 			Component application = new Application();
-			Container system = new Container(
-					"all",
-					new Component[] { environment, application },
-					new ProvidedInterface[0],
+			Container system = new Container("all", new Component[] {
+					environment, application }, new ProvidedInterface[0],
 					new RequiredInterface[] { new DefaultRequiredInterface(
 							"string", String.class) });
 			system.start("root");
@@ -146,14 +160,12 @@ public class SystemAssemblerTest extends TestCase {
 	public void testCompositeWithSuperfluousRequiredInfo() {
 		Component environment = new Environment();
 		Component application = new Application();
-		Container system = new Container(
-				"all",
-				new Component[] { environment, application },
-				new ProvidedInterface[0],
+		Container system = new Container("all", new Component[] { environment,
+				application }, new ProvidedInterface[0],
 				new RequiredInterface[] { new DefaultRequiredInterface(
 						"string", String.class) });
-		system.getRequiredServices()[0].setProvider(
-				new DefaultProvidedInterface("hallo", String.class));
+		system.getRequiredServices()[0]
+				.setProvider(new DefaultProvidedInterface("hallo", String.class));
 		system.start("root");
 		RequiredInterface[] required = system.getRequiredServices();
 		assertEquals(1, required.length);
@@ -184,9 +196,11 @@ public class SystemAssemblerTest extends TestCase {
 				new Component[] { application }, new ProvidedInterface[0],
 				application.getRequiredServices());
 		environment.start("env");
-		system.getRequiredServices()[0].setProvider(environment.getProvidedServices()[0]);
-		system.getRequiredServices()[1].setProvider(environment.getProvidedServices()[1]);
-		
+		system.getRequiredServices()[0].setProvider(environment
+				.getProvidedServices()[0]);
+		system.getRequiredServices()[1].setProvider(environment
+				.getProvidedServices()[1]);
+
 		system.start("root");
 		RequiredInterface[] required = system.getRequiredServices();
 		assertEquals(2, required.length);