X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2FCompositeSystem.java;h=24547a9373078878880130b8463646312e87c682;hb=6f277575685808a5c5a76555dd3e839dc5255031;hp=b3abf07186da3774dd0a586b595a12a2c62ff75b;hpb=4c7e63f11337abfaa6ea13eab4b6ca11891f4977;p=utils diff --git a/system/general/src/main/java/org/wamblee/system/CompositeSystem.java b/system/general/src/main/java/org/wamblee/system/CompositeSystem.java index b3abf071..24547a93 100644 --- a/system/general/src/main/java/org/wamblee/system/CompositeSystem.java +++ b/system/general/src/main/java/org/wamblee/system/CompositeSystem.java @@ -11,23 +11,26 @@ import sun.util.LocaleServiceProviderPool.LocalizedObjectGetter; /** * Composite system consisting of multiple subsystems. + * + * @author Erik Brakkee */ -public class CompositeSystem extends AbstractSubSystem { +public class CompositeSystem extends AbstractComponent { private static final Log LOG = LogFactory.getLog(CompositeSystem.class); - private SubSystem[] _systems; + private Component[] _systems; /** * Construcst the composite system. * @param aName Name of the system. + * @param aRegistry Service registry. * @param aSystems Subsystems. * @param aProvided Provided services of the system. * @param aRequired Required services by the system. */ - public CompositeSystem(String aName, SubSystem[] aSystems, - ServiceDescriptor[] aProvided, ServiceDescriptor[] aRequired) { - super(aName, aProvided, aRequired); + public CompositeSystem(String aName, ServiceRegistry aRegistry, Component[] aSystems, + InterfaceDescriptor[] aProvided, InterfaceDescriptor[] aRequired) { + super(aName, aRegistry, aProvided, aRequired); _systems = aSystems; validate(); } @@ -39,24 +42,24 @@ public class CompositeSystem extends AbstractSubSystem { * Also logs a warning in case of superfluous requirements. */ private void validate() { - List provided = new ArrayList(); - for (SubSystem system : _systems) { + List provided = new ArrayList(); + for (Component system : _systems) { provided.addAll(Arrays.asList(system.getProvidedServices())); } - List required = new ArrayList(); - for (SubSystem system : _systems) { + List required = new ArrayList(); + for (Component system : _systems) { required.addAll(Arrays.asList(system.getRequiredServices())); } - for (ServiceDescriptor service : getProvidedServices()) { + for (InterfaceDescriptor service : getProvidedServices()) { if (!(provided.contains(service))) { throw new SystemAssemblyException(getName() + ": Service '" + service + "' is not provided by any of the subsystems"); } } - for (ServiceDescriptor service : getRequiredServices()) { + for (InterfaceDescriptor service : getRequiredServices()) { if (!(required.contains(service))) { info("Service '" + service @@ -64,28 +67,33 @@ public class CompositeSystem extends AbstractSubSystem { } } - List reallyRequired = new ArrayList( + List reallyRequired = new ArrayList( required); - for (ServiceDescriptor service : provided) { + for (InterfaceDescriptor service : provided) { reallyRequired.remove(service); } - for (ServiceDescriptor service: getRequiredServices()) { + for (InterfaceDescriptor service: getRequiredServices()) { reallyRequired.remove(service); } - for (ServiceDescriptor service: reallyRequired) { + for (InterfaceDescriptor service: reallyRequired) { throw new SystemAssemblyException(getName() + ": " + "Service '" + service + "' is not provided internally and is not indicated as required for this sub system"); } } @Override - protected void doStart(String aContext, ServiceRegistry aRegistry, Service[] aRequiredServices) { - List descriptors = new ArrayList(); + protected void doStart(String aContext, Service[] aRequiredServices) { + List descriptors = new ArrayList(); for (Service service : aRequiredServices) { descriptors.add(service.getDescriptor()); } - SystemAssembler assembler = new SystemAssembler(getName(), _systems, - descriptors.toArray(new ServiceDescriptor[0])); - assembler.start(aRegistry, aRequiredServices); + SystemAssembler assembler = new SystemAssembler(aContext + "." + getName(), _systems, + descriptors.toArray(new ProvidedInterfaceDescriptor[0])); + assembler.start(getRegistry(), aRequiredServices); + } + + @Override + protected void doStop() { + // Empty. } private void info(String aMsg) {