Added getStatus() method and now also testing for the correct status.
authorErik Brakkee <erik@brakkee.org>
Mon, 31 Mar 2008 17:03:50 +0000 (17:03 +0000)
committerErik Brakkee <erik@brakkee.org>
Mon, 31 Mar 2008 17:03:50 +0000 (17:03 +0000)
system/general/src/main/java/org/wamblee/system/AbstractComponent.java
system/general/src/main/java/org/wamblee/system/Component.java
system/general/src/main/java/org/wamblee/system/CompositeComponent.java [moved from system/general/src/main/java/org/wamblee/system/CompositeSystem.java with 90% similarity]
system/general/src/test/java/org/wamblee/system/SystemAssemblerTest.java
system/spring/src/main/java/org/wamblee/system/spring/SpringSystem.java

index 5c96b5491f650288dce681a15337b389f71490d8..47c82862683bc08881b1f42caacdd483f6d11df2 100644 (file)
@@ -9,6 +9,7 @@ import java.util.Map;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.wamblee.system.Component.Status;
 
 /**
  * Abstract subsystem class making it easy to implement new subsystems.
@@ -17,6 +18,7 @@ public abstract class AbstractComponent implements Component {
 
        private static final Log LOG = LogFactory.getLog(AbstractComponent.class);
 
+       private Status _status; 
        private String _name;
        private ServiceRegistry _registry; 
        private List<InterfaceDescriptor> _provided;
@@ -37,6 +39,7 @@ public abstract class AbstractComponent implements Component {
         */
        protected AbstractComponent(String aName, ServiceRegistry aRegistry, InterfaceDescriptor[] aProvided,
                        InterfaceDescriptor[] aRequired) {
+               _status = Status.NOT_STARTED;
                _name = aName;
                _registry = aRegistry; 
                _provided = new ArrayList<InterfaceDescriptor>();
@@ -45,6 +48,11 @@ public abstract class AbstractComponent implements Component {
                _required.addAll(Arrays.asList(aRequired));
                _running = new HashMap<InterfaceDescriptor, Service>();
        }
+       
+       @Override
+       public Status getStatus() {
+               return _status; 
+       }
 
        @Override
        public final String getName() {
@@ -71,6 +79,7 @@ public abstract class AbstractComponent implements Component {
                LOG.info("Initializing '" + aContext + "." + _name + "' with "
                                + Arrays.asList(aRequiredServices));
                doStart(aContext + "." + getName(), aRequiredServices);
+               _status = Status.RUNNING;
                return _running.values().toArray(new Service[0]);
        }
 
@@ -110,6 +119,7 @@ public abstract class AbstractComponent implements Component {
                for (Service svc: _running.values()) { 
                        getRegistry().remove(svc);
                }
+               _status = Status.STOPPED;
        }
        
        protected abstract void doStop(); 
index 6a31e01d61748002d63a435ac0da55f56ca66733..afbed94cd677fb04e8e049cddd25d3e53132b756 100644 (file)
@@ -8,6 +8,16 @@ package org.wamblee.system;
  */
 public interface Component {
        
+       enum Status { 
+               NOT_STARTED, RUNNING, STOPPED
+       }
+       
+       /**
+        * Gets the status of the component. 
+        * @return Status. 
+        */
+       Status getStatus();
+       
        /**
         * Gets the name of the subsystem.
         * @return Subsystem name. 
similarity index 90%
rename from system/general/src/main/java/org/wamblee/system/CompositeSystem.java
rename to system/general/src/main/java/org/wamblee/system/CompositeComponent.java
index 24547a9373078878880130b8463646312e87c682..7bc120aaf3b8991f08b7b5ddac851bca8cc9d3f7 100644 (file)
@@ -14,9 +14,9 @@ import sun.util.LocaleServiceProviderPool.LocalizedObjectGetter;
  *
  * @author Erik Brakkee
  */
-public class CompositeSystem extends AbstractComponent {
+public class CompositeComponent extends AbstractComponent {
 
-       private static final Log LOG = LogFactory.getLog(CompositeSystem.class);
+       private static final Log LOG = LogFactory.getLog(CompositeComponent.class);
 
        private Component[] _systems;
 
@@ -28,7 +28,7 @@ public class CompositeSystem extends AbstractComponent {
         * @param aProvided Provided services of the system. 
         * @param aRequired Required services by the system. 
         */
-       public CompositeSystem(String aName, ServiceRegistry aRegistry, Component[] aSystems,
+       public CompositeComponent(String aName, ServiceRegistry aRegistry, Component[] aSystems,
                        InterfaceDescriptor[] aProvided, InterfaceDescriptor[] aRequired) {
                super(aName, aRegistry, aProvided, aRequired);
                _systems = aSystems;
@@ -93,7 +93,9 @@ public class CompositeSystem extends AbstractComponent {
        
        @Override
        protected void doStop() {
-               // Empty.       
+               for (int i = _systems.length-1; i >= 0; i--) { 
+                       _systems[i].stop();
+               }
        }
 
        private void info(String aMsg) {
index 885cff39739a748fbd1e015c4f45f66b461128db..ab8bae6902debd4b49c16554c57345166f9f19fd 100644 (file)
@@ -4,6 +4,7 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 
+import org.wamblee.system.Component.Status;
 import org.wamblee.test.AssertionUtils;
 
 import junit.framework.TestCase;
@@ -98,21 +99,32 @@ public class SystemAssemblerTest extends TestCase {
        public void testComposite() {
                Component environment = new Environment(_registry);
                Component application = new Application(_registry);
-               CompositeSystem system = new CompositeSystem("all", _registry,
+               assertEquals(Status.NOT_STARTED, environment.getStatus());
+               assertEquals(Status.NOT_STARTED, application.getStatus());
+               CompositeComponent system = new CompositeComponent("all", _registry,
                                new Component[] { environment, application },
                                new InterfaceDescriptor[0], new InterfaceDescriptor[0]);
+               assertEquals(Status.NOT_STARTED, system.getStatus());
                system.start("root", new Service[0]);
                InterfaceDescriptor[] required = system.getRequiredServices();
                assertEquals(0, required.length);
                InterfaceDescriptor[] provided = system.getProvidedServices();
                assertEquals(0, provided.length);
+               assertEquals(Status.RUNNING, environment.getStatus());
+               assertEquals(Status.RUNNING, application.getStatus());
+               assertEquals(Status.RUNNING, system.getStatus());
+               
+               system.stop();
+               assertEquals(Status.STOPPED, environment.getStatus());
+               assertEquals(Status.STOPPED, application.getStatus());
+               assertEquals(Status.STOPPED, system.getStatus());
        }
 
        public void testCompositeWithWrongProvidedInfo() {
                try {
                        Component environment = new Environment(_registry);
                        Component application = new Application(_registry);
-                       CompositeSystem system = new CompositeSystem(
+                       CompositeComponent system = new CompositeComponent(
                                        "all",
                                        _registry,
                                        new Component[] { environment, application },
@@ -128,7 +140,7 @@ public class SystemAssemblerTest extends TestCase {
        public void testCompositeWithSuperfluousRequiredInfo() {
                Component environment = new Environment(_registry);
                Component application = new Application(_registry);
-               CompositeSystem system = new CompositeSystem("all", _registry,
+               CompositeComponent system = new CompositeComponent("all", _registry,
                                new Component[] { environment, application },
                                new InterfaceDescriptor[0],
                                new InterfaceDescriptor[] { new DefaultRequiredInterfaceDescriptor(
@@ -144,7 +156,7 @@ public class SystemAssemblerTest extends TestCase {
                try {
                        Component environment = new Environment(_registry);
                        Component application = new Application(_registry);
-                       CompositeSystem system = new CompositeSystem("all", _registry,
+                       CompositeComponent system = new CompositeComponent("all", _registry,
                                        new Component[] { application }, new InterfaceDescriptor[0],
                                        application.getRequiredServices());
                        system.start("root", new Service[0]);
@@ -159,7 +171,7 @@ public class SystemAssemblerTest extends TestCase {
 
                Component environment = new Environment(_registry);
                Component application = new Application(_registry);
-               CompositeSystem system = new CompositeSystem("all", _registry,
+               CompositeComponent system = new CompositeComponent("all", _registry,
                                new Component[] { application }, new InterfaceDescriptor[0],
                                application.getRequiredServices());
                Service[] envServices = environment.start("env", new Service[0]);
index 7a8b513ee7b318129f1b643c89a9096d3d7e30fa..05731af829aa0b7ae24aafa2d79243af3fa247f2 100644 (file)
@@ -11,7 +11,7 @@ import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.context.support.GenericApplicationContext;
 import org.wamblee.system.AbstractComponent;
-import org.wamblee.system.CompositeSystem;
+import org.wamblee.system.CompositeComponent;
 import org.wamblee.system.ProvidedInterfaceDescriptor;
 import org.wamblee.system.RequiredInterfaceDescriptor;
 import org.wamblee.system.Service;