Started work on componentizing the current user management.
authorerik <erik@77661180-640e-0410-b3a8-9f9b13e6d0e0>
Mon, 12 May 2008 22:50:00 +0000 (22:50 +0000)
committererik <erik@77661180-640e-0410-b3a8-9f9b13e6d0e0>
Mon, 12 May 2008 22:50:00 +0000 (22:50 +0000)
Also fixed several bugs in SpringComponent.

system/spring/src/main/java/org/wamblee/system/spring/PropertySetter.java
system/spring/src/main/java/org/wamblee/system/spring/SpringComponent.java
system/spring/src/test/java/org/wamblee/system/spring/HelloService.java
system/spring/src/test/java/org/wamblee/system/spring/SpringComponentTest.java

index 00b9f307b0c1db46d5508736a6b30cf52233cac7..a53dab516e6be01a8b89ae808bbd30f5db5dd4c7 100644 (file)
@@ -34,13 +34,18 @@ class PropertySetter extends PropertyPlaceholderConfigurer {
         * @param aProps Properties. 
         */
        public PropertySetter(Properties aProps) { 
-                StringBuffer buf = new StringBuffer();  
+                String propFile = createPropertyFile(aProps); 
+                setLocation(new StringResource(propFile));
+       }
+
+    private static String createPropertyFile(Properties aProps) {
+        StringBuffer buf = new StringBuffer();  
                 for (Object key: aProps.keySet()) {  
                         buf.append(key);
                         buf.append("=");
                         buf.append(aProps.get(key));
                         buf.append("\n");
-                } 
-                setLocation(new StringResource(buf.toString()));
-       }
+                }
+        return buf.toString();
+    }
 }
index aea9b15aa1a548eacfe9e7c1a39667f684606003..657d11e4f8bd31bfb54341bc7462d4c285c5c62d 100644 (file)
@@ -94,10 +94,6 @@ public class SpringComponent extends AbstractComponent<Scope> {
                        setProperty((String) key, aProperties.getProperty((String) key));
                }
        }
-       
-       public Scope start() { 
-               return super.start(new DefaultScope(new ProvidedInterface[0]));
-       }
 
        @Override
        protected Scope doStart(Scope aExternalScope) {
@@ -113,14 +109,16 @@ public class SpringComponent extends AbstractComponent<Scope> {
                        registerRequiredServices(parentContext);
 
                        parentContext.refresh();
-
+                       
+                       System.out.println("Parent context " + parentContext);
+                   
                        AbstractApplicationContext context = parseConfigFiles(parentContext);
 
                        context
                                        .addBeanFactoryPostProcessor(new PropertySetter(_properties));
                        context.refresh();
 
-                       exposeProvidedServices(context, scope);
+                       exposeProvidedServices(context, aExternalScope);
                        
                        scope.put(CONTEXT_KEY, context);
                        return scope; 
@@ -144,7 +142,6 @@ public class SpringComponent extends AbstractComponent<Scope> {
                        }
                        addInterface(_provided.get(name), svc, aScope);
                        System.out.println("addService " + _provided.get(name) + " " + svc);
-                       aScope.publishInterface(_provided.get(name), svc);
                }
        }
 
