X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2FSystemAssembler.java;h=5cdb3890cc5a3b810345f0dc114b424d143af7e6;hb=0af4854898104bd6322c0f22feb6dc285859f420;hp=80bab167fa1de1bf7c7c071d14f6ad60e93b627a;hpb=b6364aebdb15bb0648e8db2030d8ad793e209af6;p=utils diff --git a/system/general/src/main/java/org/wamblee/system/SystemAssembler.java b/system/general/src/main/java/org/wamblee/system/SystemAssembler.java index 80bab167..5cdb3890 100644 --- a/system/general/src/main/java/org/wamblee/system/SystemAssembler.java +++ b/system/general/src/main/java/org/wamblee/system/SystemAssembler.java @@ -13,6 +13,8 @@ import org.apache.commons.logging.LogFactory; /** * Assembler to control multiple subsystems. It makes sure that all dependencies * are met and controls the order in which systems are initialized. + * + * @author Erik Brakkee */ public class SystemAssembler { @@ -20,30 +22,30 @@ public class SystemAssembler { private static final String ROOT_CONTEXT_NAME = "root"; private String _context; - private SubSystem[] _systems; + private Component[] _systems; - public static RequiredServiceDescriptor[] filterRequiredServices( - ProvidedServiceDescriptor aProvided, - Collection aDescriptors) { - List required = new ArrayList(); - for (RequiredServiceDescriptor descriptor : aDescriptors) { + public static RequiredInterface[] filterRequiredServices( + ProvidedInterface aProvided, + Collection aDescriptors) { + List required = new ArrayList(); + for (RequiredInterface descriptor : aDescriptors) { if (descriptor.implementedBy(aProvided)) { required.add(descriptor); } } - return required.toArray(new RequiredServiceDescriptor[0]); + return required.toArray(new RequiredInterface[0]); } - public static ProvidedServiceDescriptor[] filterProvidedServices( - RequiredServiceDescriptor aRequired, - Collection aProvided) { - List provided = new ArrayList(); - for (ProvidedServiceDescriptor descriptor : aProvided) { + public static ProvidedInterface[] filterProvidedServices( + RequiredInterface aRequired, + Collection aProvided) { + List provided = new ArrayList(); + for (ProvidedInterface descriptor : aProvided) { if (aRequired.implementedBy(descriptor)) { provided.add(descriptor); } } - return provided.toArray(new ProvidedServiceDescriptor[0]); + return provided.toArray(new ProvidedInterface[0]); } /** @@ -55,8 +57,8 @@ public class SystemAssembler { * Available services from other systems outside of the systems * that this assembler manages. */ - public SystemAssembler(SubSystem[] aSystems, - ProvidedServiceDescriptor[] aAvailableServices) { + public SystemAssembler(Component[] aSystems, + ProvidedInterface[] aAvailableServices) { this(ROOT_CONTEXT_NAME, aSystems, aAvailableServices); } @@ -71,8 +73,8 @@ public class SystemAssembler { * Available services from other systems outside of the systems * that this assembler manages. */ - public SystemAssembler(String aContext, SubSystem[] aSystems, - ProvidedServiceDescriptor[] aAvailableServices) { + public SystemAssembler(String aContext, Component[] aSystems, + ProvidedInterface[] aAvailableServices) { _context = aContext; _systems = aSystems; validate(aAvailableServices); @@ -82,20 +84,20 @@ public class SystemAssembler { * Determines if the systems are ordered appropriately so that all * dependencies are met. */ - private void validate(ProvidedServiceDescriptor[] aDescriptors) + private void validate(ProvidedInterface[] aDescriptors) throws SystemAssemblyException { - List allProvided = new ArrayList(); - for (ProvidedServiceDescriptor descriptor : aDescriptors) { + List allProvided = new ArrayList(); + for (ProvidedInterface descriptor : aDescriptors) { allProvided.add(descriptor); } - for (SubSystem system : _systems) { + for (Component system : _systems) { // Check if all required services are already provided by earlier // systems. - RequiredServiceDescriptor[] required = system.getRequiredServices(); + RequiredInterface[] required = system.getRequiredServices(); - for (RequiredServiceDescriptor descriptor : required) { - ProvidedServiceDescriptor[] filtered = filterProvidedServices( + for (RequiredInterface descriptor : required) { + ProvidedInterface[] filtered = filterProvidedServices( descriptor, allProvided); if (filtered.length == 0) { @@ -118,7 +120,7 @@ public class SystemAssembler { } // add all provided services - ProvidedServiceDescriptor[] provided = system.getProvidedServices(); + ProvidedInterface[] provided = system.getProvidedServices(); allProvided.addAll(Arrays.asList(provided)); } } @@ -134,20 +136,20 @@ public class SystemAssembler { */ public void start(ServiceRegistry aRegistry, Service[] aRequiredServices) { LOG.info("Starting '" + _context + "'"); - Map allProvided = new HashMap(); + Map allProvided = new HashMap(); for (Service service : aRequiredServices) { allProvided.put(service.getDescriptor(), service); } - for (SubSystem system : _systems) { + for (Component system : _systems) { // Compose a list of the required services required for the subsystem. - RequiredServiceDescriptor[] descriptors = system + RequiredInterface[] descriptors = system .getRequiredServices(); List services = new ArrayList(); - for (RequiredServiceDescriptor descriptor : descriptors) { - ProvidedServiceDescriptor[] provided = filterProvidedServices( + for (RequiredInterface descriptor : descriptors) { + ProvidedInterface[] provided = filterProvidedServices( descriptor, allProvided.keySet()); services.add(allProvided.get(provided[0])); }