/* * 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 java.util.ArrayList; import java.util.List; import org.wamblee.system.graph.DefaultEdge; import org.wamblee.system.graph.Edge; import org.wamblee.system.graph.EdgeFactory; import org.wamblee.system.graph.Node; /** * Factory that creates edges between required and provided interfaces. * Speciflcally it creates: * * * @author Erik Brakkee * */ public class RequiredProvidedEdgeFactory implements EdgeFactory { public RequiredProvidedEdgeFactory() { // Empty. } @Override public List create(Node aFrom, Node aTo) { List result = new ArrayList(); if (aFrom instanceof RequiredInterfaceNode) { RequiredInterfaceNode required = (RequiredInterfaceNode) aFrom; if (aTo instanceof ProvidedInterfaceNode) { ProvidedInterfaceNode provided = (ProvidedInterfaceNode) aTo; if (required.getRequired() .implementedBy(provided.getProvided())) { result.add(new DefaultEdge(required, provided)); } } else if (aTo instanceof ExternalRequiredInterfaceNode) { ExternalRequiredInterfaceNode external = (ExternalRequiredInterfaceNode) aTo; if ( external.getRequired().covers(required.getRequired())) { result.add(new DefaultEdge(required, external)); } } } else if ( aFrom instanceof ProvidedInterfaceNode) { ProvidedInterfaceNode provided = (ProvidedInterfaceNode)aFrom; if ( aTo instanceof ExternalProvidedInterfaceNode) { ExternalProvidedInterfaceNode external = (ExternalProvidedInterfaceNode)aTo; if (provided.getProvided().covers(external.getProvided())) { result.add(new DefaultEdge(external, provided)); } } } return result; } }