@@ -152,7 +149,7 @@ public class SpringComponent extends AbstractComponent<Scope> {
                // Parse spring config files
 
                return new ClassPathXmlApplicationContext((String[]) _configFiles,
-                               aParentContext);
+                               false, aParentContext);
        }
 
        private void registerRequiredServices(GenericApplicationContext aParentContext) {
index 622b420d0e5ddc2a2ffc273250590585caaa2eaf..cfa5bae60069d8b0cc2842033ad324e39a21869e 100644 (file)
@@ -19,7 +19,8 @@ public class HelloService {
        
        private String _msg; 
        
-       public HelloService(String aMsg) { 
+       public HelloService(String aMsg) {
+          SpringComponentTest.EVENT_TRACKER.eventOccurred(aMsg);
                _msg = aMsg; 
        }
        
index c63916f5d68946a6c3d0baa5a004d11b8d3322b8..170297fa2c3f5ec0b3ce297e9920c979f6e5d7b3 100644 (file)
@@ -30,6 +30,7 @@ import org.wamblee.system.core.ProvidedInterface;
 import org.wamblee.system.core.RequiredInterface;
 import org.wamblee.system.core.Scope;
 import org.wamblee.system.core.SystemAssemblyException;
+import org.wamblee.test.EventTracker;
 
 public class SpringComponentTest extends TestCase {
 
@@ -37,10 +38,16 @@ public class SpringComponentTest extends TestCase {
        private static final String HELLO_SERVICE_SPRING_WITH_REQS_XML = "test.org.wamblee.system.springWithRequirements.xml";
        private static final String HELLO_SERVICE_SPRING_WITH_PROPERTIES_XML = "test.org.wamblee.system.springWithProperties.xml";
        private static final String PROPERTY_FILE = "test.org.wamblee.system.spring.properties";
+       
+       public static EventTracker<String> EVENT_TRACKER;
+       
+       private Scope _externalScope; 
 
        @Override
        protected void setUp() throws Exception {
                super.setUp();
+               EVENT_TRACKER = new EventTracker<String>();
+               _externalScope = new DefaultScope(new ProvidedInterface[0]);
        }
 
        public void testBlackboxSystem() {
@@ -48,8 +55,9 @@ public class SpringComponentTest extends TestCase {
                                new String[] { HELLO_SERVICE_SPRING_XML },
                                new HashMap<String, ProvidedInterface>(),
                                new HashMap<RequiredInterface, String>());
-               Scope runtime = system.start();
-               assertEquals(0, runtime.getProvidedInterfaces().length);
+               
+               Scope runtime = system.start(_externalScope);
+               assertEquals(0, _externalScope.getProvidedInterfaces().length);
 
                system.stop(runtime);
        }
@@ -62,11 +70,17 @@ public class SpringComponentTest extends TestCase {
                SpringComponent system = new SpringComponent("system",
                                new String[] { HELLO_SERVICE_SPRING_XML }, provided,
                                new HashMap<RequiredInterface, String>());
-               Scope runtime = system.start();
+               Scope runtime = system.start(_externalScope);
                ProvidedInterface[] services = runtime.getProvidedInterfaces();
+       
                assertEquals(1, services.length);
                Object service = runtime.getInterfaceImplementation(services[0], Object.class);
                assertTrue(service instanceof HelloService);
+               
+               // BUG; Provided services should be made available in the external scope. 
+               Object service2 = _externalScope.getInterfaceImplementation(provided.get("helloService"), Object.class);
+               assertSame(service, service2);
+               
                assertEquals("Hello world!", ((HelloService) service).say());
                system.stop(runtime);
        }
@@ -82,7 +96,10 @@ public class SpringComponentTest extends TestCase {
                props.load(new ClassPathResource(PROPERTY_FILE).getInputStream());
                system.addProperties(props);
 
-               Scope scope = system.start();
+               Scope scope = system.start(_externalScope);
+               // BUG: Hello service was constructed multiple times. Once with the unprocessed property
+               // and another time with the processed property. 
+               assertEquals(1, EVENT_TRACKER.getEventCount());
                ProvidedInterface[] services = scope.getProvidedInterfaces();
                assertEquals("Property Value", scope.getInterfaceImplementation(services[0], HelloService.class).say());
        }
@@ -93,7 +110,7 @@ public class SpringComponentTest extends TestCase {
                                        new String[] { HELLO_SERVICE_SPRING_WITH_REQS_XML },
                                        new HashMap<String, ProvidedInterface>(),
                                        new HashMap<RequiredInterface, String>());
-                       system.start();
+                       system.start(_externalScope);
                } catch (SystemAssemblyException e) {
                        // e.printStackTrace();
                        return;