X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fcore%2FAbstractComponent.java;h=01eff741ac362aa13e6b0d3280c9ae9975b001d6;hb=e73828b054b0734ddce0ff9194fca75ed3c98b7a;hp=5d89e4a46f839078c7adc5876bae684a3d2cdb8f;hpb=4845c677310814de4c98e22aad483e49b9dfc594;p=utils diff --git a/system/general/src/main/java/org/wamblee/system/core/AbstractComponent.java b/system/general/src/main/java/org/wamblee/system/core/AbstractComponent.java index 5d89e4a4..01eff741 100644 --- a/system/general/src/main/java/org/wamblee/system/core/AbstractComponent.java +++ b/system/general/src/main/java/org/wamblee/system/core/AbstractComponent.java @@ -31,7 +31,6 @@ public abstract class AbstractComponent implements Component { private static final Log LOG = LogFactory.getLog(AbstractComponent.class); - private Status _status; private String _context; private String _name; private List _provided; @@ -50,7 +49,6 @@ public abstract class AbstractComponent implements Component { */ protected AbstractComponent(String aName, ProvidedInterface[] aProvided, RequiredInterface[] aRequired) { - _status = Status.NOT_STARTED; _context = null; _name = aName; _provided = new ArrayList(); @@ -59,11 +57,6 @@ public abstract class AbstractComponent implements Component { _required.addAll(Arrays.asList(aRequired)); _running = new HashSet(); } - - @Override - public Status getStatus() { - return _status; - } @Override public final String getName() { @@ -89,12 +82,12 @@ public abstract class AbstractComponent implements Component { } @Override - public final ProvidedInterface[] getProvidedServices() { + public final ProvidedInterface[] getProvidedInterfaces() { return _provided.toArray(new ProvidedInterface[0]); } @Override - public final RequiredInterface[] getRequiredServices() { + public final RequiredInterface[] getRequiredInterfaces() { return _required.toArray(new RequiredInterface[0]); } @@ -102,7 +95,6 @@ public abstract class AbstractComponent implements Component { public final void start() { LOG.info("Initializing '" + getQualifiedName() + "'"); doStart(); - _status = Status.RUNNING; if ( _running.size() != _provided.size()) { List remaining = new ArrayList(_provided); @@ -124,7 +116,7 @@ public abstract class AbstractComponent implements Component { * @param aService * Service. */ - protected final void addService( + protected final void addInterface( ProvidedInterface aDescriptor, Object aService) { LOG.info("Interface '" + getQualifiedName() + "." + aDescriptor.getName() + "' started."); _running.add(aDescriptor); @@ -132,21 +124,38 @@ public abstract class AbstractComponent implements Component { } @Override - public ProvidedInterface[] getRunningServices() { + public ProvidedInterface[] getRunningInterfaces() { return _running.toArray(new ProvidedInterface[0]); } @Override public void stop() { - doStop(); - _status = Status.STOPPED; + doStop(); + if ( _running.size() > 0 ) { + // programming error. + throw new RuntimeException(getQualifiedName() + ": still services running after the stop call."); + } } - protected abstract void doStop(); + protected abstract void doStop(); + + /** + * Implementations must call this method to indicate that a running service has + * been stopped. + * + * @param aService + * Service. + */ + protected final void removeInterface( + ProvidedInterface aDescriptor) { + LOG.info("Interface '" + getQualifiedName() + "." + aDescriptor.getName() + "' stopped."); + _running.remove(aDescriptor); + aDescriptor.publish(null); + } @Override public String toString() { - return _name; + return getQualifiedName(); } }