(no commit message)
[utils] / system / general / src / main / java / org / wamblee / system / AbstractComponent.java
index 5c96b5491f650288dce681a15337b389f71490d8..a78b46f1152720a10fd94b62da686a2a42776eb7 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,11 +18,12 @@ 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;
-       private List<InterfaceDescriptor> _required;
-       private Map<InterfaceDescriptor, Service> _running;
+       private List<ProvidedInterface> _provided;
+       private List<RequiredInterface> _required;
+       private Map<ProvidedInterface, Service> _running;
        
        /**
         * Constructs the subsystem.
@@ -35,15 +37,21 @@ public abstract class AbstractComponent implements Component {
         * @param aRequired
         *            Required services.
         */
-       protected AbstractComponent(String aName, ServiceRegistry aRegistry, InterfaceDescriptor[] aProvided,
-                       InterfaceDescriptor[] aRequired) {
+       protected AbstractComponent(String aName, ServiceRegistry aRegistry, ProvidedInterface[] aProvided,
+                       RequiredInterface[] aRequired) {
+               _status = Status.NOT_STARTED;
                _name = aName;
                _registry = aRegistry; 
-               _provided = new ArrayList<InterfaceDescriptor>();
+               _provided = new ArrayList<ProvidedInterface>();
                _provided.addAll(Arrays.asList(aProvided));
-               _required = new ArrayList<InterfaceDescriptor>();
+               _required = new ArrayList<RequiredInterface>();
                _required.addAll(Arrays.asList(aRequired));
-               _running = new HashMap<InterfaceDescriptor, Service>();
+               _running = new HashMap<ProvidedInterface, Service>();
+       }
+       
+       @Override
+       public Status getStatus() {
+               return _status; 
        }
 
        @Override
@@ -56,13 +64,13 @@ public abstract class AbstractComponent implements Component {
        }
 
        @Override
-       public final ProvidedInterfaceDescriptor[] getProvidedServices() {
-               return _provided.toArray(new ProvidedInterfaceDescriptor[0]);
+       public final ProvidedInterface[] getProvidedServices() {
+               return _provided.toArray(new ProvidedInterface[0]);
        }
 
        @Override
-       public final RequiredInterfaceDescriptor[] getRequiredServices() {
-               return _required.toArray(new RequiredInterfaceDescriptor[0]);
+       public final RequiredInterface[] getRequiredServices() {
+               return _required.toArray(new RequiredInterface[0]);
        }
 
        @Override
@@ -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]);
        }
 
@@ -93,7 +102,7 @@ public abstract class AbstractComponent implements Component {
         *            Service.
         */
        protected final void addService(String aContext,
-                       ProvidedInterfaceDescriptor aDescriptor, Object aService) {
+                       ProvidedInterface aDescriptor, Object aService) {
                LOG.info(aContext + ": service '" + aService + "' started.");
                Service svc = getRegistry().register(aDescriptor, aService);
                _running.put(svc.getDescriptor(), svc);
@@ -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();