X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fcore%2FAbstractComponent.java;h=9000f4ae5234a1bc8e2b54536fdd20d29f15c0a2;hb=102eebeba2200f9bb2d8523bdfe7ace4ff663628;hp=b8e4e6be9b2f5276b041d44e9e61434c1c503ac0;hpb=dea786c9d49228a37cb5fd5b4113b86d9f6cddbf;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 b8e4e6be..9000f4ae 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 @@ -58,7 +58,21 @@ public abstract class AbstractComponent implements Component { _required = new ArrayList(); _required.addAll(Arrays.asList(aRequired)); } - + + protected AbstractComponent(String aName) { + this(aName, new ProvidedInterface[0], new RequiredInterface[0]); + } + + public AbstractComponent addProvidedInterface(ProvidedInterface aProvided) { + _provided.add(aProvided); + return this; + } + + public AbstractComponent addRequiredInterface(RequiredInterface aRequired) { + _required.add(aRequired); + return this; + } + @Override public final String getName() { return _name; @@ -72,6 +86,11 @@ public abstract class AbstractComponent implements Component { _context = aContext + "." + _context; } } + + @Override + public String getContext() { + return _context; + } @Override public String getQualifiedName() { @@ -93,12 +112,13 @@ public abstract class AbstractComponent implements Component { @Override public final Type start(Scope aScope) { - LOG.info("Initializing '" + getQualifiedName() + "'"); + LOG.info("Initialization starting '" + getQualifiedName() + "'"); List oldRemaining = _remaining.get(); _remaining.set(new ArrayList(Arrays.asList(getProvidedInterfaces()))); try { Type runtime = doStart(aScope); checkNotStartedInterfaces(); + LOG.info("Initialization finished '" + getQualifiedName() + "'"); return runtime; } finally { _remaining.set(oldRemaining); @@ -139,13 +159,18 @@ public abstract class AbstractComponent implements Component { Object aService, Scope aScope) { LOG.info("Interface '" + getQualifiedName() + "." + aDescriptor.getName() + "' started."); - _remaining.get().remove(aDescriptor); + if ( !_remaining.get().remove(aDescriptor) ) { + throw new SystemAssemblyException("Component '" + getQualifiedName() + "' started an unexpected interface '" + + aDescriptor + "' that was not registerd as a provided interface before"); + } aScope.publishInterface(aDescriptor, aService); } @Override public void stop(Type aRuntime) { + LOG.info("Stopping initiated '" + getQualifiedName() + "'"); doStop(aRuntime); + LOG.info("Stopping completed '" + getQualifiedName() + "'"); } protected abstract void doStop(Type aRuntime); @@ -154,5 +179,23 @@ public abstract class AbstractComponent implements Component { public String toString() { return getQualifiedName(); } + + public ProvidedInterface findProvidedInterface(String aName) { + for (ProvidedInterface provided: getProvidedInterfaces()) { + if ( provided.getName().equals(aName)) { + return provided; + } + } + return null; + } + + public RequiredInterface findRequiredInterface(String aName) { + for (RequiredInterface required: getRequiredInterfaces()) { + if ( required.getName().equals(aName)) { + return required; + } + } + return null; + } }