X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2FAbstractComponent.java;h=a78b46f1152720a10fd94b62da686a2a42776eb7;hb=0af4854898104bd6322c0f22feb6dc285859f420;hp=5c96b5491f650288dce681a15337b389f71490d8;hpb=6f277575685808a5c5a76555dd3e839dc5255031;p=utils 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..a78b46f1 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,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 _provided; - private List _required; - private Map _running; + private List _provided; + private List _required; + private Map _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(); + _provided = new ArrayList(); _provided.addAll(Arrays.asList(aProvided)); - _required = new ArrayList(); + _required = new ArrayList(); _required.addAll(Arrays.asList(aRequired)); - _running = new HashMap(); + _running = new HashMap(); + } + + @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();