X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2FAbstractSubSystem.java;h=6e9cebbd0966fa5b1814c735d67e0cca36a49334;hb=b6364aebdb15bb0648e8db2030d8ad793e209af6;hp=7a6724f32ea8af702df9d9f45527f1dc53b09c98;hpb=e7aa00a2eebaa1f8f9d7d1c407a5e8a7cbe899f7;p=utils diff --git a/system/general/src/main/java/org/wamblee/system/AbstractSubSystem.java b/system/general/src/main/java/org/wamblee/system/AbstractSubSystem.java index 7a6724f3..6e9cebbd 100644 --- a/system/general/src/main/java/org/wamblee/system/AbstractSubSystem.java +++ b/system/general/src/main/java/org/wamblee/system/AbstractSubSystem.java @@ -2,6 +2,7 @@ package org.wamblee.system; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -17,6 +18,7 @@ public abstract class AbstractSubSystem implements SubSystem { private static final Log LOG = LogFactory.getLog(AbstractSubSystem.class); private String _name; + private ServiceRegistry _registry; private List _provided; private List _required; private Map _running; @@ -33,9 +35,10 @@ public abstract class AbstractSubSystem implements SubSystem { * @param aRequired * Required services. */ - protected AbstractSubSystem(String aName, ServiceDescriptor[] aProvided, + protected AbstractSubSystem(String aName, ServiceRegistry aRegistry, ServiceDescriptor[] aProvided, ServiceDescriptor[] aRequired) { _name = aName; + _registry = aRegistry; _provided = new ArrayList(); _provided.addAll(Arrays.asList(aProvided)); _required = new ArrayList(); @@ -47,37 +50,39 @@ public abstract class AbstractSubSystem implements SubSystem { public final String getName() { return _name; } + + public ServiceRegistry getRegistry() { + return _registry; + } @Override - public final ServiceDescriptor[] getProvidedServices() { - return _provided.toArray(new ServiceDescriptor[0]); + public final ProvidedServiceDescriptor[] getProvidedServices() { + return _provided.toArray(new ProvidedServiceDescriptor[0]); } @Override - public final ServiceDescriptor[] getRequiredServices() { - return _required.toArray(new ServiceDescriptor[0]); + public final RequiredServiceDescriptor[] getRequiredServices() { + return _required.toArray(new RequiredServiceDescriptor[0]); } @Override - public final Service[] start(String aContext, ServiceRegistry aRegistry, + public final Service[] start(String aContext, Service[] aRequiredServices) { LOG.info("Initializing '" + aContext + "." + _name + "' with " + Arrays.asList(aRequiredServices)); - doStart(aContext + "." + getName(), aRegistry, aRequiredServices); + doStart(aContext + "." + getName(), aRequiredServices); return _running.values().toArray(new Service[0]); } /** * Must be implemented for initializing the subsystem. The implementation * must call {@link #addService(Service)} for each service that is started. - * - * @param aRegistry Service registry. + * * @param aRequiredServices * Services that are already running from other subsystems that * may be used. */ protected abstract void doStart(String aContext, - ServiceRegistry aRegistry, Service[] aRequiredServices); /** @@ -88,10 +93,9 @@ public abstract class AbstractSubSystem implements SubSystem { * Service. */ protected final void addService(String aContext, - ServiceRegistry aRegistry, - ServiceDescriptor aDescriptor, Object aService) { + ProvidedServiceDescriptor aDescriptor, Object aService) { LOG.info(aContext + ": service '" + aService + "' started."); - Service svc = aRegistry.register(aDescriptor, aService); + Service svc = getRegistry().register(aDescriptor, aService); _running.put(svc.getDescriptor(), svc); } @@ -101,14 +105,14 @@ public abstract class AbstractSubSystem implements SubSystem { } @Override - public void stop(String aContext, ServiceRegistry aRegistry) { - doStop(aContext); + public void stop() { + doStop(); for (Service svc: _running.values()) { - aRegistry.remove(svc); + getRegistry().remove(svc); } } - protected abstract void doStop(String aContext); + protected abstract void doStop(); @Override public String toString() {