X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2FAbstractComponent.java;h=074e3ab0fe408a3e111f569b7a77d1df76bf0c23;hb=2aa6c38d06e981a4a6c240e2d371638205c3fb54;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..074e3ab0 100644 --- a/system/general/src/main/java/org/wamblee/system/AbstractComponent.java +++ b/system/general/src/main/java/org/wamblee/system/AbstractComponent.java @@ -2,10 +2,9 @@ package org.wamblee.system; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; +import java.util.HashSet; import java.util.List; -import java.util.Map; +import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -17,17 +16,15 @@ public abstract class AbstractComponent implements Component { private static final Log LOG = LogFactory.getLog(AbstractComponent.class); - private String _name; - private ServiceRegistry _registry; - private List _provided; - private List _required; - private Map _running; + private Status _status; + private String _name; + private List _provided; + private List _required; + private Set _running; /** * Constructs the subsystem. - * - * @param aRegistry - * Registry of services. + * * @param aName * Name of the system. * @param aProvided @@ -35,55 +32,49 @@ public abstract class AbstractComponent implements Component { * @param aRequired * Required services. */ - protected AbstractComponent(String aName, ServiceRegistry aRegistry, InterfaceDescriptor[] aProvided, - InterfaceDescriptor[] aRequired) { + protected AbstractComponent(String aName, 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 HashSet(); + } + + @Override + public Status getStatus() { + return _status; } @Override public final String getName() { return _name; } - - public ServiceRegistry getRegistry() { - return _registry; - } @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 - public final Service[] start(String aContext, - Service[] aRequiredServices) { - LOG.info("Initializing '" + aContext + "." + _name + "' with " - + Arrays.asList(aRequiredServices)); - doStart(aContext + "." + getName(), aRequiredServices); - return _running.values().toArray(new Service[0]); + public final void start(String aContext) { + LOG.info("Initializing '" + aContext + "." + _name + "'"); + doStart(aContext + "." + getName()); + _status = Status.RUNNING; } /** * Must be implemented for initializing the subsystem. The implementation * must call {@link #addService(Service)} for each service that is started. - * - * @param aRequiredServices - * Services that are already running from other subsystems that - * may be used. */ - protected abstract void doStart(String aContext, - Service[] aRequiredServices); + protected abstract void doStart(String aContext); /** * Implementations must call this method to indicate that a new service has @@ -93,23 +84,21 @@ 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); + _running.add(aDescriptor); + aDescriptor.publish(aService); } @Override - public Service[] getRunningServices() { - return _running.values().toArray(new Service[0]); + public ProvidedInterface[] getRunningServices() { + return _running.toArray(new ProvidedInterface[0]); } @Override public void stop() { doStop(); - for (Service svc: _running.values()) { - getRegistry().remove(svc); - } + _status = Status.STOPPED; } protected abstract void doStop();