X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fgraph%2Fcomponent%2FComponentGraph.java;h=6333dec4f7bfc72fd4d75a7b8fd6d9f99a3c5b22;hb=49ce7cb8387601982d5e6ef186ce206d38f6e3d7;hp=b41c41c81445d277165fed2eb7f44414b224d944;hpb=f4b445472d52e99b308d7c1c1f6d3a53b3afddda;p=utils diff --git a/system/general/src/main/java/org/wamblee/system/graph/component/ComponentGraph.java b/system/general/src/main/java/org/wamblee/system/graph/component/ComponentGraph.java index b41c41c8..6333dec4 100644 --- a/system/general/src/main/java/org/wamblee/system/graph/component/ComponentGraph.java +++ b/system/general/src/main/java/org/wamblee/system/graph/component/ComponentGraph.java @@ -1,5 +1,5 @@ /* - * Copyright 2008 the original author or authors. + * Copyright 2005-2010 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. @@ -12,13 +12,11 @@ * 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.general.Pair; + import org.wamblee.system.core.Component; import org.wamblee.system.core.ProvidedInterface; import org.wamblee.system.core.RequiredInterface; @@ -28,127 +26,144 @@ import org.wamblee.system.graph.Edge; import org.wamblee.system.graph.Graph; import org.wamblee.system.graph.Node; +import java.util.ArrayList; +import java.util.List; + /** - * Represents a component graph and provides the bridge from the - * component model to a graph model. The graph model is easier - * to work with to implement specific actions and validations than - * the component model. + * Represents a component graph and provides the bridge from the component model + * to a graph model. The graph model is easier to work with to implement + * specific actions and validations than the component model. */ public class ComponentGraph extends Graph { - - private boolean _isLinked; - private CompositeEdgeFilter _edgeFilter; + private boolean isLinked; + + private CompositeEdgeFilter edgeFilter; /** - * Constructs an empty component graph. + * Constructs an empty component graph. */ public ComponentGraph() { - _isLinked = false; - _edgeFilter = new CompositeEdgeFilter(); + isLinked = false; + edgeFilter = new CompositeEdgeFilter(); } - + /** - * Adds an externally required interface of a container. - * This should be called before any components of the container are - * added. - * @param aComponent Component requiring the interface. - * @param aInterface Required interface. + * Adds an externally required interface of a container. This should be + * called before any components of the container are added. + * + * @param aComponent + * Component requiring the interface. + * @param aInterface + * Required interface. */ - public void addRequiredInterface(Component aComponent, RequiredInterface aInterface) { + public void addRequiredInterface(Component aComponent, + RequiredInterface aInterface) { addNode(new ExternalRequiredInterfaceNode(aComponent, aInterface)); } - + /** - * Adds an externally provided interface of a container. - * This should be called after all components of the container have been added. - * @param aComponent Component providing the interface. - * @param aInterface Provided interface. + * Adds an externally provided interface of a container. This should be + * called after all components of the container have been added. + * + * @param aComponent + * Component providing the interface. + * @param aInterface + * Provided interface. */ - public void addProvidedInterface(Component aComponent, ProvidedInterface aInterface) { + public void addProvidedInterface(Component aComponent, + ProvidedInterface aInterface) { addNode(new ExternalProvidedInterfaceNode(aComponent, aInterface)); } - + /** - * Validates the component graph. + * Validates the component graph. */ - public void validate() { + public void validate() { extend(new RequiredProvidedEdgeFactory()); - applyFilter(_edgeFilter); + applyFilter(edgeFilter); accept(new CheckRequiredProvidedMultiplicityVisitor(this)); - accept(new CheckExternallyRequiredVisitor(this)); + accept(new CheckExternallyRequiredVisitor(this)); accept(new CheckExternallyProvidedVisitor(this)); accept(new CheckStartupDependenciesVisitor(this)); } - + /** - * Links provided and required interfaces together in the component - * model based on the graph model. + * Links provided and required interfaces together in the component model + * based on the graph model. */ public void link() { - if ( _isLinked ) { - return; + if (isLinked) { + return; } + accept(new LinkVisitor()); - _isLinked = true; + isLinked = true; } - + /** - * Finds a list of mappings of external provided interface to internal provided interface. + * Finds a list of mappings of external provided interface to internal + * provided interface. * - * @return List of pairs of external to internal interface. + * @return List of pairs of external to internal interface. */ - public List> findExternalProvidedInterfaceMapping() { - List> result = - new ArrayList>(); - for (Edge edge: getEdges()) { - if ( edge.getFrom() instanceof ExternalProvidedInterfaceNode && - edge.getTo() instanceof ProvidedInterfaceNode ) { - result.add(new Pair( - ((ExternalProvidedInterfaceNode)edge.getFrom()).getProvided(), - ((ProvidedInterfaceNode)edge.getTo()).getProvided() - )); + public List> findExternalProvidedInterfaceMapping() { + List> result = new ArrayList>(); + + for (Edge edge : getEdges()) { + if (edge.getFrom() instanceof ExternalProvidedInterfaceNode && + edge.getTo() instanceof ProvidedInterfaceNode) { + result.add(new Pair( + ((ExternalProvidedInterfaceNode) edge.getFrom()) + .getProvided(), ((ProvidedInterfaceNode) edge.getTo()) + .getProvided())); } } - return result; + + return result; } - + /** - * Adds a component by adding required interfaces, components, and - * provided interfaces. - * @param aComponent Component to add. + * Adds a component by adding required interfaces, components, and provided + * interfaces. + * + * @param aComponent + * Component to add. */ - public void addComponent(Component aComponent) { - // Add required interfaces. + public void addComponent(Component aComponent) { + // Add required interfaces. Node compNode = new ComponentNode(aComponent); List requiredNodes = new ArrayList(); - for (RequiredInterface required: aComponent.getRequiredInterfaces()) { - Node reqNode = new RequiredInterfaceNode(aComponent, required); + + for (RequiredInterface required : aComponent.getRequiredInterfaces()) { + Node reqNode = new RequiredInterfaceNode(aComponent, required); addNode(reqNode); requiredNodes.add(reqNode); } + // Add the component addNode(compNode); - - // Edges from component to required interface. - for (Node reqNode: requiredNodes) { + + // Edges from component to required interface. + for (Node reqNode : requiredNodes) { addEdge(new DefaultEdge(compNode, reqNode)); } - + // Add provided interfaces List providedNodes = new ArrayList(); - for (ProvidedInterface provided: aComponent.getProvidedInterfaces()) { - Node provNode = new ProvidedInterfaceNode(aComponent, provided); + + for (ProvidedInterface provided : aComponent.getProvidedInterfaces()) { + Node provNode = new ProvidedInterfaceNode(aComponent, provided); addNode(provNode); providedNodes.add(provNode); } - + // Edges from provided interface to component - for (Node provNode: providedNodes) { + for (Node provNode : providedNodes) { addEdge(new DefaultEdge(provNode, compNode)); } } public void addEdgeFilter(CompositeEdgeFilter aEdgeFilter) { - _edgeFilter.add(aEdgeFilter); + edgeFilter.add(aEdgeFilter); } }