X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fgraph%2FGraph.java;h=d01bc4056e6bbf8d49dc1b8d497fa70aa26ccd5c;hb=dec278a67997ea8e85d10662e31548afd8890ed3;hp=f84873e3ee0b0a761223a060f91a5ccae08bd138;hpb=ddd261f331280640c5b53c7128230b629ebcd268;p=utils diff --git a/system/general/src/main/java/org/wamblee/system/graph/Graph.java b/system/general/src/main/java/org/wamblee/system/graph/Graph.java index f84873e3..d01bc405 100644 --- a/system/general/src/main/java/org/wamblee/system/graph/Graph.java +++ b/system/general/src/main/java/org/wamblee/system/graph/Graph.java @@ -1,61 +1,56 @@ /* - * 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. * 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; import java.util.ArrayList; import java.util.Iterator; import java.util.List; - /** * Represents a graph consisting of nodes and edges. - * + * * @author Erik Brakkee */ public class Graph { - /** - * DOCUMENT ME! - */ private List nodes; - /** - * DOCUMENT ME! - */ private List edges; -/** + /** * Constructs the graph. */ public Graph() { - nodes = new ArrayList(); - edges = new ArrayList(); + nodes = new ArrayList(); + edges = new ArrayList(); } /** * Adds a node. - * - * @param aNode Node to add. - * - * @throws IllegalArgumentException In case the node already exists. Node - * equality is checked using equals. + * + * @param aNode + * Node to add. + * + * @throws IllegalArgumentException + * In case the node already exists. Node equality is checked + * using equals. */ public void addNode(Node aNode) { if (nodes.contains(aNode)) { - throw new IllegalArgumentException("Node '" + aNode.getName() - + "' already exists"); + throw new IllegalArgumentException("Node '" + aNode.getName() + + "' already exists"); } nodes.add(aNode); @@ -63,9 +58,10 @@ public class Graph { /** * Finds a node with the given name. - * - * @param aName Node name. - * + * + * @param aName + * Node name. + * * @return Node or null if not found. */ public Node findNode(String aName) { @@ -80,19 +76,20 @@ public class Graph { /** * Removes a node. - * - * @param aNode Node to remove. - * + * + * @param aNode + * Node to remove. + * * @return True iff the node was removed. - * - * @throws IllegalArgumentException In case there are edges of which the - * node is a part. + * + * @throws IllegalArgumentException + * In case there are edges of which the node is a part. */ public boolean removeNode(Node aNode) { if (!findOutgoing(aNode).isEmpty() || !findIncoming(aNode).isEmpty()) { - throw new IllegalArgumentException("Cannot remove node '" - + aNode.getName() - + "' because it is connected to one or more edges"); + throw new IllegalArgumentException("Cannot remove node '" + + aNode.getName() + + "' because it is connected to one or more edges"); } return nodes.remove(aNode); @@ -100,9 +97,10 @@ public class Graph { /** * Adds a list of nodes. - * - * @param aNodes Nodes to add. - * + * + * @param aNodes + * Nodes to add. + * * @see #addNode(Node) */ public void addNodes(List aNodes) { @@ -113,27 +111,29 @@ public class Graph { /** * Adds an edge. - * - * @param aEdge Edge to add. - * - * @throws IllegalArgumentException In case one of the nodes of the edges - * is not part of the graph or if the same edge (as determined by - * {@link #equals(Object)} is already a part of the graph. + * + * @param aEdge + * Edge to add. + * + * @throws IllegalArgumentException + * In case one of the nodes of the edges is not part of the + * graph or if the same edge (as determined by + * {@link #equals(Object)} is already a part of the graph. */ public void addEdge(Edge aEdge) { if (edges.contains(aEdge)) { - throw new IllegalArgumentException("Edge '" + aEdge - + "' already exists"); + throw new IllegalArgumentException("Edge '" + aEdge + + "' already exists"); } if (!nodes.contains(aEdge.getFrom())) { - throw new IllegalArgumentException("From node '" + aEdge.getFrom() - + "' from edge '" + aEdge + "' is not part of the graph"); + throw new IllegalArgumentException("From node '" + aEdge.getFrom() + + "' from edge '" + aEdge + "' is not part of the graph"); } if (!nodes.contains(aEdge.getTo())) { - throw new IllegalArgumentException("To node '" + aEdge.getTo() - + "' from edge '" + aEdge + "' is not part of the graph"); + throw new IllegalArgumentException("To node '" + aEdge.getTo() + + "' from edge '" + aEdge + "' is not part of the graph"); } edges.add(aEdge); @@ -141,9 +141,10 @@ public class Graph { /** * Removes an edge. - * - * @param aEdge Edge to remove. - * + * + * @param aEdge + * Edge to remove. + * * @return True if the edge was removed. */ public boolean removeEdge(Edge aEdge) { @@ -152,8 +153,9 @@ public class Graph { /** * Adds a number of edges. - * - * @param aEdges Edges to add. + * + * @param aEdges + * Edges to add. */ public void addEdges(List aEdges) { for (Edge edge : aEdges) { @@ -163,7 +165,7 @@ public class Graph { /** * Gets the nodes. - * + * * @return Copy of the list of nodes of the graph. */ public List getNodes() { @@ -172,7 +174,7 @@ public class Graph { /** * Gets the edges. - * + * * @return Copy of the list of edges of the graph. */ public List getEdges() { @@ -180,11 +182,11 @@ public class Graph { } /** - * Extends the graph with edges using an edge factory. All - * combinations of nodes are passed to the factory which creates - * additional edges. - * - * @param aFactory Edge factory. + * Extends the graph with edges using an edge factory. All combinations of + * nodes are passed to the factory which creates additional edges. + * + * @param aFactory + * Edge factory. */ public void extend(EdgeFactory aFactory) { for (Node from : nodes) { @@ -196,8 +198,9 @@ public class Graph { /** * Applies a filter to the graph for removing elements. - * - * @param aFilter Filter to apply. + * + * @param aFilter + * Filter to apply. */ public void applyFilter(EdgeFilter aFilter) { for (Iterator edge = edges.iterator(); edge.hasNext();) { @@ -208,12 +211,13 @@ public class Graph { } /** - * Finds all outgoing edges of a node. More specifically, finds - * all edges e for which e.getFrom().getName() = + * Finds all outgoing edges of a node. More specifically, finds all edges + * e for which e.getFrom().getName() = * aNode.getName(). - * - * @param aNode Node for which to find outgoing edges. - * + * + * @param aNode + * Node for which to find outgoing edges. + * * @return List of outgoing edges. */ public List findOutgoing(Node aNode) { @@ -229,12 +233,13 @@ public class Graph { } /** - * Finds all incoming edges of a node. More specifically, finds - * all edges e for which e.getTo().getName() = + * Finds all incoming edges of a node. More specifically, finds all edges + * e for which e.getTo().getName() = * aNode.getName(). - * - * @param aNode Node for which to find incoming edges. - * + * + * @param aNode + * Node for which to find incoming edges. + * * @return List of incoming edges. */ public List findIncoming(Node aNode) { @@ -250,23 +255,24 @@ public class Graph { } /** - * Implements a visitor design pattern. This loops over all nodes - * and all edges and invokes the appropriate visit methods on the visitor. - * - * @param aVisitor Visitor. + * Implements a visitor design pattern. This loops over all nodes and all + * edges and invokes the appropriate visit methods on the visitor. + * + * @param aVisitor + * Visitor. */ public void accept(Visitor aVisitor) { - List nodes = getNodes(); // copy to make sure the visitor can - // modify the - // list of nodes as part of the loop. + List allNodes = getNodes(); // copy to make sure the visitor can + // modify the + // list of nodes as part of the loop. - List edges = getEdges(); // copy ..... (see above). + List allEdges = getEdges(); // copy ..... (see above). - for (Node node : nodes) { + for (Node node : allNodes) { aVisitor.visitNode(node); } - for (Edge edge : edges) { + for (Edge edge : allEdges) { aVisitor.visitEdge(edge); } }