Grid.java 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package holeg.model;
  2. import java.util.*;
  3. /**
  4. * Abstracts the electrical grid.
  5. */
  6. public class Grid {
  7. private List<GridNode> nodes = new ArrayList<>();
  8. private Set<GridEdge> edges = new HashSet<>();
  9. private HashMap<GridNode, List<GridEdge>> edgesPerNode = new HashMap<>();
  10. /**
  11. * Adds a node to the grid.
  12. * @param node The node to be added.
  13. */
  14. public void addNode(GridNode node) {
  15. if (node == null)
  16. throw new IllegalArgumentException("node is null");
  17. nodes.add(node);
  18. }
  19. /**
  20. * Adds edge to the edgesPerNode map.
  21. * @param node The node to use.
  22. * @param edge The edge to add.
  23. */
  24. private void addEdgeToMap(GridNode node, GridEdge edge) {
  25. List<GridEdge> edges = edgesPerNode.getOrDefault(node, new ArrayList<>());
  26. edges.add(edge);
  27. edgesPerNode.put(node, edges);
  28. }
  29. /**
  30. * Adds an edge to the grid.
  31. * @param edge The edge to add.
  32. */
  33. public void addEdge(GridEdge edge) {
  34. if (edge == null)
  35. throw new IllegalArgumentException("edge is null");
  36. if (edges.contains(edge))
  37. return;
  38. edges.add(edge);
  39. addEdgeToMap(edge.getFrom(), edge);
  40. addEdgeToMap(edge.getTo(), edge);
  41. }
  42. public List<GridNode> getNodes() {
  43. return Collections.unmodifiableList(nodes);
  44. }
  45. public Set<GridEdge> getEdges() {
  46. return Collections.unmodifiableSet(edges);
  47. }
  48. public List<GridEdge> getEdges(GridNode node) {
  49. if (edgesPerNode.containsKey(node))
  50. return Collections.unmodifiableList(edgesPerNode.get(node));
  51. return Collections.emptyList();
  52. }
  53. }