X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fcontainer%2FContainer.java;h=59067f974f2835d6980078ab8b240a518e628d58;hb=fd9ae3f8e84dba593b27d149d6e6a8baf17cc0fa;hp=92aba2144c3286f49ef0554fa5b537b6acf9e1b3;hpb=080d7c58c8228aeefc00960b8fd50cf193a04c0c;p=utils diff --git a/system/general/src/main/java/org/wamblee/system/container/Container.java b/system/general/src/main/java/org/wamblee/system/container/Container.java index 92aba214..59067f97 100644 --- a/system/general/src/main/java/org/wamblee/system/container/Container.java +++ b/system/general/src/main/java/org/wamblee/system/container/Container.java @@ -30,7 +30,11 @@ import org.wamblee.system.core.ProvidedInterface; import org.wamblee.system.core.RequiredInterface; import org.wamblee.system.core.Scope; import org.wamblee.system.core.SystemAssemblyException; +import org.wamblee.system.graph.CompositeEdgeFilter; +import org.wamblee.system.graph.EdgeFilter; import org.wamblee.system.graph.component.ComponentGraph; +import org.wamblee.system.graph.component.ConnectRequiredProvidedEdgeFilter; +import org.wamblee.system.graph.component.RequiredProvidedEdgeFactory; /** * Container consisting of multiple components. @@ -43,7 +47,7 @@ public class Container extends AbstractComponent { private List _components; private Set _componentNames; - private CompositeInterfaceRestriction _restriction; + private CompositeEdgeFilter _edgeFilter; private boolean _sealed; /** @@ -64,7 +68,7 @@ public class Container extends AbstractComponent { _components = new ArrayList(); _componentNames = new HashSet(); - _restriction = new CompositeInterfaceRestriction(); + _edgeFilter = new CompositeEdgeFilter(); _sealed = false; for (Component component : aComponents) { addComponent(component); @@ -93,21 +97,36 @@ public class Container extends AbstractComponent { aComponent.addContext(getQualifiedName()); return this; } - + /** - * Adds an interface restriction for explicitly configuring the relations - * between components. - * - * @param aRestriction - * Restriction to add. - * @return Reference to this to allow call chaining. + * Explictly connects required and provided interfaces. + * @param aClientComponent Client component, may not be null. + * @param aRequiredInterface Required interface. If null it means all required interfaces. + * @param aServerComponent Server component to connect to. If null, it means that no server components + * may be connected to and the provider of the required interface will be null. + * @param aProvidedInterface Provided interface. If null, it means that there is no restriction on the + * name of the provided interface and that it is automatically selected. */ - public Container addRestriction(InterfaceRestriction aRestriction) { + public void connectRequiredProvided(String aClientComponent, String aRequiredInterface, + String aServerComponent, String aProvidedInterface) { checkSealed(); - _restriction.add(aRestriction); - return this; + _edgeFilter.add(new ConnectRequiredProvidedEdgeFilter(aClientComponent, aRequiredInterface, aServerComponent, aProvidedInterface)); + } + + public void connectExternalRequired(String aComponent, String aRequiredInterface, + String aExternalRequiredInterface) { + checkSealed(); + // TODO implement. + throw new RuntimeException("not implemented"); + } + + public void connectExternalProvided(String aExternalProvided, String aComponent, String aProvidedInterface) { + checkSealed(); + // TODO implement. + throw new RuntimeException("not implemented"); } + @Override public Container addProvidedInterface(ProvidedInterface aProvided) { checkSealed(); @@ -233,7 +252,7 @@ public class Container extends AbstractComponent { graph.addProvidedInterface(this, prov); } - graph.addRestriction(_restriction); + graph.addEdgeFilter(_edgeFilter); return graph; }