From 2a885e74d3f518def3887df98920f632177ed0b9 Mon Sep 17 00:00:00 2001 From: Erik Brakkee Date: Mon, 31 Mar 2008 17:03:50 +0000 Subject: [PATCH] Added getStatus() method and now also testing for the correct status. --- .../org/wamblee/system/AbstractComponent.java | 10 +++++++++ .../java/org/wamblee/system/Component.java | 10 +++++++++ ...iteSystem.java => CompositeComponent.java} | 10 +++++---- .../wamblee/system/SystemAssemblerTest.java | 22 ++++++++++++++----- .../wamblee/system/spring/SpringSystem.java | 2 +- 5 files changed, 44 insertions(+), 10 deletions(-) rename system/general/src/main/java/org/wamblee/system/{CompositeSystem.java => CompositeComponent.java} (90%) diff --git a/system/general/src/main/java/org/wamblee/system/AbstractComponent.java b/system/general/src/main/java/org/wamblee/system/AbstractComponent.java index 5c96b549..47c82862 100644 --- a/system/general/src/main/java/org/wamblee/system/AbstractComponent.java +++ b/system/general/src/main/java/org/wamblee/system/AbstractComponent.java @@ -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 _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(); @@ -45,6 +48,11 @@ public abstract class AbstractComponent implements Component { _required.addAll(Arrays.asList(aRequired)); _running = new HashMap(); } + + @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(); diff --git a/system/general/src/main/java/org/wamblee/system/Component.java b/system/general/src/main/java/org/wamblee/system/Component.java index 6a31e01d..afbed94c 100644 --- a/system/general/src/main/java/org/wamblee/system/Component.java +++ b/system/general/src/main/java/org/wamblee/system/Component.java @@ -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. diff --git a/system/general/src/main/java/org/wamblee/system/CompositeSystem.java b/system/general/src/main/java/org/wamblee/system/CompositeComponent.java 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 24547a93..7bc120aa 100644 --- a/system/general/src/main/java/org/wamblee/system/CompositeSystem.java +++ b/system/general/src/main/java/org/wamblee/system/CompositeComponent.java @@ -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) { 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 885cff39..ab8bae69 100644 --- a/system/general/src/test/java/org/wamblee/system/SystemAssemblerTest.java +++ b/system/general/src/test/java/org/wamblee/system/SystemAssemblerTest.java @@ -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]); diff --git a/system/spring/src/main/java/org/wamblee/system/spring/SpringSystem.java b/system/spring/src/main/java/org/wamblee/system/spring/SpringSystem.java index 7a8b513e..05731af8 100644 --- a/system/spring/src/main/java/org/wamblee/system/spring/SpringSystem.java +++ b/system/spring/src/main/java/org/wamblee/system/spring/SpringSystem.java @@ -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; -- 2.31.1