package models;
import java.util.HashSet;
import java.util.Set;
public class DirectedGraph {
private Set<Node> nodes = null;
private Set<Edge> edges = null;
public DirectedGraph() {
nodes = new HashSet<>();
edges = new HashSet<>();
}
public Set<Node> getNodes() {
return nodes;
}
public void setNodes(Set<Node> nodes) {
this.nodes = nodes;
}
public void addNode(Node node) {
nodes.add(node);
}
public void removeNode(Node node) {
nodes.remove(node);
node.clearInEdges();
node.clearOutEdges();
for (Edge edge: edges) {
if (edge.getSource().equals(node)) {
edges.remove(edge);
} else if (edge.getDestination().equals(node)) {
edges.remove(edge);
}
}
}
public Set<Edge> getEdges() {
return edges;
}
public void setEdges(Set<Edge> edges) {
this.edges = edges;
for (Edge edge: edges) {
if (!nodes.contains(edge.getSource())) nodes.add(edge.getSource());
if (!nodes.contains(edge.getDestination())) nodes.add(edge.getDestination());
edge.getSource().addOutEdge(edge);
edge.getDestination().addInEdge(edge);
}
}
public void addEdge(Edge edge) {
edges.add(edge);
if (!nodes.contains(edge.getSource())) nodes.add(edge.getSource());
if (!nodes.contains(edge.getDestination())) nodes.add(edge.getDestination());
edge.getSource().addOutEdge(edge);
edge.getDestination().addInEdge(edge);
}
public void removeEdge(Edge edge) {
edges.remove(edge);
edge.getSource().removeOutEdge(edge);
edge.getDestination().removeInEdge(edge);
}
}