X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fgraph%2FGraph.java;h=ddfd2cf783a9003bb5a3db98d20ff02eb0631455;hb=0d8d8f24656e585ee75558cfd6a4c661f8f14985;hp=387d5e4fd3ffc563d2690495078602d9928ccd6c;hpb=9bc96feb1a8b20fdb87edbfca54297e206229112;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 387d5e4f..ddfd2cf7 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 @@ -16,6 +16,7 @@ package org.wamblee.system.graph; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; /** @@ -25,15 +26,15 @@ import java.util.List; */ public class Graph { - private List _nodes; - private List _edges; + private List nodes; + private List edges; /** * Constructs the graph. */ public Graph() { - _nodes = new ArrayList(); - _edges = new ArrayList(); + nodes = new ArrayList(); + edges = new ArrayList(); } /** @@ -46,11 +47,11 @@ public class Graph { * using equals. */ public void addNode(Node aNode) { - if (_nodes.contains(aNode)) { + if (nodes.contains(aNode)) { throw new IllegalArgumentException("Node '" + aNode.getName() + "' already exists"); } - _nodes.add(aNode); + nodes.add(aNode); } /** @@ -61,7 +62,7 @@ public class Graph { * @return Node or null if not found. */ public Node findNode(String aName) { - for (Node node : _nodes) { + for (Node node : nodes) { if (node.getName().equals(aName)) { return node; } @@ -84,7 +85,7 @@ public class Graph { + aNode.getName() + "' because it is connected to one or more edges"); } - return _nodes.remove(aNode); + return nodes.remove(aNode); } /** @@ -112,19 +113,19 @@ public class Graph { * {@link #equals(Object)} is already a part of the graph. */ public void addEdge(Edge aEdge) { - if (_edges.contains(aEdge)) { + if (edges.contains(aEdge)) { throw new IllegalArgumentException("Edge '" + aEdge + "' already exists"); } - if (!_nodes.contains(aEdge.getFrom())) { + if (!nodes.contains(aEdge.getFrom())) { throw new IllegalArgumentException("From node '" + aEdge.getFrom() + "' from edge '" + aEdge + "' is not part of the graph"); } - if (!_nodes.contains(aEdge.getTo())) { + if (!nodes.contains(aEdge.getTo())) { throw new IllegalArgumentException("To node '" + aEdge.getTo() + "' from edge '" + aEdge + "' is not part of the graph"); } - _edges.add(aEdge); + edges.add(aEdge); } /** @@ -133,7 +134,7 @@ public class Graph { * @return True if the edge was removed. */ public boolean removeEdge(Edge aEdge) { - return _edges.remove(aEdge); + return edges.remove(aEdge); } /** @@ -151,7 +152,7 @@ public class Graph { * @return Copy of the list of nodes of the graph. */ public List getNodes() { - return new ArrayList(_nodes); + return new ArrayList(nodes); } /** @@ -159,7 +160,7 @@ public class Graph { * @return Copy of the list of edges of the graph. */ public List getEdges() { - return new ArrayList(_edges); + return new ArrayList(edges); } /** @@ -168,9 +169,21 @@ public class Graph { * @param aFactory Edge factory. */ public void extend(EdgeFactory aFactory) { - for (Node from : _nodes) { - for (Node to : _nodes) { - _edges.addAll(aFactory.create(from, to)); + for (Node from : nodes) { + for (Node to : nodes) { + edges.addAll(aFactory.create(from, to)); + } + } + } + + /** + * Applies a filter to the graph for removing elements. + * @param aFilter Filter to apply. + */ + public void applyFilter(EdgeFilter aFilter) { + for (Iterator edge = edges.iterator(); edge.hasNext(); ) { + if (aFilter.isViolated(edge.next())) { + edge.remove(); } } } @@ -183,7 +196,7 @@ public class Graph { */ public List findOutgoing(Node aNode) { List result = new ArrayList(); - for (Edge edge : _edges) { + for (Edge edge : edges) { if (edge.getFrom().getName().equals(aNode.getName())) { result.add(edge); } @@ -200,7 +213,7 @@ public class Graph { */ public List findIncoming(Node aNode) { List result = new ArrayList(); - for (Edge edge : _edges) { + for (Edge edge : edges) { if (edge.getTo().getName().equals(aNode.getName())) { result.add(edge); }