X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fgraph%2Fcomponent%2FLinkVisitor.java;fp=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fgraph%2Fcomponent%2FLinkVisitor.java;h=088f05856ffdc1d28c90198651345ef55614fd84;hb=aa78ce0aeaa36871bd926eefa1eabf9cb3254c7a;hp=0000000000000000000000000000000000000000;hpb=436718e7b7ee0bb9f37db496dbde5c011d5f84e3;p=utils diff --git a/system/general/src/main/java/org/wamblee/system/graph/component/LinkVisitor.java b/system/general/src/main/java/org/wamblee/system/graph/component/LinkVisitor.java new file mode 100644 index 00000000..088f0585 --- /dev/null +++ b/system/general/src/main/java/org/wamblee/system/graph/component/LinkVisitor.java @@ -0,0 +1,68 @@ +/* + * Copyright 2008 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.wamblee.system.graph.component; + +import org.wamblee.system.core.ProvidedInterface; +import org.wamblee.system.core.SystemAssemblyException; +import org.wamblee.system.graph.DefaultEdge; +import org.wamblee.system.graph.Edge; +import org.wamblee.system.graph.Node; +import org.wamblee.system.graph.Visitor; + +/** + * Visitor that creates links between required and provided interfaces as + * described by the edges in the graph. + * + * @author Erik Brakkee + * + */ +public class LinkVisitor implements Visitor { + + @Override + public void visitEdge(Edge aEdge) { + Node from = aEdge.getFrom(); + Node to = aEdge.getTo(); + if (from instanceof RequiredInterfaceNode) { + RequiredInterfaceNode required = (RequiredInterfaceNode) from; + if (to instanceof ProvidedInterfaceNode) { + + ProvidedInterfaceNode provided = (ProvidedInterfaceNode) to; + required.getRequired().setProvider(provided.getProvided()); + + } else if (to instanceof ExternalRequiredInterfaceNode) { + ExternalRequiredInterfaceNode external = (ExternalRequiredInterfaceNode) to; + ProvidedInterface provider = external.getRequired() + .getProvider(); + if (provider == null && !required.getRequired().isOptional()) { + throw new SystemAssemblyException("Mandatory interface '" + + from + "' is not provided."); + } + if ( provider != null ) { + required.getRequired().setProvider(provider); + } + } + } else if (from instanceof ProvidedInterfaceNode) { + // Provided interfaces can only be published after the system has + // started. + } + } + + @Override + public void visitNode(Node aNode) { + // Empty. + } + +}